/*
 * Decompiled with CFR 0.152.
 * 
 * Could not load the following classes:
 *  com.l7tech.gateway.common.admin.AdminLoginResult
 *  com.l7tech.gateway.common.audit.LogonEvent
 *  com.l7tech.gateway.common.spring.remoting.RemoteUtils
 *  com.l7tech.identity.FailAttemptsExceededException
 *  com.l7tech.identity.FailInactivityPeriodExceededException
 *  com.l7tech.identity.User
 *  com.l7tech.identity.UserDisabledException
 *  com.l7tech.objectmodel.ObjectModelException
 *  com.l7tech.policy.assertion.credential.LoginCredentials
 *  com.l7tech.security.token.SecurityToken
 *  com.l7tech.security.token.http.TlsClientCertToken
 *  com.l7tech.util.BuildInfo
 *  com.l7tech.util.Config
 *  org.springframework.context.ApplicationEvent
 *  org.springframework.context.support.ApplicationObjectSupport
 */
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.SecurityToken;
import com.l7tech.security.token.http.TlsClientCertToken;
import com.l7tech.server.admin.AdminSessionManager;
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.ApplicationEvent;
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 adminSessionManager, Config config) {
        this.b = adminSessionManager;
        this.c = config;
    }

    public AdminLoginResult login(X509Certificate x509Certificate) throws LoginException {
        try {
            if (x509Certificate == null) {
                throw new SecurityException(d[13]);
            }
        }
        catch (ServerNotActiveException serverNotActiveException) {
            throw AdminLoginHelper.a(serverNotActiveException);
        }
        String string = null;
        LoginCredentials loginCredentials = null;
        try {
            String[] stringArray;
            boolean bl2;
            User user;
            block19: {
                block18: {
                    User user2;
                    loginCredentials = LoginCredentials.makeLoginCredentials((SecurityToken)new TlsClientCertToken(x509Certificate), null);
                    AuthenticationResult authenticationResult = this.b.authenticate(loginCredentials);
                    try {
                        user2 = authenticationResult != null ? authenticationResult.getUser() : null;
                    }
                    catch (ServerNotActiveException serverNotActiveException) {
                        throw AdminLoginHelper.a(serverNotActiveException);
                    }
                    user = user2;
                    bl2 = true;
                    try {
                        string = RemoteUtils.getClientHost();
                    }
                    catch (ServerNotActiveException serverNotActiveException) {
                        bl2 = false;
                    }
                    try {
                        if (user == null) {
                            this.getApplicationContext().publishEvent((ApplicationEvent)new FailedAdminLoginEvent((Object)this, string, d[12] + loginCredentials.getLogin() + "'"));
                            throw new FailedLoginException("'" + loginCredentials.getLogin() + d[9]);
                        }
                    }
                    catch (ServerNotActiveException serverNotActiveException) {
                        throw AdminLoginHelper.a(serverNotActiveException);
                    }
                    try {
                        if (!bl2) break block18;
                        a.info(d[10] + user.getLogin() + d[3] + string + d[6]);
                        break block19;
                    }
                    catch (ServerNotActiveException serverNotActiveException) {
                        throw AdminLoginHelper.a(serverNotActiveException);
                    }
                }
                stringArray = d;
                a.finer(stringArray[11] + user.getLogin() + stringArray[8]);
            }
            String string2 = "-";
            if (bl2) {
                this.getApplicationContext().publishEvent((ApplicationEvent)new LogonEvent((Object)user, 0));
                string2 = this.b.createSession(user, null);
            }
            stringArray = d;
            return new AdminLoginResult(user, string2, this.c.getProperty(stringArray[14]), BuildInfo.getProductVersion(), this.b());
        }
        catch (ObjectModelException objectModelException) {
            String[] stringArray = d;
            a.log(Level.WARNING, stringArray[7], objectModelException);
            throw new SecurityException(stringArray[0], objectModelException);
        }
        catch (FailAttemptsExceededException failAttemptsExceededException) {
            String[] stringArray = d;
            this.getApplicationContext().publishEvent((ApplicationEvent)new FailedAdminLoginEvent((Object)this, string, stringArray[2] + loginCredentials.getLogin() + "'"));
            throw new AccountLockedException("'" + loginCredentials.getLogin() + stringArray[4]);
        }
        catch (FailInactivityPeriodExceededException failInactivityPeriodExceededException) {
            String[] stringArray = d;
            this.getApplicationContext().publishEvent((ApplicationEvent)new FailedAdminLoginEvent((Object)this, string, stringArray[2] + loginCredentials.getLogin() + "'"));
            throw new AccountLockedException("'" + loginCredentials.getLogin() + stringArray[15]);
        }
        catch (UserDisabledException userDisabledException) {
            String[] stringArray = d;
            this.getApplicationContext().publishEvent((ApplicationEvent)new FailedAdminLoginEvent((Object)this, string, stringArray[2] + loginCredentials.getLogin() + "'"));
            throw new FailedLoginException("'" + loginCredentials.getLogin() + stringArray[5]);
        }
    }

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

    static String a(Subject subject) {
        String string;
        block3: {
            Set<String> set;
            string = null;
            if (subject != null && (set = subject.getPublicCredentials(String.class)).size() == 1) {
                String string2 = set.iterator().next();
                try {
                    if (string2 == null || string2.isEmpty()) break block3;
                }
                catch (SecurityException securityException) {
                    throw AdminLoginHelper.a(securityException);
                }
                string = string2;
            }
        }
        return string;
    }

    private String b() {
        String string;
        block2: {
            string = this.c.getProperty(d[1]);
            try {
                if (string == null || !string.trim().isEmpty()) break block2;
            }
            catch (SecurityException securityException) {
                throw AdminLoginHelper.a(securityException);
            }
            string = null;
        }
        return string;
    }

    /*
     * Unable to fully structure code
     */
    static {
        block10: {
            block9: {
                var5 = new String[16];
                var3_1 = 0;
                var2_2 = "\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";
                var4_3 = "\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();
                var1_4 = 21;
                var0_5 = -1;
lbl7:
                // 2 sources

                while (true) {
                    v0 = 50;
                    v1 = ++var0_5;
                    v2 = var2_2.substring(v1, v1 + var1_4);
                    v3 = -1;
                    break block9;
                    break;
                }
lbl13:
                // 1 sources

                while (true) {
                    var5[var3_1++] = AdminLoginHelper.a(v0, AdminLoginHelper.a(v2));
                    if ((var0_5 += var1_4) < var4_3) {
                        var1_4 = var2_2.charAt(var0_5);
                        ** continue;
                    }
                    var2_2 = "t<A6Uyxe=L8Sr\u001br6_,_o[*>D1_m@i\u001d#sH'UeP`6I\u007f_nTg'D)_tL$#H-_oQ*";
                    var4_3 = "t<A6Uyxe=L8Sr\u001br6_,_o[*>D1_m@i\u001d#sH'UeP`6I\u007f_nTg'D)_tL$#H-_oQ*".length();
                    var1_4 = 29;
                    var0_5 = -1;
lbl22:
                    // 2 sources

                    while (true) {
                        v0 = 127;
                        v4 = ++var0_5;
                        v2 = var2_2.substring(v4, v4 + var1_4);
                        v3 = 0;
                        break block9;
                        break;
                    }
                    break;
                }
lbl28:
                // 1 sources

                while (true) {
                    var5[var3_1++] = AdminLoginHelper.a(v0, AdminLoginHelper.a(v2));
                    if ((var0_5 += var1_4) < var4_3) {
                        var1_4 = var2_2.charAt(var0_5);
                        ** continue;
                    }
                    break block10;
                    break;
                }
            }
            switch (v3) {
                default: {
                    ** continue;
                }
                ** case 0:
lbl39:
                // 1 sources

                ** continue;
            }
        }
        AdminLoginHelper.d = var5;
        AdminLoginHelper.a = Logger.getLogger(AdminLoginHelper.class.getName());
    }

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

    private static char[] a(String string) {
        char[] cArray = string.toCharArray();
        if (cArray.length < 2) {
            cArray = cArray;
            cArray[0] = (char)(cArray[0] ^ 0x4A);
        }
        return cArray;
    }

    /*
     * Handled impossible loop by duplicating code
     * Enabled aggressive block sorting
     */
    private static String a(int n2, char[] cArray) {
        char[] cArray2;
        block11: {
            int n3;
            int n4;
            int n5;
            block10: {
                n5 = n2;
                cArray2 = cArray;
                n4 = cArray.length;
                n3 = 0;
                if (!true) break block10;
                n4 = n4;
                if (n4 <= n3) break block11;
            }
            do {
                n5 = n5;
                cArray2 = cArray2;
                int n6 = n3;
                cArray2[n6] = (char)(cArray2[n6] ^ (n5 ^ (switch (n3 % 7) {
                    case 0 -> 123;
                    case 1 -> 44;
                    case 2 -> 82;
                    case 3 -> 32;
                    case 4 -> 73;
                    case 5 -> 127;
                    default -> 74;
                })));
                ++n3;
                n4 = n4;
            } while (n4 > n3);
        }
        return new String(cArray2).intern();
    }
}

