package com.l7tech.policy.assertion.xmlsec;

import com.l7tech.objectmodel.ExternalEntityHeader;
import com.l7tech.objectmodel.migration.Migration;
import com.l7tech.objectmodel.migration.MigrationMappingSelection;
import com.l7tech.objectmodel.migration.PropertyResolver;
import com.l7tech.policy.assertion.Assertion;
import com.l7tech.policy.assertion.AssertionMetadata;
import com.l7tech.policy.assertion.DefaultAssertionMetadata;
import com.l7tech.policy.assertion.SetsVariables;
import com.l7tech.policy.assertion.UsesVariables;
import com.l7tech.policy.variable.DataType;
import com.l7tech.policy.variable.Syntax;
import com.l7tech.policy.variable.VariableMetadata;
import com.l7tech.security.token.SecurityTokenType;
import com.l7tech.util.TimeUnit;
import com.l7tech.xml.WsTrustRequestType;
import com.l7tech.xml.soap.SoapVersion;

public class BuildRstSoapRequest extends Assertion implements UsesVariables, SetsVariables {
   public static final long SYSTEM_LIFETIME = -1L;
   public static final String DEFAULT_VARIABLE_PREFIX;
   public static final String VARIABLE_RST_REQUEST;
   public static final String VARIABLE_CLIENT_ENTROPY;
   private static final String ASSERTION_BASIC_NAME;
   private static final String ASSERTION_TYPED_NAME;
   private static final String META_INITIALIZED;
   private SecurityTokenType tokenType = SecurityTokenType.UNKNOWN;
   private WsTrustRequestType requestType = WsTrustRequestType.ISSUE;
   private SoapVersion soapVersion;
   private String wsTrustNamespace;
   private String issuerAddress;
   private String appliesToAddress;
   private String targetTokenVariable;
   private Integer keySize;
   private Long lifetime;
   private TimeUnit lifetimeTimeUnit;
   private boolean includeClientEntropy;
   private String variablePrefix;
   static final long serialVersionUID = 2040092536009208092L;
   private static final String[] b;

   public BuildRstSoapRequest() {
      this.variablePrefix = b[7];
   }

   public SecurityTokenType getTokenType() {
      return this.tokenType;
   }

   public void setTokenType(SecurityTokenType var1) {
      this.tokenType = var1;
   }

   public WsTrustRequestType getRequestType() {
      return this.requestType;
   }

   public void setRequestType(WsTrustRequestType var1) {
      this.requestType = var1;
   }

   public SoapVersion getSoapVersion() {
      return this.soapVersion;
   }

   public void setSoapVersion(SoapVersion var1) {
      this.soapVersion = var1;
   }

   public String getWsTrustNamespace() {
      return this.wsTrustNamespace;
   }

   public void setWsTrustNamespace(String var1) {
      this.wsTrustNamespace = var1;
   }

   public String getIssuerAddress() {
      return this.issuerAddress;
   }

   public void setIssuerAddress(String var1) {
      this.issuerAddress = var1;
   }

   public String getAppliesToAddress() {
      return this.appliesToAddress;
   }

   public void setAppliesToAddress(String var1) {
      this.appliesToAddress = var1;
   }

   public String getTargetTokenVariable() {
      return this.targetTokenVariable;
   }

   public void setTargetTokenVariable(String var1) {
      this.targetTokenVariable = var1;
   }

   public Integer getKeySize() {
      return this.keySize;
   }

   public void setKeySize(Integer var1) {
      this.keySize = var1;
   }

   public Long getLifetime() {
      return this.lifetime;
   }

   public void setLifetime(Long var1) {
      this.lifetime = var1;
   }

   public TimeUnit getLifetimeTimeUnit() {
      return this.lifetimeTimeUnit;
   }

   public void setLifetimeTimeUnit(TimeUnit var1) {
      this.lifetimeTimeUnit = var1;
   }

   public boolean isIncludeClientEntropy() {
      return this.includeClientEntropy;
   }

   public void setIncludeClientEntropy(boolean var1) {
      this.includeClientEntropy = var1;
   }

   public String getVariablePrefix() {
      return this.variablePrefix;
   }

   public void setVariablePrefix(String var1) {
      this.variablePrefix = var1;
   }

   @Override
   public VariableMetadata[] getVariablesSet() {
      VariableMetadata[] var10000 = new VariableMetadata[2];
      String[] var1 = b;
      var10000[0] = new VariableMetadata(this.variablePrefix + var1[14], false, false, null, false, DataType.MESSAGE);
      var10000[1] = new VariableMetadata(this.variablePrefix + var1[13], false, false, null, false, DataType.STRING);
      return var10000;
   }

