package com.l7tech.server.admin;

import com.l7tech.gateway.common.admin.AdminLoginResult;
import com.l7tech.gateway.common.audit.LogonEvent;
import com.l7tech.gateway.common.spring.remoting.RemoteUtils;
import com.l7tech.identity.FailAttemptsExceededException;
import com.l7tech.identity.FailInactivityPeriodExceededException;
import com.l7tech.identity.User;
import com.l7tech.identity.UserDisabledException;
import com.l7tech.objectmodel.ObjectModelException;
import com.l7tech.policy.assertion.credential.LoginCredentials;
import com.l7tech.security.token.http.TlsClientCertToken;
import com.l7tech.server.event.system.FailedAdminLoginEvent;
import com.l7tech.server.identity.AuthenticationResult;
import com.l7tech.server.util.JaasUtils;
import com.l7tech.util.BuildInfo;
import com.l7tech.util.Config;
import java.rmi.server.ServerNotActiveException;
import java.security.cert.X509Certificate;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.security.auth.Subject;
import javax.security.auth.login.AccountLockedException;
import javax.security.auth.login.FailedLoginException;
import javax.security.auth.login.LoginException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ApplicationObjectSupport;

public class AdminLoginHelper extends ApplicationObjectSupport {
   private static final Logger a;
   private final AdminSessionManager b;
   private final Config c;
   private static final String[] d;

   public AdminLoginHelper(AdminSessionManager var1, Config var2) {
      this.b = var1;
      this.c = var2;
   }

   public AdminLoginResult login(X509Certificate var1) throws LoginException {
      try {
         if (var1 == null) {
            throw new SecurityException(d[13]);
         }
      } catch (ServerNotActiveException var17) {
         throw a(var17);
      }

      String var2 = null;
      LoginCredentials var3 = null;

      try {
         var3 = LoginCredentials.makeLoginCredentials(new TlsClientCertToken(var1), null);
         AuthenticationResult var4 = this.b.authenticate(var3);

         User var25;
         label62: {
            try {
               if (var4 != null) {
                  var25 = var4.getUser();
                  break label62;
               }
            } catch (ServerNotActiveException var12) {
               throw a(var12);
            }

            var25 = null;
         }

         User var5 = var25;
         boolean var6 = true;

         try {
            var2 = RemoteUtils.getClientHost();
         } catch (ServerNotActiveException var10) {
            var6 = false;
         }

         try {
            if (var5 == null) {
               this.getApplicationContext().publishEvent(new FailedAdminLoginEvent(this, var2, d[12] + var3.getLogin() + "'"));
               throw new FailedLoginException("'" + var3.getLogin() + d[9]);
            }
         } catch (ServerNotActiveException var9) {
            throw a(var9);
         }

         label54: {
            try {
               if (var6) {
                  a.info(d[10] + var5.getLogin() + d[3] + var2 + d[6]);
                  break label54;
               }
            } catch (ServerNotActiveException var11) {
               throw a(var11);
            }

            Logger var26 = a;
            String var10001 = var5.getLogin();
            String[] var21 = d;
            var26.finer(var21[11] + var10001 + var21[8]);
         }

         String var7 = "-";
         if (var6) {
            this.getApplicationContext().publishEvent(new LogonEvent(var5, 0));
            var7 = this.b.createSession(var5, null);
         }

         String[] var22 = d;
         return new AdminLoginResult(var5, var7, this.c.getProperty(var22[14]), BuildInfo.getProductVersion(), this.b());
      } catch (ObjectModelException var13) {
         String[] var20 = d;
         a.log(Level.WARNING, var20[7], var13);
         throw new SecurityException(var20[0], var13);
      } catch (FailAttemptsExceededException var14) {
         ApplicationContext var24 = this.getApplicationContext();
         String var28 = var3.getLogin();
         String[] var19 = d;
         var24.publishEvent(new FailedAdminLoginEvent(this, var2, var19[2] + var28 + "'"));
         throw new AccountLockedException("'" + var3.getLogin() + var19[4]);
      } catch (FailInactivityPeriodExceededException var15) {
         ApplicationContext var23 = this.getApplicationContext();
         String var27 = var3.getLogin();
         String[] var18 = d;
         var23.publishEvent(new FailedAdminLoginEvent(this, var2, var18[2] + var27 + "'"));
         throw new AccountLockedException("'" + var3.getLogin() + var18[15]);
      } catch (UserDisabledException var16) {
         ApplicationContext var10000 = this.getApplicationContext();
         String var10005 = var3.getLogin();
         String[] var8 = d;
         var10000.publishEvent(new FailedAdminLoginEvent(this, var2, var8[2] + var10005 + "'"));
         throw new FailedLoginException("'" + var3.getLogin() + var8[5]);
      }
   }

   static String a() {
      return a(JaasUtils.getCurrentSubject());
   }

   static String a(Subject var0) {
      String var1 = null;
      if (var0 != null) {
         Set var2 = var0.getPublicCredentials(String.class);
         if (var2.size() == 1) {
            String var3 = (String)var2.iterator().next();

            try {
               if (var3 == null || var3.isEmpty()) {
                  return var1;
               }
            } catch (SecurityException var4) {
               throw a(var4);
            }

            var1 = var3;
         }
      }

      return var1;
   }

