package com.airlock.iam.authentication.application.configuration.kerberos;

import java.util.HashMap;
import java.util.Map;
import javax.security.auth.login.AppConfigurationEntry;
import javax.security.auth.login.Configuration;
import javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag;

public class KerberosLoginConfig extends Configuration {
   private final String keyTabLocation;
   private final String servicePrincipalName;
   private final boolean debug;

   public KerberosLoginConfig(String keyTabLocation, String servicePrincipalName, boolean debug) {
      this.keyTabLocation = keyTabLocation;
      this.servicePrincipalName = servicePrincipalName;
      this.debug = debug;
   }

   @Override
   public AppConfigurationEntry[] getAppConfigurationEntry(String name) {
      Map<String, String> options = new HashMap<>();
      options.put("useKeyTab", "true");
      options.put("keyTab", this.keyTabLocation);
      options.put("principal", this.servicePrincipalName);
      options.put("storeKey", "true");
      options.put("doNotPrompt", "true");
      options.put("refreshKrb5Config", "true");
      if (this.debug) {
         options.put("debug", "true");
      }

      options.put("isInitiator", "false");
      return new AppConfigurationEntry[]{new AppConfigurationEntry("com.sun.security.auth.module.Krb5LoginModule", LoginModuleControlFlag.REQUIRED, options)};
   }

   @Override
   public void refresh() {
   }
}
