package com.airlock.iam.login.app.misc.oneshot.impl;

import com.airlock.iam.common.domain.model.certificate.CertificateImpl;
import com.airlock.iam.common.domain.model.credential.CertificateSubjectOrganizationIdentifierEqualityCredentialVerifier;
import com.airlock.iam.common.domain.model.credential.CredentialVerifier;
import com.airlock.iam.plugin.api.annotation.config.Plugin;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.security.cert.X509Certificate;

@Plugin(
   description = "Verifies that the HTTP signature signing certificate's subject organizationIdentifier (oid 2.5.4.97 according to <a href=\"https://www.itu.int/itu-t/recommendations/rec.aspx?rec=X.520\" target=\"_blank\">ITU-T Recommendations X.520</a>) equals the client credential certificate's subject organizationIdentifier. The signing certificate must contain an organizationIdentifier in it's Subject Distinguished Name and the credential must be a certificate credential containing an equal organizationIdentifier in it's Subject Distinguished Name or else the verification will fail.",
   displayName = "Certificate Subject Organization Identifier Equality Credential Verifier"
)
public final class CertificateSubjectOrganizationIdentifierEqualityCredentialVerifierConfig implements CertificateBasedCredentialVerifierConfig {
   @Override
   public CredentialVerifier create(X509Certificate signingCertificate) {
      return new CertificateSubjectOrganizationIdentifierEqualityCredentialVerifier(new CertificateImpl(signingCertificate));
   }

   @SuppressFBWarnings(justification = "generated code")
   public static CertificateSubjectOrganizationIdentifierEqualityCredentialVerifierConfig.CertificateSubjectOrganizationIdentifierEqualityCredentialVerifierConfigBuilder builder() {
      return new CertificateSubjectOrganizationIdentifierEqualityCredentialVerifierConfig.CertificateSubjectOrganizationIdentifierEqualityCredentialVerifierConfigBuilder();
   }

   @SuppressFBWarnings(justification = "generated code")
   public static class CertificateSubjectOrganizationIdentifierEqualityCredentialVerifierConfigBuilder {
      @SuppressFBWarnings(justification = "generated code")
      CertificateSubjectOrganizationIdentifierEqualityCredentialVerifierConfigBuilder() {
      }

      @SuppressFBWarnings(justification = "generated code")
      public CertificateSubjectOrganizationIdentifierEqualityCredentialVerifierConfig build() {
         return new CertificateSubjectOrganizationIdentifierEqualityCredentialVerifierConfig();
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "CertificateSubjectOrganizationIdentifierEqualityCredentialVerifierConfig.CertificateSubjectOrganizationIdentifierEqualityCredentialVerifierConfigBuilder()";
      }
   }
}
