package com.l7tech.policy.validator;

import com.l7tech.policy.AssertionPath;
import com.l7tech.policy.PolicyValidatorResult;
import com.l7tech.policy.assertion.Assertion;
import com.l7tech.policy.assertion.AssertionUtils;
import com.l7tech.policy.assertion.IdentityTarget;
import com.l7tech.policy.assertion.IdentityTargetable;
import com.l7tech.policy.assertion.credential.wss.EncryptedUsernameTokenAssertion;
import com.l7tech.policy.assertion.xmlsec.RequestWssKerberos;
import com.l7tech.policy.assertion.xmlsec.RequireWssSaml;
import com.l7tech.policy.assertion.xmlsec.RequireWssX509Cert;
import com.l7tech.policy.assertion.xmlsec.SecureConversation;
import com.l7tech.policy.assertion.xmlsec.SecurityHeaderAddressable;
import com.l7tech.policy.assertion.xmlsec.WsSecurity;

abstract class j extends WssDecorationAssertionValidator {
   private boolean a;
   private boolean b;
   private boolean c;
   private static final String[] i;

   public j(Assertion var1, boolean var2, boolean var3) {
      super(var1, var3);
      this.c = var2;
      this.a = a(var1);
      this.b = b(var1);
   }

   @Override
   public void validate(AssertionPath var1, PolicyValidationContext var2, PolicyValidatorResult var3) {
      super.validate(var1, var2, var3);
      if ((!this.a || !Assertion.isResponse(this.assertion)) && !this.b) {
         String[] var10 = i;
         var3.addWarning(new PolicyValidatorResult.Warning(this.assertion, var10[1], null));
      }

      boolean var4 = true;
      boolean var5 = this.c && this.a && Assertion.isResponse(this.assertion);
      Assertion[] var6 = var1.getPath();

      for (int var7 = var6.length - 1; var7 >= 0; var7--) {
         Assertion var8 = var6[var7];
         if (var8.isEnabled()) {
            if (var8 == this.assertion) {
               var4 = false;
            } else {
               this.validateAssertion(var1, var8, var3);
            }

            if (var5
               && (
                  var8 instanceof RequestWssKerberos
                     || var8 instanceof EncryptedUsernameTokenAssertion
                     || var8 instanceof RequireWssSaml
                     || var8 instanceof SecureConversation
                     || var8 instanceof RequireWssX509Cert
               )
               && a(var8)
               && Assertion.isRequest(var8)) {
               var5 = false;
            }

            if (var4 && var8 instanceof WsSecurity && AssertionUtils.isSameTargetMessage(this.assertion, var8)) {
               WsSecurity var9 = (WsSecurity)var8;
               if (var9.isApplyWsSecurity() && (var9.getRecipientTrustedCertificateName() != null || var9.getRecipientTrustedCertificateGoid() != null)) {
                  var5 = false;
               }
            }
         }
      }

      if (var5) {
         var3.addWarning(new PolicyValidatorResult.Warning(this.assertion, i[0], null));
      }
   }

   protected void validateAssertion(AssertionPath var1, Assertion var2, PolicyValidatorResult var3) {
   }

   private static boolean a(Assertion var0) {
      boolean var1 = true;
      if (var0 instanceof SecurityHeaderAddressable var2) {
         var1 = var2.getRecipientContext().localRecipient();
      }

      return var1;
   }

   private static boolean b(Assertion var0) {
      boolean var1 = true;
      if (var0 instanceof IdentityTargetable) {
         var1 = new IdentityTarget().equals(new IdentityTarget(((IdentityTargetable)var0).getIdentityTarget()));
      }

      return var1;
   }

