/*
 * Decompiled with CFR 0.152.
 * 
 * Could not load the following classes:
 *  com.l7tech.common.password.PasswordHasher
 *  com.l7tech.common.protocol.SecureSpanConstants$HttpHeaders
 *  com.l7tech.gateway.common.LicenseException
 *  com.l7tech.gateway.common.transport.SsgConnector$Endpoint
 *  com.l7tech.identity.AuthenticationException
 *  com.l7tech.identity.IdentityProviderType
 *  com.l7tech.identity.User
 *  com.l7tech.identity.internal.InternalUser
 *  com.l7tech.objectmodel.FindException
 *  com.l7tech.objectmodel.InvalidPasswordException
 *  com.l7tech.objectmodel.ObjectModelException
 *  com.l7tech.util.Charsets
 *  com.l7tech.util.ExceptionUtils
 *  com.l7tech.util.HexUtils
 *  jakarta.servlet.ServletConfig
 *  jakarta.servlet.ServletContext
 *  jakarta.servlet.ServletException
 *  jakarta.servlet.http.HttpServletRequest
 *  jakarta.servlet.http.HttpServletResponse
 *  org.springframework.web.context.WebApplicationContext
 *  org.springframework.web.context.support.WebApplicationContextUtils
 */
package com.l7tech.server;

import com.l7tech.common.password.PasswordHasher;
import com.l7tech.common.protocol.SecureSpanConstants;
import com.l7tech.gateway.common.LicenseException;
import com.l7tech.gateway.common.transport.SsgConnector;
import com.l7tech.identity.AuthenticationException;
import com.l7tech.identity.IdentityProviderType;
import com.l7tech.identity.User;
import com.l7tech.identity.internal.InternalUser;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.InvalidPasswordException;
import com.l7tech.objectmodel.ObjectModelException;
import com.l7tech.server.AuthenticatableHttpServlet;
import com.l7tech.server.admin.AdminSessionManager;
import com.l7tech.server.identity.AuthenticationResult;
import com.l7tech.server.identity.IdentityProviderFactory;
import com.l7tech.server.identity.internal.InternalIdentityProvider;
import com.l7tech.server.identity.internal.InternalUserManager;
import com.l7tech.server.security.PasswordEnforcerManager;
import com.l7tech.server.transport.ListenerException;
import com.l7tech.util.Charsets;
import com.l7tech.util.ExceptionUtils;
import com.l7tech.util.HexUtils;
import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.logging.Level;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