   private String b() {
      String var1 = this.c.getProperty(d[1]);

      try {
         if (var1 == null || !var1.trim().isEmpty()) {
            return var1;
         }
      } catch (SecurityException var2) {
         throw a(var2);
      }

      return null;
   }

   static {
      String[] var5 = new String[16];
      int var3 = 0;
      String var2 = "\bk\u0014z\u001e#\f }\u0001f\u0012\"\u0016ix\u0001{\u0017(\u001c\u0013%q\u0007}\u0015c\u000f(l\u000e{\u0015*:(p\u000ew\t\u001e\u000f\u007f\t~\u001e)X(z\r{\u0015m\u0014&y\t|[+\u0017;>\f}\u001c$\u0016i9\u0015n>\f}\u001c*\u001d->\t|[+\n&s@[+m_&n>\u0005j\u0018(\u001d-{\u00042\u0016,\u0000g>\u0006s\u0012!\u001d->\f}\u001c\"\u0016i\u007f\u0014f\u001e \b=mN\u000en>\ta[)\u0011:\u007f\u0002~\u001e)V\u0002n0\u001d\bk\u0014z\u001e#\f }\u0001f\u0012\"\u0016in\u0012}\r$\u001c,l@w\t?\u0017;\u0014n>\f}\u001c*\u001d->\t|[!\u0017*\u007f\f~\u0002c\u001cn>\u0003}\u000e!\u001cip\u000ff[/\u001di\u007f\u0015f\u0013(\u0016=w\u0003s\u000f(\u001c\u0006\u001cm\u0005`[j\u0006\u001cm\u0005`[j\u001e\u000f\u007f\t~\u001e)X(z\r{\u0015m\u0014&y\t|[+\u0017;>\f}\u001c$\u0016i9\u001c\nr\tw\u00159X*{\u0012f\u0012+\u0011*\u007f\u0014w[?\u001d8k\t`\u001e)V";
      int var4 = "\bk\u0014z\u001e#\f }\u0001f\u0012\"\u0016ix\u0001{\u0017(\u001c\u0013%q\u0007}\u0015c\u000f(l\u000e{\u0015*:(p\u000ew\t\u001e\u000f\u007f\t~\u001e)X(z\r{\u0015m\u0014&y\t|[+\u0017;>\f}\u001c$\u0016i9\u0015n>\f}\u001c*\u001d->\t|[+\n&s@[+m_&n>\u0005j\u0018(\u001d-{\u00042\u0016,\u0000g>\u0006s\u0012!\u001d->\f}\u001c\"\u0016i\u007f\u0014f\u001e \b=mN\u000en>\ta[)\u0011:\u007f\u0002~\u001e)V\u0002n0\u001d\bk\u0014z\u001e#\f }\u0001f\u0012\"\u0016in\u0012}\r$\u001c,l@w\t?\u0017;\u0014n>\f}\u001c*\u001d->\t|[!\u0017*\u007f\f~\u0002c\u001cn>\u0003}\u000e!\u001cip\u000ff[/\u001di\u007f\u0015f\u0013(\u0016=w\u0003s\u000f(\u001c\u0006\u001cm\u0005`[j\u0006\u001cm\u0005`[j\u001e\u000f\u007f\t~\u001e)X(z\r{\u0015m\u0014&y\t|[+\u0017;>\f}\u001c$\u0016i9\u001c\nr\tw\u00159X*{\u0012f\u0012+\u0011*\u007f\u0014w[?\u001d8k\t`\u001e)V"
         .length();
      char var1 = 21;
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 50;
         String var10001 = var2.substring(++var7, var7 + var1);
         byte var10002 = -1;

         while (true) {
            String var8 = a(var10000, a(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     d = var5;
                     a = Logger.getLogger(AdminLoginHelper.class.getName());
                     return;
                  }

                  var1 = var2.charAt(var7);
                  break;
               default:
                  var5[var3++] = var8;
                  if ((var7 += var1) < var4) {
                     var1 = var2.charAt(var7);
                     continue label24;
                  }

                  var2 = "t<A6Uyxe=L8Sr\u001br6_,_o[*>D1_m@i\u001d#sH'UeP`6I\u007f_nTg'D)_tL$#H-_oQ*";
                  var4 = "t<A6Uyxe=L8Sr\u001br6_,_o[*>D1_m@i\u001d#sH'UeP`6I\u007f_nTg'D)_tL$#H-_oQ*".length();
                  var1 = 29;
                  var7 = -1;
            }

            var10000 = 127;
            var10001 = var2.substring(++var7, var7 + var1);
            var10002 = 0;
         }
      }
   }

   private static Exception a(Exception var0) {
      return var0;
   }

   private static char[] a(String var0) {
      char[] var10000 = var0.toCharArray();
      if (var10000.length < 2) {
         var10000[0] = (char)(var10000[0] ^ 74);
      }

      return var10000;
   }

   private static String a(int var0, char[] var1) {
      int var10003 = var1.length;
      int var10002 = var0;
      char[] var10001 = var1;
      int var10000 = var10003;

      for (int var2 = 0; var10000 > var2; var2++) {
         var10001[var2] = (char)(var10001[var2] ^ var10002 ^ switch (var2 % 7) {
            case 0 -> 123;
            case 1 -> 44;
            case 2 -> 82;
            case 3 -> 32;
            case 4 -> 73;
            case 5 -> 127;
            default -> 74;
         });
      }

      return new String(var10001).intern();
   }
}
