package com.airlock.iam.publicselfservice.application.configuration.restrictions;

import com.airlock.iam.core.application.configuration.contextdata.StringContextDataItemNameConfig;
import com.airlock.iam.plugin.api.annotation.config.Plugin;
import com.airlock.iam.plugin.api.annotation.property.PluginProperty;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;

@Plugin(
   description = "<p>Does not allow users without an email address to perform public self-services and returns a corresponding feedback message.</p><p>For public self-service flows using email identity verification, the purpose of this restriction is only to add an informative feedback message. This increases usability but could allow user enumeration since it makes it possible to find existing users without an email address.</p><p>We recommend to configure this restriction as the last restriction to be checked.</p>",
   displayName = "No Email Address Restriction"
)
public class NoEmailAddressRestrictionConfig implements InternalPublicSelfServiceRestrictionConfig {
   @PluginProperty(description = "The context data field that contains the email address of the user.", displayName = "Email Item", optional = false)
   private StringContextDataItemNameConfig emailContextData;

   public StringContextDataItemNameConfig getEmailContextData() {
      return this.emailContextData;
   }

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

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

   @SuppressFBWarnings(justification = "generated code")
   public NoEmailAddressRestrictionConfig(StringContextDataItemNameConfig emailContextData) {
      this.emailContextData = emailContextData;
   }

   @SuppressFBWarnings(justification = "generated code")
   public static class NoEmailAddressRestrictionConfigBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private StringContextDataItemNameConfig emailContextData;

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

      @SuppressFBWarnings(justification = "generated code")
      public NoEmailAddressRestrictionConfig.NoEmailAddressRestrictionConfigBuilder emailContextData(StringContextDataItemNameConfig emailContextData) {
         this.emailContextData = emailContextData;
         return this;
      }

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

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "NoEmailAddressRestrictionConfig.NoEmailAddressRestrictionConfigBuilder(emailContextData=" + this.emailContextData + ")";
      }
   }
}