public class PasswdServlet
extends AuthenticatableHttpServlet {
    private PasswordEnforcerManager passwordEnforcerManager;
    private PasswordHasher passwordHasher;
    private AdminSessionManager adminSessionManager;
    static final long serialVersionUID = -3423084256915963308L;
    private static final String[] b;

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        super.init(servletConfig);
        WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext((ServletContext)this.getServletContext());
        String[] stringArray = b;
        this.passwordEnforcerManager = (PasswordEnforcerManager)webApplicationContext.getBean(stringArray[23], PasswordEnforcerManager.class);
        this.passwordHasher = (PasswordHasher)webApplicationContext.getBean(stringArray[1], PasswordHasher.class);
        this.adminSessionManager = (AdminSessionManager)webApplicationContext.getBean(stringArray[18], AdminSessionManager.class);
    }

    @Override
    protected String getFeature() {
        return b[25];
    }

    @Override
    protected SsgConnector.Endpoint getRequiredEndpoint() {
        return SsgConnector.Endpoint.PASSWD;
    }

    /*
     * Unable to fully structure code
     * Could not resolve type clashes
     */
    protected void doPost(HttpServletRequest var1_1, HttpServletResponse var2_2) throws ServletException, IOException {
        block27: {
            block26: {
                try {
                    if (!var1_1.isSecure()) {
                        this.logger.warning(PasswdServlet.b[17]);
                        PasswdServlet.sendBackError(var2_2, 403, PasswdServlet.b[2]);
                        return;
                    }
                }
                catch (AuthenticationException v0) {
                    throw PasswdServlet.a(v0);
                }
                try {
                    var3_3 = this.authenticateRequestBasic(var1_1);
                }
                catch (AuthenticationException var4_4) {
                    var13_8 = PasswdServlet.b;
                    this.logger.log(Level.WARNING, var13_8[8] + var4_4.getMessage());
                    PasswdServlet.sendBackError(var2_2, 401, var13_8[5]);
                    return;
                }
                catch (LicenseException var4_5) {
                    var13_9 = PasswdServlet.b;
                    this.logger.log(Level.WARNING, var13_9[3], var4_5);
                    PasswdServlet.sendBackError(var2_2, 503, var13_9[16]);
                    return;
                }
                catch (ListenerException var4_6) {
                    var13_10 = PasswdServlet.b;
                    this.logger.log(Level.WARNING, var13_10[21], var4_6);
                    PasswdServlet.sendBackError(var2_2, 503, var13_10[10]);
                    return;
                }
                if (var3_3 == null) ** GOTO lbl34
                try {
                    block30: {
                        if (var3_3.length >= 1) break block26;
                        break block30;
                        catch (AuthenticationException v1) {
                            throw PasswdServlet.a(v1);
                        }
                    }
                    this.logger.warning(PasswdServlet.b[15]);
                    PasswdServlet.sendBackError(var2_2, 401, PasswdServlet.b[12]);
                    return;
                }
                catch (AuthenticationException v2) {
                    throw PasswdServlet.a(v2);
                }
            }
            var4_7 = null;
            var5_12 = null;
            for (AuthenticationResult var9_18 : var3_3) {
                var10_22 = var9_18.getUser();
                try {
                    var13_11 = PasswdServlet.b;
                    var11_23 = (IdentityProviderFactory)this.getApplicationContext().getBean(var13_11[20]);
                    var12_25 /* !! */  = var11_23.getProvider(var10_22.getProviderId());
                    if (var12_25 /* !! */ .getConfig().getTypeVal() != IdentityProviderType.INTERNAL.toVal()) continue;
                    var4_7 = (InternalUser)var10_22;
                    var5_12 = (InternalIdentityProvider)var12_25 /* !! */ ;
                    break;
                }
                catch (FindException var11_24) {
                    var13_11 = PasswdServlet.b;
                    this.logger.log(Level.WARNING, var13_11[26], var11_24);
                    PasswdServlet.sendBackError(var2_2, 500, var11_24.getMessage());
                }
            }
            try {
                if (var4_7 == null) {
                    this.logger.warning(PasswdServlet.b[0]);
                    PasswdServlet.sendBackError(var2_2, 403, PasswdServlet.b[9]);
                    return;
                }
            }
            catch (AuthenticationException v3) {
                throw PasswdServlet.a(v3);
            }
            var6_13 = var1_1.getHeader(SecureSpanConstants.HttpHeaders.HEADER_NEWPASSWD);
            var7_15 = this.findCredentialsBasic(var1_1);
            var8_17 = new String(var7_15.getCredentials());
            if (var6_13 == null) ** GOTO lbl76
            try {
                block31: {
                    if (var6_13.length() >= 1) break block27;
                    break block31;
                    catch (AuthenticationException v4) {
                        throw PasswdServlet.a(v4);
                    }
                }
                this.logger.warning(PasswdServlet.b[11] + SecureSpanConstants.HttpHeaders.HEADER_NEWPASSWD + PasswdServlet.b[14]);
                PasswdServlet.sendBackError(var2_2, 400, PasswdServlet.b[24]);
                return;
            }
            catch (AuthenticationException v5) {
                throw PasswdServlet.a(v5);
            }
        }
        var6_13 = new String(HexUtils.decodeBase64((String)var6_13, (boolean)true), Charsets.UTF8);
        try {
            block29: {
                block28: {
                    var9_19 = this.adminSessionManager.isAdministrativeUser((User)var4_7);
                    try {
                        if (!var9_19) break block28;
                        this.adminSessionManager.changePassword((User)var4_7, var8_17, (String)var6_13);
                        break block29;
                    }
                    catch (AuthenticationException v6) {
                        throw PasswdServlet.a(v6);
                    }
                }
                var10_22 = new InternalUser();
                var10_22.copyFrom((User)var4_7);
                var10_22.setVersion(var4_7.getVersion());
                var11_23 = this.passwordHasher.hashPassword(var6_13.getBytes(Charsets.UTF8));
                this.passwordEnforcerManager.isPasswordPolicyCompliant(var10_22, (String)var6_13, var8_17);
                var10_22.setHashedPassword((String)var11_23);
                var12_25 /* !! */  = (InternalUserManager)var5_12.getUserManager();
                var12_25 /* !! */ .update(var10_22);
            }
            var13_11 = PasswdServlet.b;
            this.logger.fine(var13_11[6] + var4_7.getLogin());
            var2_2.setStatus(200);
            var10_22 = var2_2.getOutputStream();
            var10_22.write(var13_11[7].getBytes());
            var10_22.close();
        }
        catch (InvalidPasswordException var9_20) {
            var13_11 = PasswdServlet.b;
            this.logger.log(Level.SEVERE, var13_11[13], ExceptionUtils.getDebugException((Throwable)var9_20));
            PasswdServlet.sendBackError(var2_2, 400, var13_11[19]);
        }
        catch (ObjectModelException var9_21) {
            this.logger.log(Level.WARNING, PasswdServlet.b[4], var9_21);
            PasswdServlet.sendBackError(var2_2, 500, var9_21.getMessage());
        }
    }

    private static void sendBackError(HttpServletResponse httpServletResponse, int n2, String string) throws IOException {
        httpServletResponse.setStatus(n2);
        httpServletResponse.getOutputStream().print(string);
        httpServletResponse.getOutputStream().close();
    }

    protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
        throw new ServletException(b[22]);
    }

    private static AuthenticationException a(AuthenticationException authenticationException) {
        return authenticationException;
    }

    /*
     * Unable to fully structure code
     */
    static {
        block10: {
            block9: {
                var5 = new String[27];
                var3_1 = 0;
                var2_2 = "\u00148Y'%Cxg\"]m2E}2(H9`I\u007fg#T9`Ib3(I#!L,2>^?l\u0000~\"9N?.Ib m\u000f}s\u000e\u000e7,H>7O~#\u0005Z>(E~\u001b\u0017!^,3E,$\"V(`Bm$&\u001b\"6E~g%O90S$\u0014(I;)Cig$Hm5N`..^#3EhkmI(4U~)$U*`\u0015<w+$\"N!$\u0000b(9\u001b./M|+(O(`O|\"?Z9)ObkmI(4U~)$U*`\u0015<w\u000f\u0005,_m#Ri#(U9)A`4\u001a\u0017,H>7O~#mX%!Nk\")\u001b+/R,2>^?`\u001c\u0017,H>7O~#mX%!Nk\")\u001b>5Co\">]8,Lu \u0005,_m#Ri#(U9)A`4a\u001b?%Ty5#R#'\u00008w|\u0001m^\b#W4`U\u007f\"?Hm\"E`(#\\$.G,3\"\u001b9(E,.#O(2Nm+mR)%Nx.9Bm0Rc1$_(2\u0000m5(\u001b,5Td(?R7%D,3\"\u001b.(Ab (\u001b9(Ee5mK,3S{(?_2\u0000,O(7Aug,N5)Le&?Bm3E~1$X(`Nc3m^#!B`\")\u001b\".\u0000x/$Hm0O~35\u0013%^m2E}2(H9`De#mU\"4\u0000e).W8$E,&mU(7\u0000|&>H:/Rhg$Um(Em#(Im\u0014\t\"\u001b;!Le#mX?%Di)9R,,S\u00167,H>7O~#mL,3\u0000b(9\u001b;!Le#\u0010kmI(4U~)$U*`\u0014<wc$\t\"\u001b;!Le#mX?%Di)9R,,S g?^95Rb.#\\mt\u0010=i0\u0000,O(7Aug,N5)Le&?Bm3E~1$X(`Nc3m^#!B`\")\u001b/9\u0000`..^#3E>\u0015(J8%Sxg.Z %\u0000c1(Im)N\u007f\".N?%\u0000o/,U#%L,o#T9`Hx3=Hdn\u0000^\"9N?.Ib m\u000f}s\u000e\u0013&)V$.si4>R\".mm),\\(2\u0019\u0012#Z/,E,3\"\u001b.(Ab (\u001b=!S\u007f0\"I)\u0017.)^#4Ix>\u001dI\"6Ih\"?},#Tc542\u0014(I;)Cig$Hm.Oxg(U,\"Li#mT#`Td.>\u001b=/RxkmI(4U~)$U*`\u0015<w3\n(O%/D,)\"Om3U|7\"I9%D7g.^?4\u0000~\";T.!Te(#\u001b 5Sxg8H(`pC\u0014\u0019\u00177,H>7O~#\bU+/Ro\"?v,.Ak\"?\u001e\n$H>)Nkg\"Im%M|34\u001b#%W,7,H>7O~#c";
                var4_3 = "\u00148Y'%Cxg\"]m2E}2(H9`I\u007fg#T9`Ib3(I#!L,2>^?l\u0000~\"9N?.Ib m\u000f}s\u000e\u000e7,H>7O~#\u0005Z>(E~\u001b\u0017!^,3E,$\"V(`Bm$&\u001b\"6E~g%O90S$\u0014(I;)Cig$Hm5N`..^#3EhkmI(4U~)$U*`\u0015<w+$\"N!$\u0000b(9\u001b./M|+(O(`O|\"?Z9)ObkmI(4U~)$U*`\u0015<w\u000f\u0005,_m#Ri#(U9)A`4\u001a\u0017,H>7O~#mX%!Nk\")\u001b+/R,2>^?`\u001c\u0017,H>7O~#mX%!Nk\")\u001b>5Co\">]8,Lu \u0005,_m#Ri#(U9)A`4a\u001b?%Ty5#R#'\u00008w|\u0001m^\b#W4`U\u007f\"?Hm\"E`(#\\$.G,3\"\u001b9(E,.#O(2Nm+mR)%Nx.9Bm0Rc1$_(2\u0000m5(\u001b,5Td(?R7%D,3\"\u001b.(Ab (\u001b9(Ee5mK,3S{(?_2\u0000,O(7Aug,N5)Le&?Bm3E~1$X(`Nc3m^#!B`\")\u001b\".\u0000x/$Hm0O~35\u0013%^m2E}2(H9`De#mU\"4\u0000e).W8$E,&mU(7\u0000|&>H:/Rhg$Um(Em#(Im\u0014\t\"\u001b;!Le#mX?%Di)9R,,S\u00167,H>7O~#mL,3\u0000b(9\u001b;!Le#\u0010kmI(4U~)$U*`\u0014<wc$\t\"\u001b;!Le#mX?%Di)9R,,S g?^95Rb.#\\mt\u0010=i0\u0000,O(7Aug,N5)Le&?Bm3E~1$X(`Nc3m^#!B`\")\u001b/9\u0000`..^#3E>\u0015(J8%Sxg.Z %\u0000c1(Im)N\u007f\".N?%\u0000o/,U#%L,o#T9`Hx3=Hdn\u0000^\"9N?.Ib m\u000f}s\u000e\u0013&)V$.si4>R\".mm),\\(2\u0019\u0012#Z/,E,3\"\u001b.(Ab (\u001b=!S\u007f0\"I)\u0017.)^#4Ix>\u001dI\"6Ih\"?},#Tc542\u0014(I;)Cig$Hm.Oxg(U,\"Li#mT#`Td.>\u001b=/RxkmI(4U~)$U*`\u0015<w3\n(O%/D,)\"Om3U|7\"I9%D7g.^?4\u0000~\";T.!Te(#\u001b 5Sxg8H(`pC\u0014\u0019\u00177,H>7O~#\bU+/Ro\"?v,.Ak\"?\u001e\n$H>)Nkg\"Im%M|34\u001b#%W,7,H>7O~#c".length();
                var1_4 = 55;
                var0_5 = -1;
lbl7:
                // 2 sources

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

                while (true) {
                    var5[var3_1++] = PasswdServlet.b(v0, PasswdServlet.b(v2));
                    if ((var0_5 += var1_4) < var4_3) {
                        var1_4 = var2_2.charAt(var0_5);
                        ** continue;
                    }
                    var2_2 = "JV7EW=\u0017\u0003c$@M)\u0016+Z\\0_Z~\u001cVGePQ3\u0002UV1V\u001e1\u0002\\A$GW1\u001c\u0015\u00137VJ+\u0000WZ+T\u001ekB\t";
                    var4_3 = "JV7EW=\u0017\u0003c$@M)\u0016+Z\\0_Z~\u001cVGePQ3\u0002UV1V\u001e1\u0002\\A$GW1\u001c\u0015\u00137VJ+\u0000WZ+T\u001ekB\t".length();
                    var1_4 = 14;
                    var0_5 = -1;
lbl22:
                    // 2 sources

                    while (true) {
                        v0 = 80;
                        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++] = PasswdServlet.b(v0, PasswdServlet.b(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;
            }
        }
        PasswdServlet.b = var5;
    }

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

    /*
     * Handled impossible loop by duplicating code
     * Enabled aggressive block sorting
     */
    private static String b(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 -> 105;
                    case 1 -> 99;
                    case 2 -> 21;
                    case 3 -> 99;
                    case 4 -> 110;
                    case 5 -> 14;
                    default -> 34;
                })));
                ++n3;
                n4 = n4;
            } while (n4 > n3);
        }
        return new String(cArray2).intern();
    }
}

