/*
 * Decompiled with CFR 0.152.
 * 
 * Could not load the following classes:
 *  com.l7tech.common.io.CertUtils
 *  com.l7tech.identity.Group
 *  com.l7tech.identity.GroupBean
 *  com.l7tech.identity.GroupMembership
 *  com.l7tech.identity.Identity
 *  com.l7tech.identity.User
 *  com.l7tech.identity.fed.FederatedGroup
 *  com.l7tech.identity.fed.FederatedGroupMembership
 *  com.l7tech.identity.fed.FederatedIdentityProviderConfig
 *  com.l7tech.identity.fed.FederatedUser
 *  com.l7tech.identity.fed.NoTrustedCertsSaveException
 *  com.l7tech.identity.fed.VirtualGroup
 *  com.l7tech.objectmodel.FindException
 *  com.l7tech.objectmodel.Goid
 *  com.l7tech.objectmodel.SaveException
 *  com.l7tech.util.GoidUpgradeMapper
 *  jakarta.persistence.criteria.CriteriaBuilder
 *  jakarta.persistence.criteria.Expression
 *  jakarta.persistence.criteria.Predicate
 *  jakarta.persistence.criteria.Root
 *  org.hibernate.Criteria
 *  org.hibernate.criterion.Criterion
 *  org.hibernate.criterion.Restrictions
 *  org.springframework.transaction.annotation.Propagation
 *  org.springframework.transaction.annotation.Transactional
 */
package com.l7tech.server.identity.fed;

