/*
 * Decompiled with CFR 0.152.
 * 
 * Could not load the following classes:
 *  com.l7tech.common.http.CookieUtils
 *  com.l7tech.common.http.GenericHttpHeader
 *  com.l7tech.common.http.GenericHttpRequestParams
 *  com.l7tech.common.http.HttpConstants
 *  com.l7tech.common.http.HttpCookie
 *  com.l7tech.common.http.HttpHeader
 *  com.l7tech.gateway.common.audit.AssertionMessages
 *  com.l7tech.gateway.common.audit.AuditDetailMessage
 *  com.l7tech.identity.User
 *  com.l7tech.message.HttpInboundResponseFacet
 *  com.l7tech.message.HttpInboundResponseKnob
 *  com.l7tech.message.Message
 *  com.l7tech.message.MessageKnob
 *  com.l7tech.policy.assertion.AssertionStatus
 *  com.l7tech.policy.assertion.HttpRoutingAssertion
 *  com.l7tech.util.ValidationUtils
 *  org.springframework.context.ApplicationContext
 */
package com.l7tech.server.policy.assertion;

import com.l7tech.common.http.CookieUtils;
import com.l7tech.common.http.GenericHttpHeader;
import com.l7tech.common.http.GenericHttpRequestParams;
import com.l7tech.common.http.HttpConstants;
import com.l7tech.common.http.HttpCookie;
import com.l7tech.common.http.HttpHeader;
import com.l7tech.gateway.common.audit.AssertionMessages;
import com.l7tech.gateway.common.audit.AuditDetailMessage;
import com.l7tech.identity.User;
import com.l7tech.message.HttpInboundResponseFacet;
import com.l7tech.message.HttpInboundResponseKnob;
import com.l7tech.message.Message;
import com.l7tech.message.MessageKnob;
import com.l7tech.policy.assertion.AssertionStatus;
import com.l7tech.policy.assertion.HttpRoutingAssertion;
import com.l7tech.server.message.AuthenticationContext;
import com.l7tech.server.policy.assertion.AssertionStatusException;
import com.l7tech.server.policy.assertion.ServerRoutingAssertion;
import com.l7tech.server.policy.variable.ExpandVariables;
import com.l7tech.util.ValidationUtils;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import org.springframework.context.ApplicationContext;