   static {
      String[] var5 = new String[2];
      int var3 = 0;
      String var2 = "\u0016+By%W\f1&Y~lY\u0011b1N{p_\r'0\u000bk%\u001e-'2^ovBVb\u0011N{p_\r'c|Y(e\u001a!6YcqO_\u0011*LddB\n0&\u000bIwS\u001b'-_cdZ\fb\"Xy`D\u000b+,E&%W_\u0010&Z\u007flD\u001ab\u0014x'VS\u001c71NIjX\t'1Xkq_\u0010,cJyvS\r6*Dd)\u0016\u001eb\u0011N{p_\r'cxKHz_\u0016,@ok\u0016/0,MciS_\u00011Nn`X\u000b+\"Gy%W\f1&Y~lY\u0011ncJ*WS\u000e7*Yo%s\u0011!1RzqS\u001bb\u0016XowX\u001e/&\u007fenS\u0011b\u0013Yec_\u0013'chx`R\u001a,7BkiE_#0XowB\u0016--\u0007*jD_#cyotC\u00160&\u000b]V\u001b,' ^xlB\u0006b\bNxgS\r-0\u000b^j]\u001a,c{xjP\u0016.&\u000bIwS\u001b'-_cdZ\fl¤\u0016+N*'b\u001e0$N~%\u007f\u001b'-_cqO]b4Bfi\u0016\u001d'cBmkY\r''\u000bljD_6+By%W\f1&Y~lY\u0011lcj*'b\u001e0$N~%\u007f\u001b'-_cqO]b0CepZ\u001bb!N*pE\u001a&cMew\u0016\r'0[ekE\u001ab&EiwO\u000f6*Dd%A\u0017'-\u000bgpZ\u000b+3Go%_\u001b'-_cq_\u001a1cJx`\u0016\n1&O*lX_#cYotC\u001a17\u0005";
      int var4 = "\u0016+By%W\f1&Y~lY\u0011b1N{p_\r'0\u000bk%\u001e-'2^ovBVb\u0011N{p_\r'c|Y(e\u001a!6YcqO_\u0011*LddB\n0&\u000bIwS\u001b'-_cdZ\fb\"Xy`D\u000b+,E&%W_\u0010&Z\u007flD\u001ab\u0014x'VS\u001c71NIjX\t'1Xkq_\u0010,cJyvS\r6*Dd)\u0016\u001eb\u0011N{p_\r'cxKHz_\u0016,@ok\u0016/0,MciS_\u00011Nn`X\u000b+\"Gy%W\f1&Y~lY\u0011ncJ*WS\u000e7*Yo%s\u0011!1RzqS\u001bb\u0016XowX\u001e/&\u007fenS\u0011b\u0013Yec_\u0013'chx`R\u001a,7BkiE_#0XowB\u0016--\u0007*jD_#cyotC\u00160&\u000b]V\u001b,' ^xlB\u0006b\bNxgS\r-0\u000b^j]\u001a,c{xjP\u0016.&\u000bIwS\u001b'-_cdZ\fl¤\u0016+N*'b\u001e0$N~%\u007f\u001b'-_cqO]b4Bfi\u0016\u001d'cBmkY\r''\u000bljD_6+By%W\f1&Y~lY\u0011lcj*'b\u001e0$N~%\u007f\u001b'-_cqO]b0CepZ\u001bb!N*pE\u001a&cMew\u0016\r'0[ekE\u001ab&EiwO\u000f6*Dd%A\u0017'-\u000bgpZ\u000b+3Go%_\u001b'-_cq_\u001a1cJx`\u0016\n1&O*lX_#cYotC\u001a17\u0005"
         .length();
      char var1 = 309;
      int var0 = -1;

      while (true) {
         String var10002 = b(95, b(var2.substring(++var0, var0 + var1)));
         byte var10001 = -1;
         var5[var3++] = var10002;
         if ((var0 += var1) >= var4) {
            i = 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] ^ 32);
      }

      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 -> 29;
            case 1 -> 28;
            case 2 -> 116;
            case 3 -> 85;
            case 4 -> 90;
            case 5 -> 105;
            default -> 32;
         });
      }

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