import com.l7tech.common.io.CertUtils;
import com.l7tech.identity.Group;
import com.l7tech.identity.GroupBean;
import com.l7tech.identity.GroupMembership;
import com.l7tech.identity.Identity;
import com.l7tech.identity.User;
import com.l7tech.identity.fed.FederatedGroup;
import com.l7tech.identity.fed.FederatedGroupMembership;
import com.l7tech.identity.fed.FederatedIdentityProviderConfig;
import com.l7tech.identity.fed.FederatedUser;
import com.l7tech.identity.fed.NoTrustedCertsSaveException;
import com.l7tech.identity.fed.VirtualGroup;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.SaveException;
import com.l7tech.server.identity.PersistentGroupManagerImpl;
import com.l7tech.server.identity.fed.FederatedGroupManager;
import com.l7tech.server.identity.fed.FederatedIdentityProvider;
import com.l7tech.server.identity.fed.FederatedUserManager;
import com.l7tech.util.GoidUpgradeMapper;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.Expression;
import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import org.hibernate.Criteria;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Transactional(propagation=Propagation.REQUIRED, rollbackFor={Throwable.class})
public class FederatedGroupManagerImpl
extends PersistentGroupManagerImpl<FederatedUser, FederatedGroup, FederatedUserManager, FederatedGroupManager>
implements FederatedGroupManager {
    private FederatedIdentityProvider t;
    private FederatedIdentityProviderConfig u;
    private static final Logger v;
    private static final String[] x;

    @Override
    public void configure(FederatedIdentityProvider federatedIdentityProvider) {
        this.setIdentityProvider(federatedIdentityProvider);
        this.t = federatedIdentityProvider;
        this.u = (FederatedIdentityProviderConfig)this.t.getConfig();
    }

    public FederatedGroup reify(GroupBean groupBean) {
        Goid goid;
        FederatedGroup federatedGroup;
        FederatedGroup federatedGroup2 = new FederatedGroup(groupBean.getProviderId(), groupBean.getName(), groupBean.getProperties());
        try {
            federatedGroup2.setDescription(groupBean.getDescription());
            federatedGroup = federatedGroup2;
            goid = groupBean.getId() == null ? FederatedGroup.DEFAULT_GOID : Goid.parseGoid((String)groupBean.getId());
        }
        catch (IllegalArgumentException illegalArgumentException) {
            throw FederatedGroupManagerImpl.b(illegalArgumentException);
        }
        federatedGroup.setGoid(goid);
        return federatedGroup2;
    }

    @Override
    @Transactional(propagation=Propagation.SUPPORTS)
    public GroupMembership newMembership(FederatedGroup federatedGroup, FederatedUser federatedUser) {
        FederatedGroup federatedGroup2 = this.cast((Group)federatedGroup);
        return new FederatedGroupMembership(this.u.getGoid(), federatedGroup2.getGoid(), Goid.parseGoid((String)federatedUser.getId()));
    }

    @Override
    protected Class getMembershipClass() {
        return FederatedGroupMembership.class;
    }

    @Override
    protected void preSave(FederatedGroup federatedGroup) throws SaveException {
        block4: {
            try {
                try {
                    if (!(federatedGroup instanceof VirtualGroup) || this.u.getTrustedCertGoids().length != 0) break block4;
                }
                catch (SaveException saveException) {
                    throw FederatedGroupManagerImpl.b((Exception)((Object)saveException));
                }
                throw new NoTrustedCertsSaveException(x[10]);
            }
            catch (SaveException saveException) {
                throw FederatedGroupManagerImpl.b((Exception)((Object)saveException));
            }
        }
    }

    @Override
    protected void addFindByNameCriteria(Criteria criteria) {
        criteria.add((Criterion)Restrictions.eq((String)x[14], (Object)this.getProviderGoid()));
    }

    @Override
    protected Predicate addFindByNamePredicate(Predicate predicate, CriteriaBuilder criteriaBuilder, Root<FederatedGroup> root) {
        return criteriaBuilder.and((Expression)predicate, (Expression)criteriaBuilder.equal((Expression)root.get(x[14]), (Object)this.getProviderGoid()));
    }

    @Override
    protected void addFindAllCriteria(Criteria criteria) {
        criteria.add((Criterion)Restrictions.eq((String)x[14], (Object)this.getProviderGoid()));
    }

    @Override
    protected Predicate addFindAllPredicate(Predicate predicate, CriteriaBuilder criteriaBuilder, Root<FederatedGroup> root) {
        return criteriaBuilder.and((Expression)predicate, (Expression)criteriaBuilder.equal((Expression)root.get(x[3]), (Object)this.getProviderGoid()));
    }

    @Override
    @Transactional(readOnly=true)
    public FederatedGroup findByPrimaryKey(String string) throws FindException {
        try {
            FederatedGroup federatedGroup = (FederatedGroup)super.findByPrimaryKey(string);
            if (federatedGroup == null) {
                String[] stringArray = x;
                federatedGroup = (FederatedGroup)this.findByPrimaryKey(VirtualGroup.class, GoidUpgradeMapper.mapId((String)stringArray[11], (String)string));
                try {
                    if (federatedGroup != null) {
                        federatedGroup.setProviderId(this.u.getGoid());
                    }
                }
                catch (IllegalArgumentException illegalArgumentException) {
                    throw FederatedGroupManagerImpl.b(illegalArgumentException);
                }
            }
            return federatedGroup;
        }
        catch (IllegalArgumentException illegalArgumentException) {
            throw new FindException(x[4], (Throwable)illegalArgumentException);
        }
    }

    /*
     * Unable to fully structure code
     */
    @Override
    @Transactional(readOnly=true)
    public boolean isMember(User var1_1, FederatedGroup var2_2) throws FindException {
        block28: {
            block27: {
                block31: {
                    block26: {
                        block25: {
                            var3_3 = this.cast((Group)var2_2);
                            if (!(var3_3 instanceof VirtualGroup)) break block28;
                            var4_4 = this.t.getValidTrustedCertOids();
                            if (var4_4 == null) ** GOTO lbl11
                            try {
                                block29: {
                                    if (var4_4.size() >= 1) break block25;
                                    break block29;
                                    catch (IllegalArgumentException v0) {
                                        throw FederatedGroupManagerImpl.b(v0);
                                    }
                                }
                                FederatedGroupManagerImpl.v.warning(FederatedGroupManagerImpl.x[7] + var3_3.getId() + FederatedGroupManagerImpl.x[13]);
                                return false;
                            }
                            catch (IllegalArgumentException v1) {
                                throw FederatedGroupManagerImpl.b(v1);
                            }
                        }
                        try {
                            if (!this.checkProvider(var1_1)) {
                                return false;
                            }
                        }
                        catch (IllegalArgumentException v2) {
                            throw FederatedGroupManagerImpl.b(v2);
                        }
                        try {
                            if (!this.u.isX509Supported() && !this.u.isSamlSupported()) break block26;
                        }
                        catch (IllegalArgumentException v3) {
                            throw FederatedGroupManagerImpl.b(v3);
                        }
                        var5_5 = ((VirtualGroup)var3_3).getX509SubjectDnPattern();
                        try {
                            if (var5_5 == null || var5_5.length() <= 0) break block26;
                        }
                        catch (IllegalArgumentException v4) {
                            throw FederatedGroupManagerImpl.b(v4);
                        }
                        var6_6 = var1_1.getSubjectDn();
                        try {
                            if (var6_6 == null) break block26;
                            try {
                                block30: {
                                    if (var6_6.length() <= 0) break block26;
                                    break block30;
                                    catch (IllegalArgumentException v5) {
                                        throw FederatedGroupManagerImpl.b(v5);
                                    }
                                }
                                if (!CertUtils.dnMatchesPattern((String)var1_1.getSubjectDn(), (String)var5_5, (boolean)((VirtualGroup)var3_3).isUseRegex())) break block26;
                            }
                            catch (IllegalArgumentException v6) {
                                throw FederatedGroupManagerImpl.b(v6);
                            }
                            return true;
                        }
                        catch (IllegalArgumentException var7_7) {
                            var9_10 = FederatedGroupManagerImpl.x;
                            FederatedGroupManagerImpl.v.warning(var9_10[5] + var5_5 + var9_10[1]);
                        }
                    }
                    if (!this.u.isSamlSupported()) break block27;
                    var5_5 = ((VirtualGroup)var3_3).getSamlEmailPattern();
                    var6_6 = var1_1.getEmail();
                    if (var5_5 == null) break block27;
                    if (var5_5.length() <= 0) break block27;
                    break block31;
                    catch (IllegalArgumentException v7) {
                        throw FederatedGroupManagerImpl.b(v7);
                    }
                }
                try {
                    block32: {
                        if (var6_6 == null) break block27;
                        break block32;
                        catch (IllegalArgumentException v8) {
                            throw FederatedGroupManagerImpl.b(v8);
                        }
                    }
                    if (var6_6.length() <= 0) break block27;
                }
                catch (IllegalArgumentException v9) {
                    throw FederatedGroupManagerImpl.b(v9);
                }
                try {
                    var7_8 = Pattern.compile("^" + var5_5 + "$");
                    var8_11 = var7_8.matcher(var6_6);
                    return var8_11.matches();
                }
                catch (PatternSyntaxException var7_9) {
                    var9_10 = FederatedGroupManagerImpl.x;
                    FederatedGroupManagerImpl.v.warning(var9_10[12] + var5_5 + var9_10[6]);
                }
            }
            var9_10 = FederatedGroupManagerImpl.x;
            FederatedGroupManagerImpl.v.info(var9_10[2] + var1_1.getSubjectDn() + var9_10[9]);
            return false;
        }
        return super.isMember(var1_1, var3_3);
    }

    @Override
    protected Collection<Map<String, Object>> getUniqueConstraints(FederatedGroup federatedGroup) {
        HashMap<String, Object> hashMap = new HashMap<String, Object>();
        String[] stringArray = x;
        hashMap.put(stringArray[14], federatedGroup.getProviderId());
        hashMap.put(stringArray[0], federatedGroup.getName());
        return Collections.singletonList(hashMap);
    }

    @Override
    protected Predicate addMembershipPredicate(Predicate predicate, CriteriaBuilder criteriaBuilder, Root<GroupMembership> root, Group group, Identity identity) {
        return criteriaBuilder.and((Expression)predicate, (Expression)criteriaBuilder.equal((Expression)root.get(x[15]), (Object)group.getProviderId()));
    }

    @Override
    @Transactional(propagation=Propagation.SUPPORTS)
    public FederatedGroup cast(Group group) {
        try {
            if (group instanceof GroupBean) {
                return this.reify((GroupBean)group);
            }
        }
        catch (IllegalArgumentException illegalArgumentException) {
            throw FederatedGroupManagerImpl.b(illegalArgumentException);
        }
        return (FederatedGroup)group;
    }

    public Class<FederatedGroup> getImpClass() {
        return FederatedGroup.class;
    }

    @Override
    public Class<Group> getInterfaceClass() {
        return Group.class;
    }

    @Override
    public String getTableName() {
        return x[8];
    }

    /*
     * Unable to fully structure code
     */
    static {
        block10: {
            block9: {
                var5 = new String[16];
                var3_1 = 0;
                var2_2 = "\u0016c\u0010e\u0013_\"\u0014s.FU\f\"\u001c xIV\u0011f]D@\u0006-q\u0018r.\u000f\n\bp\u0012vgL_\nK\u0019';c\u0013'z\b\\\u0011l\u0019 iZU\rr\u000e yAN\u0010\"\u0010abNU\no\u0018d.ou1F\u000e!\u001a ,H07\bi\r`\u0017em\\\u001a<L]po\\N\u001dp\u0013 )#_\"\u0014s.FU\f\"\u001c xIV\u0011f]rkOO\u0014c\u000f kPJ\ng\u000esgGT\u0012,j\u0018 xAH\fw\u001cl.OH\u0017w\r \t\u001eg\u0019_iZU\rr=_\"\u0019ok[\u001a\u0016m\t oXJ\u001dc\u000f zG\u001a\u001ag]a.E_\u0015`\u0018r.G\\Xv\u0015e.[_\u0014g\u001etkL\u001a.k\u000ft{IV?p\u0012u~^.k\u000ft{IVXe\u000fo{XIXa\u001cn`GNX`\u0018 mZ_\u0019v\u0018d.ATXc]FkL_\nc\tej\bs\u001cg\u0013tg\\CXR\u000foxA^\u001dp]wg\\RXl\u0012 ZZO\u000bv\u0018d.k_\nv\u0014fgK[\fg\u000e\u0011\u001eg\u0019_iZU\rr\"vgZN\rc\u0011\u000f=o\u001cib\bJ\u0019v\te|F\u001a_\u008cXk\u000e g\\I\u001dn\u001b gFL\u0019n\u0014d.J_\u001bc\bsk\bN\u0010g]poZ_\u0016v]p|GL\u0011f\u0018r.@[\u000b\"\u0013o.\\H\rq\tej\bY\u001dp\ts.L_\u001bn\u001crkL\u001aPt\u0014rz][\u0014\"\u001ara]JXo\bsz\bH\u001dn\u0004 aF\u001a\u001ek\r zZO\u000bv\u0018d.K_\nvT..z_\fw\u000fngF]Xd\u001cl}M\u0014";
                var4_3 = "\u0016c\u0010e\u0013_\"\u0014s.FU\f\"\u001c xIV\u0011f]D@\u0006-q\u0018r.\u000f\n\bp\u0012vgL_\nK\u0019';c\u0013'z\b\\\u0011l\u0019 iZU\rr\u000e yAN\u0010\"\u0010abNU\no\u0018d.ou1F\u000e!\u001a ,H07\bi\r`\u0017em\\\u001a<L]po\\N\u001dp\u0013 )#_\"\u0014s.FU\f\"\u001c xIV\u0011f]rkOO\u0014c\u000f kPJ\ng\u000esgGT\u0012,j\u0018 xAH\fw\u001cl.OH\u0017w\r \t\u001eg\u0019_iZU\rr=_\"\u0019ok[\u001a\u0016m\t oXJ\u001dc\u000f zG\u001a\u001ag]a.E_\u0015`\u0018r.G\\Xv\u0015e.[_\u0014g\u001etkL\u001a.k\u000ft{IV?p\u0012u~^.k\u000ft{IVXe\u000fo{XIXa\u001cn`GNX`\u0018 mZ_\u0019v\u0018d.ATXc]FkL_\nc\tej\bs\u001cg\u0013tg\\CXR\u000foxA^\u001dp]wg\\RXl\u0012 ZZO\u000bv\u0018d.k_\nv\u0014fgK[\fg\u000e\u0011\u001eg\u0019_iZU\rr\"vgZN\rc\u0011\u000f=o\u001cib\bJ\u0019v\te|F\u001a_\u008cXk\u000e g\\I\u001dn\u001b gFL\u0019n\u0014d.J_\u001bc\bsk\bN\u0010g]poZ_\u0016v]p|GL\u0011f\u0018r.@[\u000b\"\u0013o.\\H\rq\tej\bY\u001dp\ts.L_\u001bn\u001crkL\u001aPt\u0014rz][\u0014\"\u001ara]JXo\bsz\bH\u001dn\u0004 aF\u001a\u001ek\r zZO\u000bv\u0018d.K_\nvT..z_\fw\u000fngF]Xd\u001cl}M\u0014".length();
                var1_4 = 4;
                var0_5 = -1;
lbl7:
                // 2 sources

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

                while (true) {
                    var5[var3_1++] = FederatedGroupManagerImpl.c(v0, FederatedGroupManagerImpl.d(v2));
                    if ((var0_5 += var1_4) < var4_3) {
                        var1_4 = var2_2.charAt(var0_5);
                        ** continue;
                    }
                    var2_2 = "S+I-<\u0017\u0004Q\u0010B\u0015W1O(\u0012\u0001\u000eV)v):\u0005\bG<T\u001c:\u001a\u0005";
                    var4_3 = "S+I-<\u0017\u0004Q\u0010B\u0015W1O(\u0012\u0001\u000eV)v):\u0005\bG<T\u001c:\u001a\u0005".length();
                    var1_4 = 10;
                    var0_5 = -1;
lbl22:
                    // 2 sources

                    while (true) {
                        v0 = 94;
                        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++] = FederatedGroupManagerImpl.c(v0, FederatedGroupManagerImpl.d(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;
            }
        }
        FederatedGroupManagerImpl.x = var5;
        FederatedGroupManagerImpl.v = Logger.getLogger(FederatedGroupManagerImpl.class.getName());
    }

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

    private static char[] d(String string) {
        char[] cArray = string.toCharArray();
        if (cArray.length < 2) {
            cArray = cArray;
            cArray[0] = (char)(cArray[0] ^ 0x3F);
        }
        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 -> 125;
                    case 1 -> 7;
                    case 2 -> 120;
                    case 3 -> 5;
                    case 4 -> 11;
                    case 5 -> 45;
                    default -> 63;
                })));
                ++n3;
                n4 = n4;
            } while (n4 > n3);
        }
        return new String(cArray2).intern();
    }
}

