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

import com.airlock.iam.core.domain.model.http.HttpRequest;
import com.airlock.iam.core.domain.model.http.signature.key.HttpSignatureCertificateLoader;
import com.airlock.iam.core.domain.model.http.signature.key.X509CertificateHeaderLoader;
import com.airlock.iam.plugin.api.annotation.config.Plugin;
import com.airlock.iam.plugin.api.annotation.property.StringProperty;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;

@Plugin(
   description = "Loads the certificate from a header of the HTTP request. The HTTP header must contain a PEM or base64-encoded DER X.509 certificate.",
   displayName = "HTTP Signature X.509 Certificate Header Loader"
)
public final class HttpSignatureX509CertificateHeaderLoaderConfig implements HttpSignatureCertificateLoaderConfig {
   @StringProperty(
      description = "HTTP Request header name containing the certificate.",
      displayName = "Certificate Header Name",
      exampleValues = {"TPP-Signature-Certificate", "Certificate"},
      optional = false
   )
   private String headerName;

   @Override
   public HttpSignatureCertificateLoader create(HttpRequest request) {
      return new X509CertificateHeaderLoader(request.headers(), this.headerName);
   }

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

   @SuppressFBWarnings(justification = "generated code")
   public HttpSignatureX509CertificateHeaderLoaderConfig() {
   }

   @SuppressFBWarnings(justification = "generated code")
   public HttpSignatureX509CertificateHeaderLoaderConfig(String headerName) {
      this.headerName = headerName;
   }

   @SuppressFBWarnings(justification = "generated code")
   public static class HttpSignatureX509CertificateHeaderLoaderConfigBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private String headerName;

      @SuppressFBWarnings(justification = "generated code")
      HttpSignatureX509CertificateHeaderLoaderConfigBuilder() {
      }

      @SuppressFBWarnings(justification = "generated code")
      public HttpSignatureX509CertificateHeaderLoaderConfig.HttpSignatureX509CertificateHeaderLoaderConfigBuilder headerName(String headerName) {
         this.headerName = headerName;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public HttpSignatureX509CertificateHeaderLoaderConfig build() {
         return new HttpSignatureX509CertificateHeaderLoaderConfig(this.headerName);
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "HttpSignatureX509CertificateHeaderLoaderConfig.HttpSignatureX509CertificateHeaderLoaderConfigBuilder(headerName=" + this.headerName + ")";
      }
   }
}
