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.EntityType;
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.objectmodel.EntityManager.UniqueType;
import com.l7tech.server.identity.PersistentUserManagerImpl;
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 var1, ClientCertManager var2, LogonInfoManager var3, PasswordHasher var4, InternalUserPasswordManager var5) {
      super(var2, var3);
      this.r = var1;
      this.s = var4;
      this.t = var5;
   }

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

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

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

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

         if (((InternalUserBean)var1).isEnabled() != null) {
            var2.setEnabled(((InternalUserBean)var1).isEnabled());
         }
      }

      return var2;
   }

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

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

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

   protected void preSave(InternalUser param1) throws SaveException {
      // $VF: Couldn't be decompiled
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 00: aload 0
      // 01: aload 1
      // 02: invokevirtual com/l7tech/identity/internal/InternalUser.getLogin ()Ljava/lang/String;
      // 05: invokevirtual com/l7tech/server/identity/internal/InternalUserManagerImpl.findByLogin (Ljava/lang/String;)Lcom/l7tech/identity/PersistentUser;
      // 08: checkcast com/l7tech/identity/internal/InternalUser
      // 0b: astore 2
      // 0c: goto 12
      // 0f: astore 3
      // 10: aconst_null
      // 11: astore 2
      // 12: aload 2
      // 13: ifnull 37
      // 16: new com/l7tech/objectmodel/DuplicateObjectException
      // 19: dup
      // 1a: aload 1
      // 1b: invokevirtual com/l7tech/identity/internal/InternalUser.getLogin ()Ljava/lang/String;
      // 1e: getstatic com/l7tech/server/identity/internal/InternalUserManagerImpl.w [Ljava/lang/String;
      // 21: bipush 0
      // 22: aaload
      // 23: swap
      // 24: getstatic com/l7tech/server/identity/internal/InternalUserManagerImpl.w [Ljava/lang/String;
      // 27: bipush 9
      // 29: aaload
      // 2a: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001\u0001" ]
      // 2f: invokespecial com/l7tech/objectmodel/DuplicateObjectException.<init> (Ljava/lang/String;)V
      // 32: athrow
      // 33: invokestatic com/l7tech/server/identity/internal/InternalUserManagerImpl.a (Lcom/l7tech/objectmodel/ObjectModelException;)Lcom/l7tech/objectmodel/ObjectModelException;
      // 36: athrow
      // 37: aload 1
      // 38: invokevirtual com/l7tech/identity/internal/InternalUser.getHashedPassword ()Ljava/lang/String;
      // 3b: astore 3
      // 3c: aload 3
      // 3d: ifnull 51
      // 40: aload 3
      // 41: invokevirtual java/lang/String.trim ()Ljava/lang/String;
      // 44: invokevirtual java/lang/String.isEmpty ()Z
      // 47: ifeq 62
      // 4a: goto 51
      // 4d: invokestatic com/l7tech/server/identity/internal/InternalUserManagerImpl.a (Lcom/l7tech/objectmodel/ObjectModelException;)Lcom/l7tech/objectmodel/ObjectModelException;
      // 50: athrow
      // 51: new com/l7tech/objectmodel/SaveException
      // 54: dup
      // 55: getstatic com/l7tech/server/identity/internal/InternalUserManagerImpl.w [Ljava/lang/String;
      // 58: bipush 4
      // 59: aaload
      // 5a: invokespecial com/l7tech/objectmodel/SaveException.<init> (Ljava/lang/String;)V
      // 5d: athrow
      // 5e: invokestatic com/l7tech/server/identity/internal/InternalUserManagerImpl.a (Lcom/l7tech/objectmodel/ObjectModelException;)Lcom/l7tech/objectmodel/ObjectModelException;
      // 61: athrow
      // 62: aload 0
      // 63: getfield com/l7tech/server/identity/internal/InternalUserManagerImpl.s Lcom/l7tech/common/password/PasswordHasher;
      // 66: aload 3
      // 67: invokeinterface com/l7tech/common/password/PasswordHasher.isVerifierRecognized (Ljava/lang/String;)Z 2
      // 6c: ifne 80
      // 6f: new com/l7tech/objectmodel/SaveException
      // 72: dup
      // 73: getstatic com/l7tech/server/identity/internal/InternalUserManagerImpl.w [Ljava/lang/String;
      // 76: bipush 5
      // 77: aaload
      // 78: invokespecial com/l7tech/objectmodel/SaveException.<init> (Ljava/lang/String;)V
      // 7b: athrow
      // 7c: invokestatic com/l7tech/server/identity/internal/InternalUserManagerImpl.a (Lcom/l7tech/objectmodel/ObjectModelException;)Lcom/l7tech/objectmodel/ObjectModelException;
      // 7f: athrow
      // 80: return
      // try (0 -> 6): 7 com/l7tech/objectmodel/FindException
      // try (10 -> 26): 26 com/l7tech/objectmodel/FindException
      // try (31 -> 37): 38 com/l7tech/objectmodel/FindException
      // try (33 -> 47): 47 com/l7tech/objectmodel/FindException
      // try (49 -> 61): 61 com/l7tech/objectmodel/FindException
   }

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

   protected void checkUpdate(InternalUser param1, InternalUser param2) throws ObjectModelException {
      // $VF: Couldn't be decompiled
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 00: aload 1
      // 01: invokevirtual com/l7tech/identity/internal/InternalUser.getHashedPassword ()Ljava/lang/String;
      // 04: astore 3
      // 05: aload 3
      // 06: ifnull 1a
      // 09: aload 3
      // 0a: invokevirtual java/lang/String.trim ()Ljava/lang/String;
      // 0d: invokevirtual java/lang/String.isEmpty ()Z
      // 10: ifeq 22
      // 13: goto 1a
      // 16: invokestatic com/l7tech/server/identity/internal/InternalUserManagerImpl.a (Lcom/l7tech/objectmodel/ObjectModelException;)Lcom/l7tech/objectmodel/ObjectModelException;
      // 19: athrow
      // 1a: bipush 1
      // 1b: goto 23
      // 1e: invokestatic com/l7tech/server/identity/internal/InternalUserManagerImpl.a (Lcom/l7tech/objectmodel/ObjectModelException;)Lcom/l7tech/objectmodel/ObjectModelException;
      // 21: athrow
      // 22: bipush 0
      // 23: istore 4
      // 25: aload 2
      // 26: invokevirtual com/l7tech/identity/internal/InternalUser.getHashedPassword ()Ljava/lang/String;
      // 29: astore 5
      // 2b: aload 5
      // 2d: ifnull 42
      // 30: aload 5
      // 32: invokevirtual java/lang/String.trim ()Ljava/lang/String;
      // 35: invokevirtual java/lang/String.isEmpty ()Z
      // 38: ifeq 75
      // 3b: goto 42
      // 3e: invokestatic com/l7tech/server/identity/internal/InternalUserManagerImpl.a (Lcom/l7tech/objectmodel/ObjectModelException;)Lcom/l7tech/objectmodel/ObjectModelException;
      // 41: athrow
      // 42: aload 1
      // 43: invokevirtual com/l7tech/identity/internal/InternalUser.getHttpDigest ()Ljava/lang/String;
      // 46: astore 6
      // 48: aload 6
      // 4a: ifnull 60
      // 4d: aload 6
      // 4f: aload 2
      // 50: invokevirtual com/l7tech/identity/internal/InternalUser.getHttpDigest ()Ljava/lang/String;
      // 53: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 56: ifne 72
      // 59: goto 60
      // 5c: invokestatic com/l7tech/server/identity/internal/InternalUserManagerImpl.a (Lcom/l7tech/objectmodel/ObjectModelException;)Lcom/l7tech/objectmodel/ObjectModelException;
      // 5f: athrow
      // 60: new com/l7tech/objectmodel/UpdateException
      // 63: dup
      // 64: getstatic com/l7tech/server/identity/internal/InternalUserManagerImpl.w [Ljava/lang/String;
      // 67: bipush 7
      // 69: aaload
      // 6a: invokespecial com/l7tech/objectmodel/UpdateException.<init> (Ljava/lang/String;)V
      // 6d: athrow
      // 6e: invokestatic com/l7tech/server/identity/internal/InternalUserManagerImpl.a (Lcom/l7tech/objectmodel/ObjectModelException;)Lcom/l7tech/objectmodel/ObjectModelException;
      // 71: athrow
      // 72: goto 95
      // 75: aload 0
      // 76: getfield com/l7tech/server/identity/internal/InternalUserManagerImpl.s Lcom/l7tech/common/password/PasswordHasher;
      // 79: aload 5
      // 7b: invokeinterface com/l7tech/common/password/PasswordHasher.isVerifierRecognized (Ljava/lang/String;)Z 2
      // 80: ifne 95
      // 83: new com/l7tech/objectmodel/UpdateException
      // 86: dup
      // 87: getstatic com/l7tech/server/identity/internal/InternalUserManagerImpl.w [Ljava/lang/String;
      // 8a: bipush 8
      // 8c: aaload
      // 8d: invokespecial com/l7tech/objectmodel/UpdateException.<init> (Ljava/lang/String;)V
      // 90: athrow
      // 91: invokestatic com/l7tech/server/identity/internal/InternalUserManagerImpl.a (Lcom/l7tech/objectmodel/ObjectModelException;)Lcom/l7tech/objectmodel/ObjectModelException;
      // 94: athrow
      // 95: iload 4
      // 97: ifne d8
      // 9a: aload 1
      // 9b: invokevirtual com/l7tech/identity/internal/InternalUser.getHashedPassword ()Ljava/lang/String;
      // 9e: astore 6
      // a0: aload 2
      // a1: invokevirtual com/l7tech/identity/internal/InternalUser.getHashedPassword ()Ljava/lang/String;
      // a4: astore 7
      // a6: aload 6
      // a8: aload 7
      // aa: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // ad: ifne d8
      // b0: aload 0
      // b1: getfield com/l7tech/server/identity/internal/InternalUserManagerImpl.u Ljava/util/logging/Logger;
      // b4: aload 1
      // b5: invokevirtual com/l7tech/identity/internal/InternalUser.getLogin ()Ljava/lang/String;
      // b8: getstatic com/l7tech/server/identity/internal/InternalUserManagerImpl.w [Ljava/lang/String;
      // bb: bipush 6
      // bd: aaload
      // be: swap
      // bf: getstatic com/l7tech/server/identity/internal/InternalUserManagerImpl.w [Ljava/lang/String;
      // c2: bipush 2
      // c3: aaload
      // c4: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001\u0001" ]
      // c9: invokevirtual java/util/logging/Logger.info (Ljava/lang/String;)V
      // cc: aload 0
      // cd: aload 1
      // ce: invokevirtual com/l7tech/server/identity/internal/InternalUserManagerImpl.revokeCert (Lcom/l7tech/identity/PersistentUser;)V
      // d1: goto d8
      // d4: invokestatic com/l7tech/server/identity/internal/InternalUserManagerImpl.a (Lcom/l7tech/objectmodel/ObjectModelException;)Lcom/l7tech/objectmodel/ObjectModelException;
      // d7: athrow
      // d8: return
      // try (3 -> 9): 10 com/l7tech/objectmodel/ObjectModelException
      // try (5 -> 14): 14 com/l7tech/objectmodel/ObjectModelException
      // try (21 -> 27): 28 com/l7tech/objectmodel/ObjectModelException
      // try (33 -> 40): 41 com/l7tech/objectmodel/ObjectModelException
      // try (35 -> 50): 50 com/l7tech/objectmodel/ObjectModelException
      // try (53 -> 65): 65 com/l7tech/objectmodel/ObjectModelException
      // try (75 -> 95): 96 com/l7tech/objectmodel/ObjectModelException
   }

   protected void postDelete(InternalUser var1) throws DeleteException {
      try {
         this.r.validateRoleAssignments();
      } catch (UpdateException var3) {
         throw new DeleteException(ExceptionUtils.getMessage(var3), var3);
      }
   }

   protected void preDelete(InternalUser var1) throws DeleteException {
      this.r.deleteRoleAssignmentsForUser(var1);
   }

   protected void preUpdate(InternalUser var1) throws UpdateException {
      this.t.manageHistory(var1);
   }

   protected void postUpdate(InternalUser var1) throws UpdateException {
      this.r.validateRoleAssignments();
   }

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

   public InternalUser cast(User var1) {
      return var1 instanceof UserBean ? this.reify((UserBean)var1) : (InternalUser)var1;
   }

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

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

   static {
      String[] var5 = new String[10];
      int var3 = 0;
      String var2 = "_*\"-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";
      int var4 = "_*\"-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();
      char var1 = '1';
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 115;
         String var10001 = var2.substring(++var7, var7 + var1);
         byte var10002 = -1;

         while (true) {
            String var8 = c(var10000, b(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     w = var5;
                     return;
                  }

                  var1 = var2.charAt(var7);
                  break;
               default:
                  var5[var3++] = var8;
                  if ((var7 += var1) < var4) {
                     var1 = var2.charAt(var7);
                     continue label24;
                  }

                  var2 = "U ('xzzc1\"(ckzc2#;7o)6)':\u007fk>F 5:`a(ra6;x~?d5?ita4b /'d.;xa3'ek9y&( mk>6)':\u007fg4qa5*\u007fk7so\n1a6;r}?x5h";
                  var4 = "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 = 'V';
                  var7 = -1;
            }

            var10000 = 121;
            var10001 = var2.substring(++var7, var7 + var1);
            var10002 = 0;
         }
      }
   }

   private static char[] b(String var0) {
      char[] var10000 = var0.toCharArray();
      if (var10000.length < 2) {
         var10000[0] = (char)(var10000[0] ^ 35);
      }

      return var10000;
   }

   private static String c(int var0, char[] var1) {
      int var10003 = var1.length;
      int var10002 = var0;
      char[] var10001 = var1;
      int var10000 = var10003;

      for (int var2 = 0; var10000 > var2; var2++) {
         var10001[var2] = (char)(var10001[var2] ^ var10002 ^ switch (var2 % 7) {
            case 0 -> 111;
            case 1 -> 56;
            case 2 -> 63;
            case 3 -> 48;
            case 4 -> 110;
            case 5 -> 119;
            default -> 35;
         });
      }

      return new String(var10001).intern();
   }
}
