package com.l7tech.policy.assertion.xmlsec;

import com.l7tech.objectmodel.EntityHeader;
import com.l7tech.objectmodel.EntityType;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.PersistentEntity;
import com.l7tech.objectmodel.migration.Migration;
import com.l7tech.objectmodel.migration.MigrationMappingSelection;
import com.l7tech.objectmodel.migration.PropertyResolver;
import com.l7tech.policy.assertion.AssertionMetadata;
import com.l7tech.policy.assertion.AssertionNodeNameFactory;
import com.l7tech.policy.assertion.DefaultAssertionMetadata;
import com.l7tech.policy.assertion.MessageTargetableAssertion;
import com.l7tech.policy.assertion.UsesEntities;
import com.l7tech.policy.assertion.annotation.RequiresSOAP;
import com.l7tech.policy.wsp.Java5EnumTypeMapping;
import com.l7tech.policy.wsp.SimpleTypeMappingFinder;
import com.l7tech.security.xml.WsSecurityVersion;
import com.l7tech.util.GoidUpgradeMapper;
import java.util.Collections;
import org.jetbrains.annotations.Nullable;

@RequiresSOAP(wss = true)
public class WsSecurity extends MessageTargetableAssertion implements UsesEntities {
   static final String baseName;
   static final AssertionNodeNameFactory policyNameFactory;
   private static final String META_INITIALIZED;
   private boolean replaceSecurityHeader = true;
   private boolean removeUnmatchedSecurityHeaders = false;
   private boolean useSecurityHeaderMustUnderstand = true;
   private boolean useSecureSpanActor = false;
   private boolean clearDecorationRequirements = false;
   private boolean applyWsSecurity = true;
   private WsSecurityVersion wsSecurityVersion;
   private Goid recipientTrustedCertificateGoid;
   private String recipientTrustedCertificateName;
   private String recipientTrustedCertificateVariable;
   static final long serialVersionUID = -910118084477999006L;
   private static final String[] b;

   public boolean isApplyWsSecurity() {
      return this.applyWsSecurity;
   }

   public void setApplyWsSecurity(boolean var1) {
      this.applyWsSecurity = var1;
   }

   @Nullable
   public String getRecipientTrustedCertificateName() {
      return this.recipientTrustedCertificateName;
   }

   public void setRecipientTrustedCertificateName(@Nullable String var1) {
      this.recipientTrustedCertificateName = var1;
   }

   @Nullable
   public String getRecipientTrustedCertificateVariable() {
      return this.recipientTrustedCertificateVariable;
   }

   public void setRecipientTrustedCertificateVariable(@Nullable String var1) {
      this.recipientTrustedCertificateVariable = var1;
   }

   public Goid getRecipientTrustedCertificateGoid() {
      return this.recipientTrustedCertificateGoid;
   }

   public void setRecipientTrustedCertificateGoid(@Nullable Goid var1) {
      this.recipientTrustedCertificateGoid = var1;
   }

   @Deprecated
   public void setRecipientTrustedCertificateOid(long var1) {
      this.recipientTrustedCertificateGoid = GoidUpgradeMapper.mapOid(EntityType.TRUSTED_CERT, var1);
   }

   public boolean isRemoveUnmatchedSecurityHeaders() {
      return this.removeUnmatchedSecurityHeaders;
   }

   public void setRemoveUnmatchedSecurityHeaders(boolean var1) {
      this.removeUnmatchedSecurityHeaders = var1;
   }

   public boolean isReplaceSecurityHeader() {
      return this.replaceSecurityHeader;
   }

   public void setReplaceSecurityHeader(boolean var1) {
      this.replaceSecurityHeader = var1;
   }

   public boolean isUseSecureSpanActor() {
      return this.useSecureSpanActor;
   }

   public void setUseSecureSpanActor(boolean var1) {
      this.useSecureSpanActor = var1;
   }

   public boolean isClearDecorationRequirements() {
      return this.clearDecorationRequirements;
   }

   public void setClearDecorationRequirements(boolean var1) {
      this.clearDecorationRequirements = var1;
   }

   public boolean isUseSecurityHeaderMustUnderstand() {
      return this.useSecurityHeaderMustUnderstand;
   }

   public void setUseSecurityHeaderMustUnderstand(boolean var1) {
      this.useSecurityHeaderMustUnderstand = var1;
   }

   @Nullable
   public WsSecurityVersion getWsSecurityVersion() {
      return this.wsSecurityVersion;
   }

   public void setWsSecurityVersion(@Nullable WsSecurityVersion var1) {
      this.wsSecurityVersion = var1;
   }

   @Migration(mapName = MigrationMappingSelection.REQUIRED, resolver = PropertyResolver.Type.ASSERTION)
   @Override
   public EntityHeader[] getEntitiesUsed() {
      EntityHeader[] var1 = new EntityHeader[0];
      if (this.recipientTrustedCertificateGoid != null && !PersistentEntity.DEFAULT_GOID.equals(this.recipientTrustedCertificateGoid)) {
         var1 = new EntityHeader[]{new EntityHeader(this.recipientTrustedCertificateGoid, EntityType.TRUSTED_CERT, null, null)};
      }

      return var1;
   }

   @Override
   public void replaceEntity(EntityHeader var1, EntityHeader var2) {
      if (var1.getType() == EntityType.TRUSTED_CERT
         && var2.getType() == EntityType.TRUSTED_CERT
         && this.recipientTrustedCertificateGoid != null
         && this.recipientTrustedCertificateGoid.equals(var1.getGoid())) {
         this.recipientTrustedCertificateGoid = var2.getGoid();
      }
   }

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

