content: /*
   * The Alluxio Open Foundation licenses this work under the Apache License, version 2.0
   * (the "License"). You may not use this work except in compliance with the License, which is
   * available at www.apache.org/licenses/LICENSE-2.0
   *
   * This software is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
   * either express or implied, as more fully set forth in the License.
   *
   * See the NOTICE file distributed with this work for information regarding copyright ownership.
   */
  
  package alluxio.security.login;
  
  import alluxio.util.OSUtils;
  
  import javax.annotation.concurrent.ThreadSafe;
  
  /**
   * This class provides constants used in JAAS login.
   */
  @ThreadSafe
  public final class LoginModuleConfigurationUtils {
    /** Login module according to different OS type. */
    public static final String OS_LOGIN_MODULE_NAME;
    /** Class name of Principal according to different OS type. */
    public static final String OS_PRINCIPAL_CLASS_NAME;
  
    private LoginModuleConfigurationUtils() {} // prevent instantiation
  
    static {
      OS_LOGIN_MODULE_NAME = getOSLoginModuleName();
      OS_PRINCIPAL_CLASS_NAME = getOSPrincipalClassName();
    }
  
    /**
     * @return the OS login module class name
     */
    private static String getOSLoginModuleName() {
      if (OSUtils.IBM_JAVA) {
        if (OSUtils.isWindows()) {
          return OSUtils.is64Bit() ? "com.ibm.security.auth.module.Win64LoginModule"
              : "com.ibm.security.auth.module.NTLoginModule";
        } else if (OSUtils.isAIX()) {
          return OSUtils.is64Bit() ? "com.ibm.security.auth.module.AIX64LoginModule"
              : "com.ibm.security.auth.module.AIXLoginModule";
        } else {
          return "com.ibm.security.auth.module.LinuxLoginModule";
        }
      } else {
        return OSUtils.isWindows() ? "com.sun.security.auth.module.NTLoginModule"
            : "com.sun.security.auth.module.UnixLoginModule";
      }
    }
  
    /**
     * @return the OS principal class name
     */
    private static String getOSPrincipalClassName() {
      String principalClassName;
      if (OSUtils.IBM_JAVA) {
        if (OSUtils.is64Bit()) {
          principalClassName = "com.ibm.security.auth.UsernamePrincipal";
        } else {
          if (OSUtils.isWindows()) {
            principalClassName = "com.ibm.security.auth.NTUserPrincipal";
          } else if (OSUtils.isAIX()) {
            principalClassName = "com.ibm.security.auth.AIXPrincipal";
          } else {
            principalClassName = "com.ibm.security.auth.LinuxPrincipal";
          }
        }
      } else {
        principalClassName = OSUtils.isWindows() ? "com.sun.security.auth.NTUserPrincipal"
            : "com.sun.security.auth.UnixPrincipal";
      }
      return principalClassName;
    }
  }
  