/*
 * Decompiled with CFR 0.152.
 * 
 * Could not load the following classes:
 *  com.l7tech.common.password.PasswordHasher
 *  com.l7tech.identity.InternalUserBean
 *  com.l7tech.identity.User
 *  com.l7tech.identity.UserBean
 *  com.l7tech.identity.cert.ClientCertManager
 *  com.l7tech.identity.internal.InternalGroup
 *  com.l7tech.identity.internal.InternalUser
 *  com.l7tech.objectmodel.DeleteException
 *  com.l7tech.objectmodel.DuplicateObjectException
 *  com.l7tech.objectmodel.EntityManager$UniqueType
 *  com.l7tech.objectmodel.EntityType
 *  com.l7tech.objectmodel.FindException
 *  com.l7tech.objectmodel.Goid
 *  com.l7tech.objectmodel.IdentityHeader
 *  com.l7tech.objectmodel.ObjectModelException
 *  com.l7tech.objectmodel.SaveException
 *  com.l7tech.objectmodel.UpdateException
 *  com.l7tech.util.ExceptionUtils
 *  org.springframework.transaction.annotation.Propagation
 *  org.springframework.transaction.annotation.Transactional
 */
package com.l7tech.server.identity.internal;

import com.l7tech.common.password.PasswordHasher;
import com.l7tech.identity.InternalUserBean;
import com.l7tech.identity.User;
import com.l7tech.identity.UserBean;
import com.l7tech.identity.cert.ClientCertManager;
import com.l7tech.identity.internal.InternalGroup;
import com.l7tech.identity.internal.InternalUser;
import com.l7tech.objectmodel.DeleteException;
import com.l7tech.objectmodel.DuplicateObjectException;
import com.l7tech.objectmodel.EntityManager;
import com.l7tech.objectmodel.EntityType;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.IdentityHeader;
import com.l7tech.objectmodel.ObjectModelException;
import com.l7tech.objectmodel.SaveException;
import com.l7tech.objectmodel.UpdateException;
import com.l7tech.server.identity.PersistentUserManagerImpl;
import com.l7tech.server.identity.internal.InternalGroupManager;
import com.l7tech.server.identity.internal.InternalIdentityProvider;
import com.l7tech.server.identity.internal.InternalUserManager;
import com.l7tech.server.identity.internal.InternalUserPasswordManager;
import com.l7tech.server.logon.LogonInfoManager;
import com.l7tech.server.security.rbac.RoleManager;
import com.l7tech.util.ExceptionUtils;
import java.util.logging.Logger;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Transactional(propagation=Propagation.REQUIRED, rollbackFor={Throwable.class})
public class InternalUserManagerImpl
extends PersistentUserManagerImpl<InternalUser, InternalGroup, InternalUserManager, InternalGroupManager>
implements InternalUserManager {
    private final RoleManager r;
    private final PasswordHasher s;
    private final InternalUserPasswordManager t;
    private final Logger u = Logger.getLogger(this.getClass().getName());
    private static final String[] w;

    public InternalUserManagerImpl(RoleManager roleManager, ClientCertManager clientCertManager, LogonInfoManager logonInfoManager, PasswordHasher passwordHasher, InternalUserPasswordManager internalUserPasswordManager) {
        super(clientCertManager, logonInfoManager);
        this.r = roleManager;
        this.s = passwordHasher;
        this.t = internalUserPasswordManager;
    }

    @Override
    public void configure(InternalIdentityProvider internalIdentityProvider) {
        this.setIdentityProvider(internalIdentityProvider);
    }

    @Override
    public String getTableName() {
        return w[3];
    }

    @Override
    protected IdentityHeader newHeader(InternalUser internalUser) {
        return new IdentityHeader(internalUser.getProviderId(), internalUser.getGoid(), EntityType.USER, internalUser.getLogin(), internalUser.getDescription(), internalUser.getName(), internalUser.getVersion(), internalUser.isEnabled());
    }

    public InternalUser reify(UserBean userBean) {
        InternalUser internalUser = new InternalUser(userBean.getLogin());
        internalUser.setDepartment(userBean.getDepartment());
        internalUser.setEmail(userBean.getEmail());
        internalUser.setFirstName(userBean.getFirstName());
        internalUser.setLastName(userBean.getLastName());
        internalUser.setName(userBean.getName());
        internalUser.setGoid(userBean.getId() == null ? InternalUser.DEFAULT_GOID : Goid.parseGoid((String)userBean.getId()));
        internalUser.setHashedPassword(userBean.getHashedPassword());
        internalUser.setHttpDigest(userBean.getHttpDigest());
        internalUser.setSubjectDn(userBean.getSubjectDn());
        internalUser.setChangePassword(userBean.isChangePassword());
        internalUser.setPasswordExpiry(userBean.getPasswordExpiry());
        if (userBean instanceof InternalUserBean) {
            if (((InternalUserBean)userBean).getExpiration() != null) {
                internalUser.setExpiration(((InternalUserBean)userBean).getExpiration().longValue());
            }
            if (((InternalUserBean)userBean).isEnabled() != null) {
                internalUser.setEnabled(((InternalUserBean)userBean).isEnabled().booleanValue());
            }
        }
        return internalUser;
    }

    @Transactional(propagation=Propagation.SUPPORTS)
    public InternalUser headerToUser(IdentityHeader identityHeader) {
        InternalUser internalUser = new InternalUser();
        internalUser.setProviderId(this.getProviderGoid());
        internalUser.setGoid(identityHeader.getGoid());
        internalUser.setLogin(identityHeader.getName());
        return internalUser;
    }

    public Class<? extends User> getImpClass() {
        return InternalUser.class;
    }

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

    @Override
    protected void preSave(InternalUser internalUser) throws SaveException {
        String string;
        block12: {
            InternalUser internalUser2;
            try {
                internalUser2 = (InternalUser)this.findByLogin(internalUser.getLogin());
            }
            catch (FindException findException) {
                internalUser2 = null;
            }
            try {
                if (internalUser2 != null) {
                    throw new DuplicateObjectException(w[0] + internalUser.getLogin() + w[9]);
                }
            }
            catch (FindException findException) {
                throw InternalUserManagerImpl.a((ObjectModelException)((Object)findException));
            }
            string = internalUser.getHashedPassword();
            try {
                try {
                    if (string != null && !string.trim().isEmpty()) break block12;
                }
                catch (FindException findException) {
                    throw InternalUserManagerImpl.a((ObjectModelException)((Object)findException));
                }
                throw new SaveException(w[4]);
            }
            catch (FindException findException) {
                throw InternalUserManagerImpl.a((ObjectModelException)((Object)findException));
            }
        }
        try {
            if (!this.s.isVerifierRecognized(string)) {
                throw new SaveException(w[5]);
            }
        }
        catch (FindException findException) {
            throw InternalUserManagerImpl.a((ObjectModelException)((Object)findException));
        }
    }

    @Override
    public InternalUserPasswordManager getUserPasswordManager() {
        return this.t;
    }

    @Override
    protected void checkUpdate(InternalUser internalUser, InternalUser internalUser2) throws ObjectModelException {
        String string;
        boolean bl2;
        block20: {
            String string2;
            block19: {
                boolean bl3;
                block18: {
                    block17: {
                        String string3 = internalUser.getHashedPassword();
                        try {
                            try {
                                if (string3 != null && !string3.trim().isEmpty()) break block17;
                            }
                            catch (ObjectModelException objectModelException) {
                                throw InternalUserManagerImpl.a(objectModelException);
                            }
                            bl3 = true;
                            break block18;
                        }
                        catch (ObjectModelException objectModelException) {
                            throw InternalUserManagerImpl.a(objectModelException);
                        }
                    }
                    bl3 = false;
                }
                bl2 = bl3;
                string2 = internalUser2.getHashedPassword();
                try {
                    if (string2 != null && !string2.trim().isEmpty()) break block19;
                }
                catch (ObjectModelException objectModelException) {
                    throw InternalUserManagerImpl.a(objectModelException);
                }
                string = internalUser.getHttpDigest();
                try {
                    try {
                        if (string != null && string.equals(internalUser2.getHttpDigest())) break block20;
                    }
                    catch (ObjectModelException objectModelException) {
                        throw InternalUserManagerImpl.a(objectModelException);
                    }
                    throw new UpdateException(w[7]);
                }
                catch (ObjectModelException objectModelException) {
                    throw InternalUserManagerImpl.a(objectModelException);
                }
            }
            try {
                if (!this.s.isVerifierRecognized(string2)) {
                    throw new UpdateException(w[8]);
                }
            }
            catch (ObjectModelException objectModelException) {
                throw InternalUserManagerImpl.a(objectModelException);
            }
        }
        if (!bl2) {
            string = internalUser.getHashedPassword();
            String string4 = internalUser2.getHashedPassword();
            try {
                if (!string.equals(string4)) {
                    this.u.info(w[6] + internalUser.getLogin() + w[2]);
                    this.revokeCert(internalUser);
                }
            }
            catch (ObjectModelException objectModelException) {
                throw InternalUserManagerImpl.a(objectModelException);
            }
        }
    }

    @Override
    protected void postDelete(InternalUser internalUser) throws DeleteException {
        try {
            this.r.validateRoleAssignments();
        }
        catch (UpdateException updateException) {
            throw new DeleteException(ExceptionUtils.getMessage((Throwable)updateException), (Throwable)updateException);
        }
    }

    @Override
    protected void preDelete(InternalUser internalUser) throws DeleteException {
        this.r.deleteRoleAssignmentsForUser((User)internalUser);
    }

    @Override
    protected void preUpdate(InternalUser internalUser) throws UpdateException {
        this.t.manageHistory(internalUser);
    }

    @Override
    protected void postUpdate(InternalUser internalUser) throws UpdateException {
        this.r.validateRoleAssignments();
    }

    @Override
    protected String getNameFieldname() {
        return w[1];
    }

    @Override
    public InternalUser cast(User user) {
        if (user instanceof UserBean) {
            return this.reify((UserBean)user);
        }
        return (InternalUser)user;
    }

    @Override
    protected EntityManager.UniqueType getUniqueType() {
        return EntityManager.UniqueType.OTHER;
    }

    private static ObjectModelException a(ObjectModelException objectModelException) {
        return objectModelException;
    }

    /*
     * Unable to fully structure code
     */
    static {
        block10: {
            block9: {
                var5 = new String[10];
                var3_1 = 0;
                var2_2 = "_*\"-rppo*:&=p8u8l6na\"2k\t;tw$u%+chw5nk;*ilpp$+*s$w\u0005p$+*s\u0019<*?cme#o<#1y$'}8l ue>{.(m\ru%8&oj1p\u001490xv1_*\"-rppo*:&=q#y9l4tp8s>8cue#t.(\u0013|w#k$>'=t\"s;)1i}~T_*\"-rppo*:&=q#y9l\"n$8}8$&yT1o8;,o`pl9#3xv$ek/,sp1u%?c|jpi%>&~k7r\"6&y$8}8$*scpo($&pa~\u0017N.:,vm>{k/&oppz$>chw5nk3_*\"-rppi;(\"iapi8)1=s9h##6i$8}8$&yT1o8;,o`pl9#3xv$ee";
                var4_3 = "_*\"-rppo*:&=p8u8l6na\"2k\t;tw$u%+chw5nk;*ilpp$+*s$w\u0005p$+*s\u0019<*?cme#o<#1y$'}8l ue>{.(m\ru%8&oj1p\u001490xv1_*\"-rppo*:&=q#y9l4tp8s>8cue#t.(\u0013|w#k$>'=t\"s;)1i}~T_*\"-rppo*:&=q#y9l\"n$8}8$&yT1o8;,o`pl9#3xv$ek/,sp1u%?c|jpi%>&~k7r\"6&y$8}8$*scpo($&pa~\u0017N.:,vm>{k/&oppz$>chw5nk3_*\"-rppi;(\"iapi8)1=s9h##6i$8}8$&yT1o8;,o`pl9#3xv$ee".length();
                var1_4 = 49;
                var0_5 = -1;
lbl7:
                // 2 sources

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

                while (true) {
                    var5[var3_1++] = InternalUserManagerImpl.c(v0, InternalUserManagerImpl.b(v2));
                    if ((var0_5 += var1_4) < var4_3) {
                        var1_4 = var2_2.charAt(var0_5);
                        ** continue;
                    }
                    var2_2 = "U ('xzzc1\"(ckzc2#;7o)6)':\u007fk>F 5:`a(ra6;x~?d5?ita4b /'d.;xa3'ek9y&( mk>6)':\u007fg4qa5*\u007fk7so\n1a6;r}?x5h";
                    var4_3 = "U ('xzzc1\"(ckzc2#;7o)6)':\u007fk>F 5:`a(ra6;x~?d5?ita4b /'d.;xa3'ek9y&( mk>6)':\u007fg4qa5*\u007fk7so\n1a6;r}?x5h".length();
                    var1_4 = 86;
                    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++] = InternalUserManagerImpl.c(v0, InternalUserManagerImpl.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;
            }
        }
        InternalUserManagerImpl.w = var5;
    }

    private static char[] b(String string) {
        char[] cArray = string.toCharArray();
        if (cArray.length < 2) {
            cArray = cArray;
            cArray[0] = (char)(cArray[0] ^ 0x23);
        }
        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 -> 111;
                    case 1 -> 56;
                    case 2 -> 63;
                    case 3 -> 48;
                    case 4 -> 110;
                    case 5 -> 119;
                    default -> 35;
                })));
                ++n3;
                n4 = n4;
            } while (n4 > n3);
        }
        return new String(cArray2).intern();
    }
}