      String[] var2 = b;
      var1.put(var2[1], var2[10]);
      var1.put(var2[16], var2[11]);
      var1.put(var2[12], var2[13]);
      var1.put(var2[6], var2[3]);
      var1.put(var2[0], new String[]{var2[9]});
      var1.put(var2[2], policyNameFactory);
      var1.put(var2[7], new SimpleTypeMappingFinder(Collections.singleton(new Java5EnumTypeMapping(WsSecurityVersion.class, var2[5]))));
      var1.put(var2[8], var2[4]);
      var1.put(META_INITIALIZED, Boolean.TRUE);
      return var1;
   }

   @Override
   protected MessageTargetableAssertion.VariablesUsed doGetVariablesUsed() {
      return super.doGetVariablesUsed().withExpressions(this.recipientTrustedCertificateName).withVariables(this.recipientTrustedCertificateVariable);
   }

   static {
      String[] var5 = new String[17];
      int var3 = 0;
      String var2 = "PQVE|\f\u0001f_VDm\n\u0017\tSXUR|6\u0005MU\u0015P_VIk\u0001*OT_ni\u0015\u0001fQYTg\n\u001d\u0016wc\u0017sm\u001b\u0011RYNY((\u0016O@_R|\u0011\u0001S/C_W\u000edO\u0010ESR\u000ex\u0017\bISC\u000e~\u0019\bIT[Tg\nJwCiEk\r\u0016IDCvi\u0014\rDQNOz\u0011WCiEk\r\u0016IDCvm\n\u0017I_T\u0014PBUPm\n\u0010IUIak\f\rO^tAe\u001d\u0010WCJs}\u001a\u0010Y@_fa\u0016\u0000EB\u0018P_VIk\u00012A\\SDi\f\u000bRsVA{\u000b\nA]_\u000bX]Vsm\u001b\u0011RYNY\u0019aT^\u0000g\nDrUWO~\u001dDwc\u0017sm\u001b\u0011RYNYDaT^\f(\n\u0001M_LE(\u0017\u0016\u0000]UDa\u001e\u001d\u0000DRE(/7\rc_C}\n\rTI\u001aRm\u0014\u0005TU^\u0000k\u0017\nTUTT{X\u000bF\u0010[\u0000e\u001d\u0017SQ]E&\u0019PBUPm\n\u0010IUIel\u0011\u0010OByLi\u000b\u0017NQWE4C_W\u000edO\u0010ESR\u000ek\u0017\nS_VE&\b\u0005NUVS&/\u0017sUYUz\u0011\u0010Y`HOx\u001d\u0016TY_SL\u0011\u0005L_]\u0019aT^\u0000g\nDrUWO~\u001dDwc\u0017sm\u001b\u0011RYNY";
      int var4 = "PQVE|\f\u0001f_VDm\n\u0017\tSXUR|6\u0005MU\u0015P_VIk\u0001*OT_ni\u0015\u0001fQYTg\n\u001d\u0016wc\u0017sm\u001b\u0011RYNY((\u0016O@_R|\u0011\u0001S/C_W\u000edO\u0010ESR\u000ex\u0017\bISC\u000e~\u0019\bIT[Tg\nJwCiEk\r\u0016IDCvi\u0014\rDQNOz\u0011WCiEk\r\u0016IDCvm\n\u0017I_T\u0014PBUPm\n\u0010IUIak\f\rO^tAe\u001d\u0010WCJs}\u001a\u0010Y@_fa\u0016\u0000EB\u0018P_VIk\u00012A\\SDi\f\u000bRsVA{\u000b\nA]_\u000bX]Vsm\u001b\u0011RYNY\u0019aT^\u0000g\nDrUWO~\u001dDwc\u0017sm\u001b\u0011RYNYDaT^\f(\n\u0001M_LE(\u0017\u0016\u0000]UDa\u001e\u001d\u0000DRE(/7\rc_C}\n\rTI\u001aRm\u0014\u0005TU^\u0000k\u0017\nTUTT{X\u000bF\u0010[\u0000e\u001d\u0017SQ]E&\u0019PBUPm\n\u0010IUIel\u0011\u0010OByLi\u000b\u0017NQWE4C_W\u000edO\u0010ESR\u000ek\u0017\nS_VE&\b\u0005NUVS&/\u0017sUYUz\u0011\u0010Y`HOx\u001d\u0016TY_SL\u0011\u0005L_]\u0019aT^\u0000g\nDrUWO~\u001dDwc\u0017sm\u001b\u0011RYNY"
         .length();
      char var1 = 14;
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 102;
         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;
                     baseName = b[14];
                     policyNameFactory = new z();
                     META_INITIALIZED = WsSecurity.class.getName() + b[15];
                     return;
                  }

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

                  var2 = "\u0006UW\\a\u0014\r\\Y{Fi\u0004\u0005IT[Re\u0014\u000bL]AKr\u0019\u001c\\Q]F";
                  var4 = "\u0006UW\\a\u0014\r\\Y{Fi\u0004\u0005IT[Re\u0014\u000bL]AKr\u0019\u001c\\Q]F".length();
                  var1 = 20;
                  var7 = -1;
            }

            var10000 = 110;
            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] ^ 2);
      }

      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 -> 70;
            case 1 -> 86;
            case 2 -> 92;
            case 3 -> 70;
            case 4 -> 110;
            case 5 -> 30;
            default -> 2;
         });
      }

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