   @Migration(
      mapName = MigrationMappingSelection.NONE,
      mapValue = MigrationMappingSelection.REQUIRED,
      export = false,
      valueType = ExternalEntityHeader.ValueType.TEXT_ARRAY,
      resolver = PropertyResolver.Type.SERVER_VARIABLE
   )
   @Override
   public String[] getVariablesUsed() {
      return Syntax.getReferencedNames(this.issuerAddress, this.appliesToAddress, Syntax.getVariableExpression(this.targetTokenVariable));
   }

   public static String[] getVariableSuffixes() {
      String[] var10000 = new String[2];
      String[] var0 = b;
      var10000[0] = var0[9];
      var10000[1] = var0[15];
      return var10000;
   }

   @Override
   public AssertionMetadata meta() {
      DefaultAssertionMetadata var1 = super.defaultMeta();
      if (Boolean.TRUE.equals(var1.get(META_INITIALIZED))) {
         return var1;
      }

      String[] var2 = b;
      var1.put(var2[0], var2[21]);
      var1.put(var2[22], new f(this));
      var1.put(var2[27], var2[10]);
      var1.put(var2[12], new String[]{var2[19]});
      var1.put(var2[8], var2[11]);
      var1.put(var2[26], var2[2]);
      var1.put(var2[6], var2[4]);
      var1.put(var2[20], var2[1]);
      var1.put(var2[23], var2[25]);
      var1.put(META_INITIALIZED, Boolean.TRUE);
      return var1;
   }