public abstract class AbstractServerHttpRoutingAssertion<HRAT extends HttpRoutingAssertion>
extends ServerRoutingAssertion<HRAT> {
    private static final String e;
    private static final String[] M;

    protected AbstractServerHttpRoutingAssertion(HRAT HRAT, ApplicationContext applicationContext) {
        super(HRAT, applicationContext);
    }

    @Override
    protected int getConnectionTimeout(Map map) {
        Integer n2 = this.a(((HttpRoutingAssertion)this.assertion).getConnectionTimeout(), M[7], 1, 86400000, map);
        if (n2 == null) {
            n2 = super.getConnectionTimeout(null);
        }
        return n2;
    }

    @Override
    protected int getTimeout(Map map) {
        Integer n2 = this.a(((HttpRoutingAssertion)this.assertion).getTimeout(), M[4], 1, 86400000, map);
        if (n2 == null) {
            n2 = super.getTimeout(null);
        }
        return n2;
    }

    @Override
    protected int getMaxDuration(Map map) {
        Integer n2 = this.a(((HttpRoutingAssertion)this.assertion).getMaxDurationTimeout(), M[0], 1, 86400000, map);
        if (n2 == null) {
            n2 = super.getMaxDuration(null);
        }
        return n2;
    }

    /*
     * Enabled force condition propagation
     * Lifted jumps to return sites
     */
    private Integer a(String string, String string2, int n2, int n3, Map<String, Object> map) {
        if (string == null) return null;
        String string3 = ExpandVariables.process(string, map, this.getAudit()).trim();
        if (ValidationUtils.isValidInteger((String)string3, (boolean)false, (int)n2, (int)n3)) {
            return Integer.parseInt(string3);
        }
        this.logAndAudit((AuditDetailMessage)AssertionMessages.HTTPROUTE_CONFIGURATION_ERROR, string2 + M[1] + string3);
        throw new AssertionStatusException(AssertionStatus.FAILED);
    }

    protected int getMaxConnectionsPerHost() {
        return ((HttpRoutingAssertion)this.assertion).getMaxConnections();
    }

    protected int getMaxConnectionsAllHosts() {
        return ((HttpRoutingAssertion)this.assertion).getMaxConnections() * 10;
    }

    protected boolean areValidUrlHostnames(String[] stringArray) {
        for (String string : stringArray) {
            try {
                String[] stringArray2 = M;
                new URL(stringArray2[5], string, 777, stringArray2[6]);
            }
            catch (MalformedURLException malformedURLException) {
                this.logAndAudit((AuditDetailMessage)AssertionMessages.IP_ADDRESS_INVALID, string);
                return false;
            }
        }
        return true;
    }

    protected Integer validateTimeout(Integer n2) {
        Integer n3;
        block4: {
            block5: {
                n3 = n2;
                try {
                    try {
                        if (n3 == null) break block4;
                        if (n3 <= 0) break block5;
                    }
                    catch (AssertionStatusException assertionStatusException) {
                        throw AbstractServerHttpRoutingAssertion.a(assertionStatusException);
                    }
                    if (n3 <= 86400000) break block4;
                }
                catch (AssertionStatusException assertionStatusException) {
                    throw AbstractServerHttpRoutingAssertion.a(assertionStatusException);
                }
            }
            n3 = null;
            this.logger.log(Level.WARNING, M[2], n3);
        }
        return n3;
    }

    protected void doTaiCredentialChaining(AuthenticationContext authenticationContext, GenericHttpRequestParams genericHttpRequestParams, URL uRL) {
        block13: {
            String string;
            String string2;
            block19: {
                block17: {
                    block18: {
                        block16: {
                            block15: {
                                User user;
                                block14: {
                                    block12: {
                                        string2 = null;
                                        try {
                                            if (authenticationContext.isAuthenticated()) break block12;
                                            this.logAndAudit((AuditDetailMessage)AssertionMessages.HTTPROUTE_TAI_NOT_AUTHENTICATED);
                                            break block13;
                                        }
                                        catch (AssertionStatusException assertionStatusException) {
                                            throw AbstractServerHttpRoutingAssertion.a(assertionStatusException);
                                        }
                                    }
                                    user = authenticationContext.getLastAuthenticatedUser();
                                    if (user == null) break block18;
                                    string = user.getLogin();
                                    try {
                                        if (string != null && string.length() >= 1) break block14;
                                    }
                                    catch (AssertionStatusException assertionStatusException) {
                                        throw AbstractServerHttpRoutingAssertion.a(assertionStatusException);
                                    }
                                    string = user.getName();
                                }
                                try {
                                    if (string != null && string.length() >= 1) break block15;
                                }
                                catch (AssertionStatusException assertionStatusException) {
                                    throw AbstractServerHttpRoutingAssertion.a(assertionStatusException);
                                }
                                string = user.getId();
                            }
                            try {
                                if (string == null || string.length() <= 0) break block16;
                            }
                            catch (AssertionStatusException assertionStatusException) {
                                throw AbstractServerHttpRoutingAssertion.a(assertionStatusException);
                            }
                            this.logAndAudit((AuditDetailMessage)AssertionMessages.HTTPROUTE_TAI_CHAIN_USERNAME, string);
                            string2 = string;
                            break block19;
                        }
                        this.logAndAudit((AuditDetailMessage)AssertionMessages.HTTPROUTE_TAI_NO_USER_ID, string);
                        break block19;
                    }
                    string = authenticationContext.getLastCredentials().getLogin();
                    try {
                        if (string == null || string.length() <= 0) break block17;
                    }
                    catch (AssertionStatusException assertionStatusException) {
                        throw AbstractServerHttpRoutingAssertion.a(assertionStatusException);
                    }
                    this.logAndAudit((AuditDetailMessage)AssertionMessages.HTTPROUTE_TAI_CHAIN_LOGIN, string);
                    string2 = string;
                    break block19;
                }
                this.logAndAudit((AuditDetailMessage)AssertionMessages.HTTPROUTE_TAI_NO_USER);
            }
            try {
                if (string2 == null || string2.length() <= 0) break block13;
            }
            catch (AssertionStatusException assertionStatusException) {
                throw AbstractServerHttpRoutingAssertion.a(assertionStatusException);
            }
            String[] stringArray = M;
            genericHttpRequestParams.addExtraHeader((HttpHeader)new GenericHttpHeader(stringArray[3], string2));
            string = new HttpCookie(stringArray[8], string2, 0, uRL.getPath(), uRL.getHost());
            List<String> list = Collections.singletonList(string);
            genericHttpRequestParams.addExtraHeader((HttpHeader)new GenericHttpHeader(HttpConstants.HEADER_COOKIE, CookieUtils.getCookieHeader(list)));
            this.logAndAudit((AuditDetailMessage)AssertionMessages.HTTPROUTE_ADD_OUTGOING_COOKIE, stringArray[8]);
        }
    }

    protected static HttpInboundResponseKnob getOrCreateHttpInboundResponseKnob(Message message) {
        HttpInboundResponseKnob httpInboundResponseKnob = (HttpInboundResponseKnob)message.getKnob(HttpInboundResponseKnob.class);
        if (httpInboundResponseKnob == null) {
            httpInboundResponseKnob = new HttpInboundResponseFacet();
            message.attachKnob(HttpInboundResponseKnob.class, (MessageKnob)httpInboundResponseKnob);
        }
        return httpInboundResponseKnob;
    }

    private static AssertionStatusException a(AssertionStatusException assertionStatusException) {
        return assertionStatusException;
    }

    /*
     * Unable to fully structure code
     */
    static {
        block10: {
            block9: {
                var5 = new String[9];
                var3_1 = 0;
                var2_2 = "\rW8\u0010]\\q!B)_w\n`_.FxEj$\f`;\tQ._k@m'\u0016/Em\tl&\u00162QwNf`B)]|Fv4\u0016;\u0000d\t+7_,\\9\\p%\u00163Ij]f-\u0016$U\u007fHv,Bi\u0007\t`\u001feJlQ\f\u0012S!T9}j-S/Em\u0004(B4@\boP/_6Kb2";
                var4_3 = "\rW8\u0010]\\q!B)_w\n`_.FxEj$\f`;\tQ._k@m'\u0016/Em\tl&\u00162QwNf`B)]|Fv4\u0016;\u0000d\t+7_,\\9\\p%\u00163Ij]f-\u0016$U\u007fHv,Bi\u0007\t`\u001feJlQ\f\u0012S!T9}j-S/Em\u0004(B4@\boP/_6Kb2".length();
                var1_4 = 12;
                var0_5 = -1;
lbl7:
                // 2 sources

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

                while (true) {
                    var5[var3_1++] = AbstractServerHttpRoutingAssertion.c(v0, AbstractServerHttpRoutingAssertion.g(v2));
                    if ((var0_5 += var1_4) < var4_3) {
                        var1_4 = var2_2.charAt(var0_5);
                        ** continue;
                    }
                    var2_2 = "\u001dG0@bTi7G0\u000es^p;G+Z\u0007\u0017~\u0001{TrO";
                    var4_3 = "\u001dG0@bTi7G0\u000es^p;G+Z\u0007\u0017~\u0001{TrO".length();
                    var1_4 = 18;
                    var0_5 = -1;
lbl22:
                    // 2 sources

                    while (true) {
                        v0 = 68;
                        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++] = AbstractServerHttpRoutingAssertion.c(v0, AbstractServerHttpRoutingAssertion.g(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;
            }
        }
        AbstractServerHttpRoutingAssertion.M = var5;
        AbstractServerHttpRoutingAssertion.e = AbstractServerHttpRoutingAssertion.M[8];
    }

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

    /*
     * Handled impossible loop by duplicating code
     * Enabled aggressive block sorting
     */
    private static String c(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 -> 26;
                    case 1 -> 108;
                    case 2 -> 26;
                    case 3 -> 106;
                    case 4 -> 67;
                    case 5 -> 115;
                    default -> 89;
                })));
                ++n3;
                n4 = n4;
            } while (n4 > n3);
        }
        return new String(cArray2).intern();
    }
}

