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.SslAssertion;
import com.l7tech.policy.assertion.WsspAssertion;
import com.l7tech.policy.assertion.credential.XpathCredentialSource;
import com.l7tech.policy.assertion.credential.http.CookieCredentialSourceAssertion;
import com.l7tech.policy.assertion.credential.http.HttpBasic;
import com.l7tech.policy.assertion.credential.http.HttpDigest;
import com.l7tech.policy.assertion.credential.http.HttpNegotiate;
import com.l7tech.policy.assertion.credential.wss.EncryptedUsernameTokenAssertion;
import com.l7tech.policy.assertion.credential.wss.WssBasic;
import com.l7tech.policy.assertion.xmlsec.AddWssTimestamp;
import com.l7tech.policy.assertion.xmlsec.RequestWssKerberos;
import com.l7tech.policy.assertion.xmlsec.RequireWssEncryptedElement;
import com.l7tech.policy.assertion.xmlsec.RequireWssSaml;
import com.l7tech.policy.assertion.xmlsec.RequireWssSaml2;
import com.l7tech.policy.assertion.xmlsec.RequireWssSignedElement;
import com.l7tech.policy.assertion.xmlsec.RequireWssTimestamp;
import com.l7tech.policy.assertion.xmlsec.RequireWssX509Cert;
import com.l7tech.policy.assertion.xmlsec.SecureConversation;
import com.l7tech.policy.assertion.xmlsec.WssEncryptElement;
import com.l7tech.policy.assertion.xmlsec.WssReplayProtection;
import com.l7tech.policy.assertion.xmlsec.WssSignElement;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.logging.Logger;

public class WsspAssertionValidator implements AssertionValidator {
   private static final Logger a = Logger.getLogger(WsspAssertionValidator.class.getName());
   private static final Collection b = Collections.unmodifiableCollection(
      Arrays.asList(
         SslAssertion.class,
         WssBasic.class,
         RequireWssTimestamp.class,
         RequireWssX509Cert.class,
         RequireWssSignedElement.class,
         RequireWssEncryptedElement.class,
         AddWssTimestamp.class,
         WssSignElement.class,
         WssEncryptElement.class
      )
   );
   private static final Collection c = Collections.unmodifiableCollection(
      Arrays.asList(
         SslAssertion.class,
         HttpBasic.class,
         HttpDigest.class,
         WssBasic.class,
         HttpNegotiate.class,
         EncryptedUsernameTokenAssertion.class,
         RequireWssX509Cert.class,
         SecureConversation.class,
         RequireWssSignedElement.class,
         RequireWssEncryptedElement.class,
         WssSignElement.class,
         WssEncryptElement.class,
         WssReplayProtection.class,
         RequireWssSaml.class,
         RequireWssSaml2.class,
         RequestWssKerberos.class,
         CookieCredentialSourceAssertion.class,
         RequireWssTimestamp.class,
         AddWssTimestamp.class,
         XpathCredentialSource.class
      )
   );
   private static final String d;

   public WsspAssertionValidator(WsspAssertion var1) {
   }

   @Override
   public void validate(AssertionPath var1, PolicyValidationContext var2, PolicyValidatorResult var3) {
      LinkedHashMap var4 = new LinkedHashMap();
      Assertion[] var5 = var1.getPath();

      for (int var6 = 0; var6 < var5.length; var6++) {
         Assertion var7 = var5[var6];
         if (var7.isEnabled()) {
            var4.put(var7, var7.getClass());
         }
      }

      Collection var9 = var4.values();
      var9.retainAll(c);
      var9.removeAll(b);

      for (Assertion var8 : var4.keySet()) {
         var3.addError(new PolicyValidatorResult.Error(var8, d, null));
      }
   }

   static {
      String var10002 = a(
         57,
         a(
            "\u000e\rB3\u000b.\u001a \u0010\u00115\u00184\u001d \n\u00114\u001cz\u0006<\u001bUv\u000e3\u0007'^E>\u001cz6!\u0018^$\u001a?S\u0018-\u001c\u0005\u001c9\u0006=\u0017E/Y\n\u001c#\u0017R/Y\u0019\u001c\"\u000e]?\u00184\u0010*^P%\n?\u0001;\u0017^8W"
         )
      );
      byte var10001 = -1;
      d = var10002;
   }

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

      return var10000;
   }

   private static String a(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 -> 118;
            case 1 -> 71;
            case 2 -> 8;
            case 3 -> 111;
            case 4 -> 64;
            case 5 -> 99;
            default -> 74;
         });
      }

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