package com.l7tech.external.assertions.gatewaygraphql.server.resolver.mutation;

import com.l7tech.external.assertions.gatewaygraphql.EntityTypeInfo;
import com.l7tech.external.assertions.gatewaygraphql.server.data.EntityMappingInstruction;
import com.l7tech.external.assertions.gatewaygraphql.server.data.LdapDTO;
import com.l7tech.external.assertions.gatewaygraphql.server.input.GroupMappingInput;
import com.l7tech.external.assertions.gatewaygraphql.server.input.UserMappingInput;
import com.l7tech.external.assertions.gatewaygraphql.server.resolver.query.IdpResolverHelper;
import com.l7tech.external.assertions.gatewaygraphql.server.util.AssertionLocalBeanFactory;
import com.l7tech.external.assertions.gatewaygraphql.server.util.SecretUtil;
import com.l7tech.external.assertions.gatewaygraphql.server.util.Util;
import com.l7tech.identity.IdentityProviderType;
import com.l7tech.identity.ldap.GroupMappingConfig;
import com.l7tech.identity.ldap.LdapIdentityProviderConfig;
import com.l7tech.identity.ldap.MemberStrategy;
import com.l7tech.identity.ldap.PasswdStrategy;
import com.l7tech.identity.ldap.UserMappingConfig;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.server.identity.ldap.LdapIdentityProvider;
import graphql.schema.DataFetchingEnvironment;
import java.util.List;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.transaction.PlatformTransactionManager;

@Deprecated
public class LdapIdpMutationResolver extends IdpMutationResolver<LdapIdentityProvider, LdapIdentityProviderConfig, LdapDTO, LdapDTO.LdapInput> {
   private static final String[] b;

   public LdapIdpMutationResolver(PlatformTransactionManager var1, BeanFactory var2, AssertionLocalBeanFactory var3) {
      super(EntityTypeInfo.LDAP_IDP, var1, var2, var3.getRequired(IdpResolverHelper.class), IdentityProviderType.LDAP);
   }

   public LdapDTO.LdapsPayload setLdaps(List<LdapDTO.LdapInput> var1, DataFetchingEnvironment var2) {
      LdapDTO.LdapsPayload var3 = new LdapDTO.LdapsPayload();
      this.transformNoDefEntityMappings(var1, var2);
      return var1.isEmpty() ? var3 : this.execute(var2, (var3x, var4) -> {
         var1.forEach(var4x -> this.doUpsertSilently(var4x, var3x, var3, var4));
         return var3;
      });
   }

   public LdapDTO.LdapsPayload deleteLdaps(List<String> var1, DataFetchingEnvironment var2) {
      LdapDTO.LdapsPayload var3 = new LdapDTO.LdapsPayload();
      return var1.isEmpty() ? var3 : this.execute(var2, (var3x, var4) -> {
         var1.forEach(var4x -> this.doDeleteSilently(var4x, var3x, var3, var4));
         return var3;
      });
   }

   protected LdapIdentityProviderConfig toEntity(LdapDTO.LdapInput var1) {
      return LdapIdentityProviderConfig.newLdapIdentityProviderConfig();
   }

   protected LdapDTO toEntityDTO(LdapIdentityProviderConfig var1) {
      return new LdapDTO(var1, this.idpHelper);
   }

   protected LdapDTO.LdapInput toEntityInput(EntityMappingInstruction var1) {
      LdapDTO.LdapInput var2 = new LdapDTO.LdapInput();
      var2.setName(var1.getIdentityValue());
      return var2;
   }

