/*
 * Decompiled with CFR 0.152.
 * 
 * Could not load the following classes:
 *  com.l7tech.identity.AuthenticationException
 *  com.l7tech.identity.PersistentGroup
 *  com.l7tech.identity.PersistentUser
 *  com.l7tech.identity.ValidationException
 *  com.l7tech.identity.cert.CertEntryRow
 *  com.l7tech.identity.cert.ClientCertManager
 *  com.l7tech.objectmodel.EntityHeaderSet
 *  com.l7tech.objectmodel.EntityType
 *  com.l7tech.objectmodel.FindException
 *  com.l7tech.objectmodel.Goid
 *  com.l7tech.objectmodel.IdentityHeader
 *  com.l7tech.policy.assertion.credential.LoginCredentials
 *  org.springframework.beans.BeansException
 *  org.springframework.beans.factory.InitializingBean
 *  org.springframework.context.ApplicationContext
 *  org.springframework.context.ApplicationContextAware
 */
package com.l7tech.server.identity;

import com.l7tech.identity.AuthenticationException;
import com.l7tech.identity.PersistentGroup;
import com.l7tech.identity.PersistentUser;
import com.l7tech.identity.ValidationException;
import com.l7tech.identity.cert.CertEntryRow;
import com.l7tech.identity.cert.ClientCertManager;
import com.l7tech.objectmodel.EntityHeaderSet;
import com.l7tech.objectmodel.EntityType;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.IdentityHeader;
import com.l7tech.policy.assertion.credential.LoginCredentials;
import com.l7tech.server.identity.AuthenticationResult;
import com.l7tech.server.identity.PersistentGroupManager;
import com.l7tech.server.identity.PersistentIdentityProvider;
import com.l7tech.server.identity.PersistentUserManager;
import java.math.BigInteger;
import java.security.cert.X509Certificate;
import java.util.Collection;
import java.util.List;
import java.util.TreeSet;
import javax.security.auth.x500.X500Principal;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public abstract class PersistentIdentityProviderImpl<UT extends PersistentUser, GT extends PersistentGroup, UMT extends PersistentUserManager<UT>, GMT extends PersistentGroupManager<UT, GT>>
implements ApplicationContextAware,
InitializingBean,
PersistentIdentityProvider<UT, GT, UMT, GMT> {
    protected ApplicationContext applicationContext;
    protected ClientCertManager clientCertManager;
    private static final String[] m;

    public EntityHeaderSet<IdentityHeader> search(EntityType[] entityHeaderSet, String string) throws FindException {
        boolean bl2;
        boolean bl3;
        block17: {
            block16: {
                try {
                    try {
                        if (entityHeaderSet != null && ((EntityType[])entityHeaderSet).length >= 1) break block16;
                    }
                    catch (FindException findException) {
                        throw PersistentIdentityProviderImpl.a(findException);
                    }
                    throw new IllegalArgumentException(m[1]);
                }
                catch (FindException findException) {
                    throw PersistentIdentityProviderImpl.a(findException);
                }
            }
            bl3 = false;
            bl2 = false;
            for (EntityType entityType : entityHeaderSet) {
                if (entityType == EntityType.USER) {
                    bl3 = true;
                    continue;
                }
                if (entityType != EntityType.GROUP) continue;
                bl2 = true;
            }
            try {
                try {
                    if (bl3 || bl2) break block17;
                }
                catch (FindException findException) {
                    throw PersistentIdentityProviderImpl.a(findException);
                }
                throw new IllegalArgumentException(m[2]);
            }
            catch (FindException findException) {
                throw PersistentIdentityProviderImpl.a(findException);
            }
        }
        EntityHeaderSet entityHeaderSet2 = new EntityHeaderSet(new TreeSet());
        try {
            if (bl3) {
                entityHeaderSet2.addAll((Collection)((PersistentUserManager)this.getUserManager()).search(string));
            }
        }
        catch (FindException findException) {
            throw PersistentIdentityProviderImpl.a(findException);
        }
        try {
            if (bl2) {
                entityHeaderSet2.addAll(((PersistentGroupManager)this.getGroupManager()).search(string));
            }
        }
        catch (FindException findException) {
            throw PersistentIdentityProviderImpl.a(findException);
        }
        return entityHeaderSet2;
    }

    public void validate(UT UT) throws ValidationException {
        String[] stringArray = m;
        throw new ValidationException(stringArray[4] + UT.getLogin() + stringArray[0]);
    }

    public void setClientCertManager(ClientCertManager clientCertManager) {
        this.clientCertManager = clientCertManager;
    }

    public void afterPropertiesSet() throws Exception {
    }

    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }

    @Override
    public X509Certificate findCertByIssuerAndSerial(X500Principal x500Principal, BigInteger bigInteger) throws FindException {
        return this.a(this.clientCertManager.findByIssuerAndSerial(x500Principal, bigInteger));
    }

    @Override
    public X509Certificate findCertBySki(String string) throws FindException {
        return this.a(this.clientCertManager.findBySki(string));
    }

    @Override
    public X509Certificate findCertByThumbprintSHA1(String string) throws FindException {
        return this.a(this.clientCertManager.findByThumbprint(string));
    }

    @Override
    public X509Certificate findCertBySubjectDn(X500Principal x500Principal) throws FindException {
        return this.a(this.clientCertManager.findBySubjectDn(x500Principal));
    }

    @Override
    public AuthenticationResult authenticate(LoginCredentials loginCredentials, boolean bl2) throws AuthenticationException {
        return this.authenticate(loginCredentials);
    }

    private X509Certificate a(List<CertEntryRow> list) throws FindException {
        X509Certificate x509Certificate = null;
        Goid goid = this.getConfig().getGoid();
        for (CertEntryRow certEntryRow : list) {
            block5: {
                try {
                    try {
                        if (!certEntryRow.getProvider().equals((Object)goid)) continue;
                        if (x509Certificate == null) break block5;
                    }
                    catch (FindException findException) {
                        throw PersistentIdentityProviderImpl.a(findException);
                    }
                    throw new FindException(m[3]);
                }
                catch (FindException findException) {
                    throw PersistentIdentityProviderImpl.a(findException);
                }
            }
            x509Certificate = certEntryRow.getCertificate();
        }
        return x509Certificate;
    }

    private static FindException a(FindException findException) {
        return findException;
    }

    /*
     * Unable to fully structure code
     */
    static {
        block10: {
            block9: {
                var5 = new String[5];
                var3_1 = 0;
                var2_2 = "\u0015\u0017\"\u000ex\u001c\u0000ABz\u0010x\u001aTWS#N\u001b_By\u00147\u0018AAD*\u0001cHLWVy\u00147\u0007NW\u0017~\u0019g\r&FNz\u0005dHMGD~@t\u0007NFVc\u000e7\u001dSWEy@v\u0006D\u0012Xx@p\u001aOGGy";
                var4_3 = "\u0015\u0017\"\u000ex\u001c\u0000ABz\u0010x\u001aTWS#N\u001b_By\u00147\u0018AAD*\u0001cHLWVy\u00147\u0007NW\u0017~\u0019g\r&FNz\u0005dHMGD~@t\u0007NFVc\u000e7\u001dSWEy@v\u0006D\u0012Xx@p\u001aOGGy".length();
                var1_4 = 18;
                var0_5 = -1;
lbl7:
                // 2 sources

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

                while (true) {
                    var5[var3_1++] = PersistentIdentityProviderImpl.a(v0, PersistentIdentityProviderImpl.b(v2));
                    if ((var0_5 += var1_4) < var4_3) {
                        var1_4 = var2_2.charAt(var0_5);
                        ** continue;
                    }
                    var2_2 = "\u000f#\u0004u\b36< \u0005r\u001c\u007f>i!\u0010o\u000f{2'+Qx\ta/ *\u0018x\rg>:\u001c\u001f-\u001dr\br/ #\u001f;\nr2%)\u0015;\n|)i9\u0002~\u001e3|";
                    var4_3 = "\u000f#\u0004u\b36< \u0005r\u001c\u007f>i!\u0010o\u000f{2'+Qx\ta/ *\u0018x\rg>:\u001c\u001f-\u001dr\br/ #\u001f;\nr2%)\u0015;\n|)i9\u0002~\u001e3|".length();
                    var1_4 = 36;
                    var0_5 = -1;
lbl22:
                    // 2 sources

                    while (true) {
                        v0 = 121;
                        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++] = PersistentIdentityProviderImpl.a(v0, PersistentIdentityProviderImpl.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;
            }
        }
        PersistentIdentityProviderImpl.m = 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 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 -> 48;
                    case 1 -> 53;
                    case 2 -> 8;
                    case 3 -> 98;
                    case 4 -> 21;
                    case 5 -> 106;
                    default -> 34;
                })));
                ++n3;
                n4 = n4;
            } while (n4 > n3);
        }
        return new String(cArray2).intern();
    }
}