   static {
      String[] var5 = new String[28];
      int var3 = 0;
      String var2 = "TW\rZM3!JZ=DP\u000f\u0006UJ4B\\\n\u0006Z\u0012.TP\u000eM\u0017\r!IZ\u000e[\u0017?5NS\u0006zJ\t\u0013H^\u0012z\\\f5BL\u0016xK\u00120BM\u0016A\\\u000e\u0004N^\u000eG^\u0004FJ\u0016G\nUL\u0016z\\\f5BL\u0016+DP\u000f\u0007UJ4B\\\n\u0007Z\u0012.TP\u000eM\u0016\u000f%TP\u0017ZZ\u00183\bG\u000fD\\\u0011%JZ\f\\\u0017\u001a)A\u0016eJ\u000bD]]\u0012tkB{v<\u0010\u0007m\u0007YL\u00183S\u000eWP\u000eAZ\u0004\u000eH[\u0007aZ\u0012.\u000eUZ\u0013]\\\u000e4eJ\u000bD]\u00182\u000fW^\u000eMM\t%iP\u0006Mp\u001e/I\nUL\u0016z\\\f5BL\u0016GeJ\u000bD]]!\u0007l-ii]2BN\u0017MJ\t`JZ\u0011[X\u001a%\u0007\\\rFM\u001c)IV\fO\u0019\u001c`uZ\u0013]\\\u000e4tZ\u0001]K\u00144^k\rC\\\u0013`BS\u0007E\\\u00134\t+DP\u000f\u0007UJ4B\\\n\u0007Z\u0012.TP\u000eM\u0016\u000f%TP\u0017ZZ\u00183\bG\u000fD\\\u0011%JZ\f\\\u0017\u001a)A\u000eW^\u000eMM\t%aP\u000eL\\\u000f3\u000e\t\\\u000eA\\\u00134bQ\u0016ZV\r9\u000b\tM\u0011\\k\u00181RZ\u0011\\\rDS\u000bMW\t\u0005IK\u0010GI\u0004\u001aeJ\u000bD]]\u0012tkB{v<\u0010\u0007DRU\u0019/%VJ\u0007[M\u000eUZ\u0013]\\\u000e4eJ\u000bD]\u00182\u0014\tR\u0007\\X\u0019!S^+FP\t)FS\u000bR\\\u0019\u000b_R\u000e{\\\u001e5UV\u0016Q\u0019WM\rX\\\u000f4NZ\u0011m]\u00144HM!DX\u000e3I^\u000fM\u0016eJ\u000bD]]\u0012tkB{v<\u0010\u0007m\u0007YL\u00183S\u0015WP\u000eAZ\u0004\u000eH[\u0007fX\u0010%a^\u0001\\V\u000f9\u0014WM\rX\\\u000f4NZ\u0011iZ\t)HQ,IT\u0018\rDS\u000bMW\t\u0005IK\u0010GI\u0004#ul6\bj2\u0001w\u001f0MH\b%TKBjL\u0014,CZ\u0010\bi\u000f/WZ\u0010\\P\u00183";
      int var4 = "TW\rZM3!JZ=DP\u000f\u0006UJ4B\\\n\u0006Z\u0012.TP\u000eM\u0017\r!IZ\u000e[\u0017?5NS\u0006zJ\t\u0013H^\u0012z\\\f5BL\u0016xK\u00120BM\u0016A\\\u000e\u0004N^\u000eG^\u0004FJ\u0016G\nUL\u0016z\\\f5BL\u0016+DP\u000f\u0007UJ4B\\\n\u0007Z\u0012.TP\u000eM\u0016\u000f%TP\u0017ZZ\u00183\bG\u000fD\\\u0011%JZ\f\\\u0017\u001a)A\u0016eJ\u000bD]]\u0012tkB{v<\u0010\u0007m\u0007YL\u00183S\u000eWP\u000eAZ\u0004\u000eH[\u0007aZ\u0012.\u000eUZ\u0013]\\\u000e4eJ\u000bD]\u00182\u000fW^\u000eMM\t%iP\u0006Mp\u001e/I\nUL\u0016z\\\f5BL\u0016GeJ\u000bD]]!\u0007l-ii]2BN\u0017MJ\t`JZ\u0011[X\u001a%\u0007\\\rFM\u001c)IV\fO\u0019\u001c`uZ\u0013]\\\u000e4tZ\u0001]K\u00144^k\rC\\\u0013`BS\u0007E\\\u00134\t+DP\u000f\u0007UJ4B\\\n\u0007Z\u0012.TP\u000eM\u0016\u000f%TP\u0017ZZ\u00183\bG\u000fD\\\u0011%JZ\f\\\u0017\u001a)A\u000eW^\u000eMM\t%aP\u000eL\\\u000f3\u000e\t\\\u000eA\\\u00134bQ\u0016ZV\r9\u000b\tM\u0011\\k\u00181RZ\u0011\\\rDS\u000bMW\t\u0005IK\u0010GI\u0004\u001aeJ\u000bD]]\u0012tkB{v<\u0010\u0007DRU\u0019/%VJ\u0007[M\u000eUZ\u0013]\\\u000e4eJ\u000bD]\u00182\u0014\tR\u0007\\X\u0019!S^+FP\t)FS\u000bR\\\u0019\u000b_R\u000e{\\\u001e5UV\u0016Q\u0019WM\rX\\\u000f4NZ\u0011m]\u00144HM!DX\u000e3I^\u000fM\u0016eJ\u000bD]]\u0012tkB{v<\u0010\u0007m\u0007YL\u00183S\u0015WP\u000eAZ\u0004\u000eH[\u0007fX\u0010%a^\u0001\\V\u000f9\u0014WM\rX\\\u000f4NZ\u0011iZ\t)HQ,IT\u0018\rDS\u000bMW\t\u0005IK\u0010GI\u0004#ul6\bj2\u0001w\u001f0MH\b%TKBjL\u0014,CZ\u0010\bi\u000f/WZ\u0010\\P\u00183"
         .length();
      char var1 = '\t';
      int var7 = -1;

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

         while (true) {
            String var8 = b(var10000, b(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     b = var5;
                     String[] var9 = b;
                     DEFAULT_VARIABLE_PREFIX = b[17];
                     VARIABLE_CLIENT_ENTROPY = var9[24];
                     ASSERTION_TYPED_NAME = var9[16];
                     VARIABLE_RST_REQUEST = var9[3];
                     ASSERTION_BASIC_NAME = var9[5];
                     META_INITIALIZED = BuildRstSoapRequest.class.getName() + b[18];
                     return;
                  }

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

                  var2 = "NI\u0017XC\u001d\u0018ZP\u0012RE'5_U\b_A\t<\u000bZC\bRR\r)JO\u0014_";
                  var4 = "NI\u0017XC\u001d\u0018ZP\u0012RE'5_U\b_A\t<\u000bZC\bRR\r)JO\u0014_".length();
                  var1 = 21;
                  var7 = -1;
            }

            var10000 = 115;
            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] ^ 42);
      }

      return var10000;
   }

   private static String b(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 -> 77;
            case 1 -> 85;
            case 2 -> 8;
            case 3 -> 66;
            case 4 -> 83;
            case 5 -> 23;
            default -> 42;
         });
      }

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