   protected void setEntity(LdapDTO.LdapInput var1, LdapIdentityProviderConfig var2) {
      String[] var3 = b;
      var2.setTemplateName(var3[0]);
      var2.setName(var1.getName());
      var2.setLdapUrl(var1.getLdapUrls().toArray(new String[0]));
      var2.setClientAuthEnabled(var1.getLdapsClientAuthEnabled());
      if (Util.isNotEmpty(var1.getLdapsClientKeyAlias())) {
         var2.setKeyAlias(var1.getLdapsClientKeyAlias());
         var2.setKeystoreId(Goid.parseGoid(Util.isNotEmpty(var1.getLdapsClientKeystoreId()) ? var1.getLdapsClientKeystoreId() : b[1]));
      }

      var2.setSearchBase(var1.getSearchBase());
      var2.setWritable(var1.getWritable());
      var2.setBindDN(var1.getBindDn());
      var2.setBindPasswd(SecretUtil.decode(var1.getBindPassword(), var1.getExecutionContext().getEncryptionPassphrase()));
      if (var1.getUserMappings() != null) {
         this.a(var2, var1);
      }

      if (var1.getGroupMappings() != null) {
         this.b(var2, var1);
      }
   }

   protected void resetEntitySelectively(LdapDTO.LdapInput var1, LdapIdentityProviderConfig var2) {
      var2.setKeystoreId(null);
      var2.setKeyAlias(null);
   }

   protected LdapIdentityProviderConfig doFind(LdapDTO.LdapInput var1) throws FindException {
      return this.doFindBy(var1.getName());
   }

   private void a(LdapIdentityProviderConfig var1, LdapDTO.LdapInput var2) {
      var1.setUserMappings(new UserMappingConfig[0]);

      for (UserMappingInput var4 : var2.getUserMappings()) {
         UserMappingConfig var5 = new UserMappingConfig();
         var5.setNameAttrName(var4.getNameAttrName());
         var5.setObjClass(var4.getObjClass());
         var5.setLoginAttrName(var4.getLoginAttrName());
         var5.setPasswdAttrName(var4.getPasswdAttrName());
         var5.setFirstNameAttrName(var4.getFirstNameAttrName());
         var5.setLastNameAttrName(var4.getLastNameAttrName());
         var5.setEmailNameAttrName(var4.getEmailNameAttrName());
         var5.setKerberosAttrName(var4.getKerberosAttrName());
         var5.setKerberosEnterpriseAttrName(var4.getKerberosEnterpriseAttrName());
         var5.setUserCertAttrName(var4.getUserCertAttrName());
         PasswdStrategy var6 = new PasswdStrategy();
         var6.setVal(var4.getPasswdType().getVal());
         var5.setPasswdType(var6);
         var1.setUserMapping(var5);
      }
   }

   private void b(LdapIdentityProviderConfig var1, LdapDTO.LdapInput var2) {
      var1.setGroupMappings(new GroupMappingConfig[0]);

      for (GroupMappingInput var4 : var2.getGroupMappings()) {
         GroupMappingConfig var5 = new GroupMappingConfig();
         var5.setObjClass(var4.getObjClass());
         var5.setNameAttrName(var4.getNameAttrName());
         var5.setMemberAttrName(var4.getMemberAttrName());
         MemberStrategy var6 = new MemberStrategy();
         var6.setVal(var4.getMemberStrategy().getVal());
         var5.setMemberStrategy(var6);
         var1.setGroupMapping(var5);
      }
   }

   static {
      String[] var5 = new String[2];
      int var3 = 0;
      String var2 = "@(g\\r,(K\tHi 7}9\t0u{7}9\t0u{7}9\t0u{7}9\t0u{7}9\u000b";
      int var4 = "@(g\\r,(K\tHi 7}9\t0u{7}9\t0u{7}9\t0u{7}9\t0u{7}9\u000b".length();
      char var1 = 11;
      int var0 = -1;

      while (true) {
         String var10002 = c(39, b(var2.substring(++var0, var0 + var1)));
         byte var10001 = -1;
         var5[var3++] = var10002;
         if ((var0 += var1) >= var4) {
            b = var5;
            return;
         }

         var1 = var2.charAt(var0);
      }
   }

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

      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 -> 32;
            case 1 -> 106;
            case 2 -> 46;
            case 3 -> 30;
            case 4 -> 39;
            case 5 -> 98;
            default -> 108;
         });
      }

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