/*
 * Decompiled with CFR 0.152.
 * 
 * Could not load the following classes:
 *  com.l7tech.common.mime.ContentTypeHeader
 *  com.l7tech.common.mime.NoSuchPartException
 *  com.l7tech.gateway.common.service.PublishedService
 *  com.l7tech.identity.User
 *  com.l7tech.identity.UserBean
 *  com.l7tech.message.HttpRequestKnob
 *  com.l7tech.message.HttpResponseKnob
 *  com.l7tech.message.Message
 *  com.l7tech.policy.assertion.AssertionStatus
 *  com.l7tech.policy.assertion.PolicyAssertionException
 *  com.l7tech.security.token.SecurityToken
 *  com.l7tech.security.token.http.HttpBasicToken
 *  com.l7tech.util.Charsets
 *  com.l7tech.util.Functions$Nullary
 *  com.l7tech.util.Pair
 *  org.jetbrains.annotations.NotNull
 *  org.jetbrains.annotations.Nullable
 */
package com.l7tech.server.policy.bundle.ssgman.restman;

import com.l7tech.common.mime.ContentTypeHeader;
import com.l7tech.common.mime.NoSuchPartException;
import com.l7tech.gateway.common.service.PublishedService;
import com.l7tech.identity.User;
import com.l7tech.identity.UserBean;
import com.l7tech.message.HttpRequestKnob;
import com.l7tech.message.HttpResponseKnob;
import com.l7tech.message.Message;
import com.l7tech.policy.assertion.AssertionStatus;
import com.l7tech.policy.assertion.PolicyAssertionException;
import com.l7tech.security.token.SecurityToken;
import com.l7tech.security.token.http.HttpBasicToken;
import com.l7tech.server.identity.AuthenticationResult;
import com.l7tech.server.message.PolicyEnforcementContext;
import com.l7tech.server.message.PolicyEnforcementContextFactory;
import com.l7tech.server.policy.bundle.GatewayManagementDocumentUtilities;
import com.l7tech.server.policy.bundle.ssgman.BaseGatewayManagementInvoker;
import com.l7tech.server.policy.bundle.ssgman.GatewayManagementInvoker;
import com.l7tech.server.policy.bundle.ssgman.restman.RestmanMessage;
import com.l7tech.server.policy.bundle.ssgman.restman.a;
import com.l7tech.server.policy.bundle.ssgman.restman.b;
import com.l7tech.util.Charsets;
import com.l7tech.util.Functions;
import com.l7tech.util.Pair;
import java.io.IOException;
import java.util.logging.Level;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.xml.sax.SAXException;

/*
 * Exception performing whole class analysis ignored.
 */
