package com.l7tech.gateway.pm2.graphql.service;

import com.l7tech.gateway.common.security.TrustedCertAdmin;
import com.l7tech.gateway.pm2.graphql.beans.entity.CSRDetailsDTO;
import com.l7tech.gateway.pm2.graphql.beans.entity.CertificateDTO;
import com.l7tech.gateway.pm2.graphql.beans.entity.WSSecurityDecorationDTO;
import com.l7tech.gateway.pm2.graphql.beans.entity.XmlDigestMethodsDTO;
import com.l7tech.gateway.pm2.graphql.beans.entity.XmlEncryptionAlgorithmsDTO;
import com.l7tech.gateway.pm2.graphql.beans.entity.XmlSignatureMethodsDTO;
import com.l7tech.gateway.pm2.graphql.helper.CertHelper;
import com.l7tech.gateway.pm2.graphql.helper.WSSecurityDecorationHelper;
import com.l7tech.gateway.pm2.graphql.helper.XMLAlgHelper;
import io.leangen.graphql.annotations.GraphQLArgument;
import io.leangen.graphql.annotations.GraphQLNonNull;
import io.leangen.graphql.annotations.GraphQLQuery;
import java.util.List;
import java.util.Map;
import org.springframework.context.ApplicationContext;

public class PM2SecretsService {
   private final CertHelper a;
   private static final String[] b;

   public PM2SecretsService(ApplicationContext var1) {
      this.a = new CertHelper((TrustedCertAdmin)var1.getBean(b[1]));
   }

   @GraphQLQuery(name = "certFromUrl")
   public CertificateDTO getCertFromUrl(@GraphQLArgument(name = "certUrl") String var1) {
      return this.a.getCertificateData(this.a.getCertificateFromUrl(var1));
   }

   @GraphQLQuery(name = "certFromBase64Data")
   public CertificateDTO getCertFromBase64Data(@GraphQLArgument(name = "base64Data") String var1) {
      return this.a.getCertificateData(this.a.getCertificateFromBase64(var1));
   }

   @GraphQLQuery(name = "csrDetails")
   public CSRDetailsDTO getCSRDetails(@GraphQLArgument(name = "csrPem", description = "PEM-encoded CSR string") @GraphQLNonNull String var1) {
      Map var2 = this.a.getCSRProperties(var1);

      try {
         if (var2 == null) {
            throw new RuntimeException(b[3]);
         }
      } catch (RuntimeException var3) {
         throw var3;
      }

      return new CSRDetailsDTO(var2);
   }

   @GraphQLQuery(name = "getWSSignInfo")
   public WSSecurityDecorationDTO getWSSignInfo() {
      return new WSSecurityDecorationHelper().getWSSignInfo();
   }

   @GraphQLQuery(name = "xmlSignatureAlgorithms")
   public XmlSignatureMethodsDTO getSupportedSignatures() {
      return new XmlSignatureMethodsDTO(new XMLAlgHelper());
   }

   @GraphQLQuery(name = "xmlDigestAlgorithms")
   public XmlDigestMethodsDTO getSupportedDigestMethods() {
      return new XmlDigestMethodsDTO(new XMLAlgHelper());
   }

   @GraphQLQuery(name = "xmlEncryptionAlgorithms")
   public XmlEncryptionAlgorithmsDTO getEncryptionAlgorithms() {
      return new XmlEncryptionAlgorithmsDTO();
   }

   @GraphQLQuery(
      name = "transformAllCertsForGraphMan",
      description = "Transform ALL certificates from any format (PEM chain, PKCS#7, PKCS#12, JKS, etc.) to GraphMan-compatible format"
   )
   public List<CertificateDTO> transformAllCertsForGraphMan(
      @GraphQLArgument(name = "certData", description = "Certificate data in PEM, Base64 DER, PKCS#7, PKCS#12, or JKS format") @GraphQLNonNull String var1,
      @GraphQLArgument(name = "password", description = "Password for PKCS#12/JKS format (optional)") String var2
   ) {
      try {
         return this.a.transformAllCertsToGraphManFormat(var1, var2);
      } catch (IllegalArgumentException var5) {
         String var10002 = var5.getMessage();
         String[] var4 = b;
         throw new RuntimeException(var4[2] + var10002, var5);
      } catch (Exception var6) {
         throw new RuntimeException(b[0] + var6.getMessage(), var6);
      }
   }

   static {
      String[] var5 = new String[4];
      int var3 = 0;
      String var2 = "AmK\u0001X[9`fJYML({q\u000e\u001d]L3zd\u000e\u001aML.}eG\u001aIJ?4w\\\u0018FM<{qC\u0018\\W5z9\u000e\u0010`q[\n\\[>Wf\\\riZ7}m";
      int var4 = "AmK\u0001X[9`fJYML({q\u000e\u001d]L3zd\u000e\u001aML.}eG\u001aIJ?4w\\\u0018FM<{qC\u0018\\W5z9\u000e\u0010`q[\n\\[>Wf\\\riZ7}m".length();
      char var1 = '4';
      int var7 = -1;

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

         while (true) {
            String var12 = a(a(var10000));
            switch (var10001) {
               case 0:
                  var5[var3++] = var12;
                  if ((var7 += var1) >= var4) {
                     b = var5;
                     return;
                  }

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

                  var2 = "Wf\\\rAX3wbZ\u001c\bJ(um]\u001fGL7uwG\u0016F\u001e<ujB\u001cL\u0004z2RbG\u0015MZz`l\u000e\tIL)q#m*z\u0004z]mX\u0018DW>4@}+\bX5fnO\r\bQ(4`A\u0017\\[4`";
                  var4 = "Wf\\\rAX3wbZ\u001c\bJ(um]\u001fGL7uwG\u0016F\u001e<ujB\u001cL\u0004z2RbG\u0015MZz`l\u000e\tIL)q#m*z\u0004z]mX\u0018DW>4@}+\bX5fnO\r\bQ(4`A\u0017\\[4`"
                     .length();
                  var1 = '#';
                  var7 = -1;
            }

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

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

      return var10000;
   }

   private static String a(char[] var0) {
      int var10002 = var0.length;
      char[] var10001 = var0;
      int var10000 = var10002;

      for (int var1 = 0; var10000 > var1; var1++) {
         var10001[var1] = (char)(var10001[var1] ^ switch (var1 % 7) {
            case 0 -> 20;
            case 1 -> 3;
            case 2 -> 46;
            case 3 -> 121;
            case 4 -> 40;
            case 5 -> 62;
            default -> 90;
         });
      }

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