public class RestmanInvoker
extends BaseGatewayManagementInvoker {
    private static final String b;
    public static final String VAR_RESTMAN_ACTION;
    private static final String c;
    public static final String VAR_RESTMAN_URI;
    public static final String VAR_RESTMAN_CONTENT_TYPE;
    public static final String URL_1_0_BUNDLE;
    public static final String URL_1_0_BUNDLE_BATCH;
    private static final String d;
    public static final String UTF_8;
    private static final String[] f;

    public RestmanInvoker(@NotNull Functions.Nullary<Boolean> nullary, @NotNull GatewayManagementInvoker gatewayManagementInvoker) {
        if (nullary == null) {
            RestmanInvoker.b(0);
        }
        if (gatewayManagementInvoker == null) {
            RestmanInvoker.b(1);
        }
        super(nullary, gatewayManagementInvoker);
    }

    @NotNull
    private Pair<AssertionStatus, RestmanMessage> a(String string) throws GatewayManagementDocumentUtilities.AccessDeniedManagementResponse, GatewayManagementDocumentUtilities.UnexpectedManagementResponse {
        Pair<AssertionStatus, RestmanMessage> pair;
        try {
            pair = this.callManagementAssertion(this.getContext(string));
            if (pair == null) {
                RestmanInvoker.b(2);
            }
        }
        catch (GatewayManagementDocumentUtilities.AccessDeniedManagementResponse accessDeniedManagementResponse) {
            throw RestmanInvoker.b(accessDeniedManagementResponse);
        }
        return pair;
    }

    protected Pair<AssertionStatus, RestmanMessage> callManagementAssertion(PolicyEnforcementContext policyEnforcementContext) throws GatewayManagementDocumentUtilities.AccessDeniedManagementResponse, GatewayManagementDocumentUtilities.UnexpectedManagementResponse {
        RestmanMessage restmanMessage;
        AssertionStatus assertionStatus;
        try {
            assertionStatus = this.gatewayManagementInvoker.checkRequest(policyEnforcementContext);
        }
        catch (PolicyAssertionException | IOException throwable) {
            String[] stringArray = f;
            throw new RuntimeException(stringArray[3] + throwable.getMessage(), throwable);
        }
        try {
            restmanMessage = this.getRestmanMessage(policyEnforcementContext);
            try {
                if (restmanMessage == null) {
                    throw new GatewayManagementDocumentUtilities.UnexpectedManagementResponse(f[22]);
                }
            }
            catch (IOException iOException) {
                throw RestmanInvoker.b(iOException);
            }
            try {
                if (restmanMessage.isErrorResponse()) {
                    throw new GatewayManagementDocumentUtilities.UnexpectedManagementResponse(restmanMessage.getAsFormattedString());
                }
            }
            catch (IOException iOException) {
                throw RestmanInvoker.b(iOException);
            }
        }
        catch (NoSuchPartException | IOException | SAXException throwable) {
            throw new RuntimeException(f[18] + throwable.getMessage(), throwable);
        }
        return new Pair((Object)assertionStatus, (Object)restmanMessage);
    }

    public Pair<AssertionStatus, RestmanMessage> callManagementCheckInterrupted(@Nullable PolicyEnforcementContext policyEnforcementContext, String string) throws InterruptedException, GatewayManagementDocumentUtilities.AccessDeniedManagementResponse, GatewayManagementDocumentUtilities.UnexpectedManagementResponse {
        Pair<AssertionStatus, RestmanMessage> pair;
        try {
            pair = policyEnforcementContext == null ? this.a(string) : this.callManagementAssertion(policyEnforcementContext);
        }
        catch (GatewayManagementDocumentUtilities.UnexpectedManagementResponse unexpectedManagementResponse) {
            block10: {
                try {
                    try {
                        if (!unexpectedManagementResponse.isCausedByMgmtAssertionInternalError() || !((Boolean)this.cancelledCallback.call()).booleanValue()) break block10;
                    }
                    catch (GatewayManagementDocumentUtilities.UnexpectedManagementResponse unexpectedManagementResponse2) {
                        throw RestmanInvoker.b(unexpectedManagementResponse2);
                    }
                    throw new InterruptedException(f[2]);
                }
                catch (GatewayManagementDocumentUtilities.UnexpectedManagementResponse unexpectedManagementResponse3) {
                    throw RestmanInvoker.b(unexpectedManagementResponse3);
                }
            }
            throw unexpectedManagementResponse;
        }
        catch (GatewayManagementDocumentUtilities.AccessDeniedManagementResponse accessDeniedManagementResponse) {
            try {
                if (logger.isLoggable(Level.FINE)) {
                    logger.log(Level.FINE, f[25] + accessDeniedManagementResponse.getDeniedRequest());
                }
            }
            catch (GatewayManagementDocumentUtilities.UnexpectedManagementResponse unexpectedManagementResponse) {
                throw RestmanInvoker.b(unexpectedManagementResponse);
            }
            throw accessDeniedManagementResponse;
        }
        return pair;
    }

    public PolicyEnforcementContext getContext(String string) {
        String[] stringArray;
        PolicyEnforcementContext policyEnforcementContext;
        block5: {
            block4: {
                Message message = new Message();
                ContentTypeHeader contentTypeHeader = ContentTypeHeader.XML_DEFAULT;
                try {
                    message.initialize(contentTypeHeader, string.getBytes(Charsets.UTF8));
                }
                catch (IOException iOException) {
                    String[] stringArray2 = f;
                    throw new RuntimeException(stringArray2[21] + iOException.getMessage(), iOException);
                }
                b b10 = new b(this);
                message.attachHttpRequestKnob((HttpRequestKnob)b10);
                Message message2 = new Message();
                message2.attachHttpResponseKnob((HttpResponseKnob)new a(this));
                policyEnforcementContext = PolicyEnforcementContextFactory.createPolicyEnforcementContext(message, message2);
                UserBean userBean = this.getAuthenticatedUser();
                try {
                    if (userBean == null) break block4;
                    policyEnforcementContext.getDefaultAuthenticationContext().addAuthenticationResult(new AuthenticationResult((User)userBean, (SecurityToken)new HttpBasicToken(userBean.getLogin(), "".toCharArray()), null, false));
                    break block5;
                }
                catch (IOException iOException) {
                    throw RestmanInvoker.b(iOException);
                }
            }
            stringArray = f;
            logger.warning(stringArray[23]);
        }
        stringArray = f;
        policyEnforcementContext.setVariable(stringArray[30], stringArray[29]);
        policyEnforcementContext.setVariable(stringArray[17], ContentTypeHeader.XML_DEFAULT.getFullValue());
        policyEnforcementContext.setVariable(stringArray[12], stringArray[16]);
        policyEnforcementContext.setVariable(stringArray[7], stringArray[14]);
        PublishedService publishedService = new PublishedService();
        publishedService.setRoutingUri(stringArray[27]);
        policyEnforcementContext.setService(publishedService);
        return policyEnforcementContext;
    }

    public RestmanMessage getRestmanMessage(PolicyEnforcementContext policyEnforcementContext) throws IOException, NoSuchPartException, SAXException {
        return new RestmanMessage(policyEnforcementContext.getResponse());
    }

    /*
     * Exception decompiling
     */
    private static /* synthetic */ void b(int var0) {
        /*
         * This method has failed to decompile.  When submitting a bug report, please provide this stack trace, and (if you hold appropriate legal rights) the relevant class file.
         * 
         * org.benf.cfr.reader.util.ConfusedCFRException: Tried to end blocks [0[TRYBLOCK]], but top level block is 6[SWITCH]
         *     at org.benf.cfr.reader.bytecode.analysis.opgraph.Op04StructuredStatement.processEndingBlocks(Op04StructuredStatement.java:435)
         *     at org.benf.cfr.reader.bytecode.analysis.opgraph.Op04StructuredStatement.buildNestedBlocks(Op04StructuredStatement.java:484)
         *     at org.benf.cfr.reader.bytecode.analysis.opgraph.Op03SimpleStatement.createInitialStructuredBlock(Op03SimpleStatement.java:736)
         *     at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysisInner(CodeAnalyser.java:850)
         *     at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysisOrWrapFail(CodeAnalyser.java:278)
         *     at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysis(CodeAnalyser.java:201)
         *     at org.benf.cfr.reader.entities.attributes.AttributeCode.analyse(AttributeCode.java:94)
         *     at org.benf.cfr.reader.entities.Method.analyse(Method.java:531)
         *     at org.benf.cfr.reader.entities.ClassFile.analyseMid(ClassFile.java:1050)
         *     at org.benf.cfr.reader.entities.ClassFile.analyseTop(ClassFile.java:942)
         *     at org.benf.cfr.reader.Driver.doJarVersionTypes(Driver.java:257)
         *     at org.benf.cfr.reader.Driver.doJar(Driver.java:139)
         *     at org.benf.cfr.reader.CfrDriverImpl.analyse(CfrDriverImpl.java:76)
         *     at org.benf.cfr.reader.Main.main(Main.java:54)
         */
        throw new IllegalStateException("Decompilation failed");
    }

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

    /*
     * Unable to fully structure code
     */
    static {
        block10: {
            block9: {
                var5 = new String[32];
                var3_1 = 0;
                var2_2 = ";e-xYS;\fw?uSS!\u0011\na0o{^#\fd\u001dmr^-\bc549o-\u007fwP#\f 7bjW=\u001bu.xw]!Id;x{Q;\fd~hkWo\u001do~epF*\u001bn?`>W=\u001bo,?<n;tnW,\u001de:,w\\;\fr0mr\u0012*\u001br1~>[!\u001fo5epUo\u000ea*iiS6Im?b\u007fU*\u0004e0x>A*\u001bv7o{\bo>(r9ysW!\u001d 8cl\u0012\u000f'o*Bk^#Ip?~\u007f_*\u001de,,9\u0017<N 1j>\u0017<G%-,sG<\u001d 0cj\u0012-\f 0yr^\u0006Ui0ej\f\u0015;e-xYS;\fw?uSS!Ga=xw]!\u0015;e-xYS;\fw?uSS!Ga=xw]!\u0010X.n#|G!\rl;#|S;\nh\u0005<T\u0018!&=\no3#r\u0005;\fc6#mW=\u001fe,#n]#\u0000c'#|G!\rl;#mA(\u0004a0#lW<\u001dm?b1`*\u001at3mp{!\u001fo5il\u0012;e-xYS;\fw?uSS!Gu,e\u0016;e-xYS;\fw?uSS!Gb?\u007f{G=\u0000=\no3#r\u0005;\fc6#mW=\u001fe,#n]#\u0000c'#|G!\rl;#mA(\u0004a0#lW<\u001dm?b1`*\u001at3mp{!\u001fo5il\u00039U\n\u0017\na2`SS!\bg;a{\\;(s-ilF&\u0006n\u001e\u0001t*|$\u001d`\u0005o=mrZ \u001atd4.\n\u007fFr;\u007fj_.\u0007/\u001a;e-xYS;\fw?uSS!Gc1bjW!\u001dT'|{?<n;tnW,\u001de:,w\\;\fr0mr\u0012*\u001br1~>B.\u001bs7by\u0012(\bt;{\u007fKo\u0004a0myW\"\fn*,lW<\u0019o0\u007f{\bo*)N1xPG#\u0005 3ijZ \r {\u007f0\u0017<Im+\u007fj\u0012!\u0006t~~{F:\u001bn~bk^#\u0018\u000ea*iiS6$a0myW\"\fn*EpD \u0002e,@<n;tnW,\u001de:,w\\;\fr0mr\u0012*\u001br1~>B=\fp?~w\\(Ig?x{E.\u0010 3mpS(\fm;bj\u0012=\fq+imFuI1<n;tnW,\u001de:,{J,\fp*eq\\uIa~o\u007f^#Ir;\u007fk^;Iw?\u007f>W7\u0019e=x{Va;'o~mz_&\u0007i-xlS;\u0000v;,kA*\u001b 8ck\\+G \fioG*\u001at~xq\u0012&\u0007s*mr^o\u001ei2`>T.\u0000lp\u0016;e-xYS;\fw?uSS!Gb?\u007f{G=\u0000\u001a(c=imAo\re0e{Vo\u000fo,,lW>\u001ce-x$\u001a;e-xYS;\fw?uSS!Gc1bjW!\u001dT'|{\tFr;\u007fj_.\u0007*\u001e\u0001t*|$\u001d`\u0005o=mrZ \u001atd4.\n\u007fFr;\u007fj_.\u0007/\u0015X.n#|G!\rl;3jW<\u001d=8mrA*";
                var4_3 = ";e-xYS;\fw?uSS!\u0011\na0o{^#\fd\u001dmr^-\bc549o-\u007fwP#\f 7bjW=\u001bu.xw]!Id;x{Q;\fd~hkWo\u001do~epF*\u001bn?`>W=\u001bo,?<n;tnW,\u001de:,w\\;\fr0mr\u0012*\u001br1~>[!\u001fo5epUo\u000ea*iiS6Im?b\u007fU*\u0004e0x>A*\u001bv7o{\bo>(r9ysW!\u001d 8cl\u0012\u000f'o*Bk^#Ip?~\u007f_*\u001de,,9\u0017<N 1j>\u0017<G%-,sG<\u001d 0cj\u0012-\f 0yr^\u0006Ui0ej\f\u0015;e-xYS;\fw?uSS!Ga=xw]!\u0015;e-xYS;\fw?uSS!Ga=xw]!\u0010X.n#|G!\rl;#|S;\nh\u0005<T\u0018!&=\no3#r\u0005;\fc6#mW=\u001fe,#n]#\u0000c'#|G!\rl;#mA(\u0004a0#lW<\u001dm?b1`*\u001at3mp{!\u001fo5il\u0012;e-xYS;\fw?uSS!Gu,e\u0016;e-xYS;\fw?uSS!Gb?\u007f{G=\u0000=\no3#r\u0005;\fc6#mW=\u001fe,#n]#\u0000c'#|G!\rl;#mA(\u0004a0#lW<\u001dm?b1`*\u001at3mp{!\u001fo5il\u00039U\n\u0017\na2`SS!\bg;a{\\;(s-ilF&\u0006n\u001e\u0001t*|$\u001d`\u0005o=mrZ \u001atd4.\n\u007fFr;\u007fj_.\u0007/\u001a;e-xYS;\fw?uSS!Gc1bjW!\u001dT'|{?<n;tnW,\u001de:,w\\;\fr0mr\u0012*\u001br1~>B.\u001bs7by\u0012(\bt;{\u007fKo\u0004a0myW\"\fn*,lW<\u0019o0\u007f{\bo*)N1xPG#\u0005 3ijZ \r {\u007f0\u0017<Im+\u007fj\u0012!\u0006t~~{F:\u001bn~bk^#\u0018\u000ea*iiS6$a0myW\"\fn*EpD \u0002e,@<n;tnW,\u001de:,w\\;\fr0mr\u0012*\u001br1~>B=\fp?~w\\(Ig?x{E.\u0010 3mpS(\fm;bj\u0012=\fq+imFuI1<n;tnW,\u001de:,{J,\fp*eq\\uIa~o\u007f^#Ir;\u007fk^;Iw?\u007f>W7\u0019e=x{Va;'o~mz_&\u0007i-xlS;\u0000v;,kA*\u001b 8ck\\+G \fioG*\u001at~xq\u0012&\u0007s*mr^o\u001ei2`>T.\u0000lp\u0016;e-xYS;\fw?uSS!Gb?\u007f{G=\u0000\u001a(c=imAo\re0e{Vo\u000fo,,lW>\u001ce-x$\u001a;e-xYS;\fw?uSS!Gc1bjW!\u001dT'|{\tFr;\u007fj_.\u0007*\u001e\u0001t*|$\u001d`\u0005o=mrZ \u001atd4.\n\u007fFr;\u007fj_.\u0007/\u0015X.n#|G!\rl;3jW<\u001d=8mrA*".length();
                var1_4 = 14;
                var0_5 = -1;
lbl7:
                // 2 sources

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

                while (true) {
                    var5[var3_1++] = RestmanInvoker.b(v0, RestmanInvoker.b(v2));
                    if ((var0_5 += var1_4) < var4_3) {
                        var1_4 = var2_2.charAt(var0_5);
                        ** continue;
                    }
                    var2_2 = "c=u \u0001\u000bcT/g-\u000b\u000by\u001f-t=\n\u0000v6{$\u001fyU4c";
                    var4_3 = "c=u \u0001\u000bcT/g-\u000b\u000by\u001f-t=\n\u0000v6{$\u001fyU4c".length();
                    var1_4 = 18;
                    var0_5 = -1;
lbl22:
                    // 2 sources

                    while (true) {
                        v0 = 62;
                        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++] = RestmanInvoker.b(v0, RestmanInvoker.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;
            }
        }
        RestmanInvoker.f = var5;
        RestmanInvoker.URL_1_0_BUNDLE = RestmanInvoker.f[31];
        RestmanInvoker.URL_1_0_BUNDLE_BATCH = RestmanInvoker.f[8];
        RestmanInvoker.d = RestmanInvoker.f[28];
        RestmanInvoker.b = RestmanInvoker.f[0];
        RestmanInvoker.VAR_RESTMAN_CONTENT_TYPE = RestmanInvoker.f[26];
        RestmanInvoker.VAR_RESTMAN_ACTION = RestmanInvoker.f[6];
        RestmanInvoker.UTF_8 = RestmanInvoker.f[9];
        RestmanInvoker.c = RestmanInvoker.f[24];
        RestmanInvoker.VAR_RESTMAN_URI = RestmanInvoker.f[11];
    }

    private static char[] b(String string) {
        char[] cArray = string.toCharArray();
        if (cArray.length < 2) {
            cArray = cArray;
            cArray[0] = (char)(cArray[0] ^ 0x29);
        }
        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 -> 15;
                    case 1 -> 102;
                    case 2 -> 56;
                    case 3 -> 106;
                    case 4 -> 120;
                    case 5 -> 84;
                    default -> 41;
                })));
                ++n3;
                n4 = n4;
            } while (n4 > n3);
        }
        return new String(cArray2).intern();
    }
}

