package com.l7tech.policy.assertion;

import com.l7tech.policy.AssertionPath;
import com.l7tech.policy.PolicyValidatorResult;
import com.l7tech.policy.validator.InjectionThreatProtectionAssertionValidator;
import com.l7tech.policy.validator.PolicyValidationContext;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;

public class SqlAttackAssertion extends InjectionThreatProtectionAssertion {
   public static final String PROT_METATEXT;
   public static final String PROT_META;
   public static final String PROT_MSSQL;
   public static final String PROT_ORASQL;
   private static final String baseName;
   private static final List<String> ATTACK_PROTECTION_NAMES;
   private static final Map<String, SqlAttackProtectionType> ATTACK_PROTECTION_TYPES;
   Set<String> protections = new HashSet<>();
   static final long serialVersionUID = -744198843293680745L;
   private static final String[] b;

   public SqlAttackAssertion() {
      super(TargetMessageType.REQUEST, false);
      this.includeBody = true;
   }

   @Override
   public AssertionMetadata meta() {
      DefaultAssertionMetadata var1 = this.defaultMeta();
      String[] var2 = b;
      var1.put(var2[19], var2[11]);
      var1.put(var2[12], var2[18]);
      var1.put(var2[2], var2[14]);
      var1.put(var2[8], new String[]{var2[5]});
      var1.put(var2[13], policyNameFactory);
      var1.put(var2[16], var2[6]);
      var1.put(var2[17], var2[1]);
      var1.put(var2[23], var2[9]);
      var1.put(var2[10], SqlAttackAssertion.SqlAttackAssertionValidator.class.getName());
      var1.put(var2[15], new bl(this));
      return var1;
   }

   public static List<String> getAllProtections() {
      return ATTACK_PROTECTION_NAMES;
   }

   public Set<String> getProtections() {
      return Collections.unmodifiableSet(this.protections);
   }

   @Deprecated
   public void setProtections(Set<String> var1) {
      SqlAttackAssertion var10000;
      HashSet var10001;
      label16: {
         try {
            var10000 = this;
            if (var1 == null) {
               var10001 = new HashSet();
               break label16;
            }
         } catch (IllegalArgumentException var2) {
            throw a(var2);
         }

         var10001 = new HashSet(var1);
      }

      var10000.protections = var10001;
   }

   public void setProtection(String param1) {
      // $VF: Couldn't be decompiled
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 00: aload 1
      // 01: ifnull 13
      // 04: aload 1
      // 05: invokevirtual java/lang/String.length ()I
      // 08: bipush 1
      // 09: if_icmpge 25
      // 0c: goto 13
      // 0f: invokestatic com/l7tech/policy/assertion/SqlAttackAssertion.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 12: athrow
      // 13: new java/lang/IllegalArgumentException
      // 16: dup
      // 17: getstatic com/l7tech/policy/assertion/SqlAttackAssertion.b [Ljava/lang/String;
      // 1a: bipush 24
      // 1c: aaload
      // 1d: invokespecial java/lang/IllegalArgumentException.<init> (Ljava/lang/String;)V
      // 20: athrow
      // 21: invokestatic com/l7tech/policy/assertion/SqlAttackAssertion.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 24: athrow
      // 25: aload 0
      // 26: getfield com/l7tech/policy/assertion/SqlAttackAssertion.protections Ljava/util/Set;
      // 29: aload 1
      // 2a: invokeinterface java/util/Set.add (Ljava/lang/Object;)Z 2
      // 2f: pop
      // 30: return
      // try (0 -> 6): 7 java/lang/IllegalArgumentException
      // try (2 -> 16): 16 java/lang/IllegalArgumentException
   }

   public void removeProtection(String var1) {
      this.protections.remove(var1);
   }

   public boolean isSqlMetaEnabled() {
      // $VF: Couldn't be decompiled
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 00: aload 0
      // 01: getfield com/l7tech/policy/assertion/SqlAttackAssertion.protections Ljava/util/Set;
      // 04: ifnull 3b
      // 07: aload 0
      // 08: getfield com/l7tech/policy/assertion/SqlAttackAssertion.protections Ljava/util/Set;
      // 0b: invokeinterface java/util/Set.isEmpty ()Z 1
      // 10: ifne 3b
      // 13: goto 1a
      // 16: invokestatic com/l7tech/policy/assertion/SqlAttackAssertion.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 19: athrow
      // 1a: aload 0
      // 1b: getfield com/l7tech/policy/assertion/SqlAttackAssertion.protections Ljava/util/Set;
      // 1e: getstatic com/l7tech/policy/assertion/SqlAttackAssertion.b [Ljava/lang/String;
      // 21: bipush 25
      // 23: aaload
      // 24: invokeinterface java/util/Set.contains (Ljava/lang/Object;)Z 2
      // 29: ifeq 3b
      // 2c: goto 33
      // 2f: invokestatic com/l7tech/policy/assertion/SqlAttackAssertion.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 32: athrow
      // 33: bipush 1
      // 34: goto 3c
      // 37: invokestatic com/l7tech/policy/assertion/SqlAttackAssertion.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 3a: athrow
      // 3b: bipush 0
      // 3c: ireturn
      // try (0 -> 7): 8 java/lang/IllegalArgumentException
      // try (3 -> 17): 18 java/lang/IllegalArgumentException
      // try (10 -> 22): 22 java/lang/IllegalArgumentException
   }

   public static String getProtectionLabel(String var0) {
      SqlAttackProtectionType var1 = ATTACK_PROTECTION_TYPES.get(var0);

      try {
         if (var1 == null) {
            return null;
         }
      } catch (IllegalArgumentException var2) {
         throw a(var2);
      }

      return var1.getDisplayName();
   }

   public static String getProtectionDescription(String var0) throws PolicyAssertionException {
      SqlAttackProtectionType var1 = ATTACK_PROTECTION_TYPES.get(var0);

      try {
         if (var1 == null) {
            return null;
         }
      } catch (PolicyAssertionException var2) {
         throw a(var2);
      }

      return var1.getDescription();
   }

   public static Pattern getProtectionPattern(String var0) {
      SqlAttackProtectionType var1 = ATTACK_PROTECTION_TYPES.get(var0);

      try {
         if (var1 == null) {
            return null;
         }
      } catch (IllegalArgumentException var2) {
         throw a(var2);
      }

      return var1.getPattern();
   }

   @Deprecated
   public void setIncludeUrl(boolean var1) {
      this.includeUrlQueryString = var1;
   }

   private static Map<String, SqlAttackProtectionType> createProtectionMap() {
      HashMap var0 = new HashMap(4);
      String[] var1 = b;
      var0.put(var1[21], SqlAttackProtectionType.MS_SQL);
      var0.put(var1[3], SqlAttackProtectionType.ORACLE);
      var0.put(var1[4], SqlAttackProtectionType.META_TEXT);
      var0.put(var1[20], SqlAttackProtectionType.META);
      return var0;
   }

   @Override
   protected String getBaseName() {
      return b[7];
   }

   static {
      String[] var5 = new String[27];
      int var3 = 0;
      String var2 = "y\r\r}_ g/\u0012,r\u001fOU\u001d5,c\u0019T@\u001b=xZ\u0004U\u0014.,cC\u000eI@\u0017;\u007f\u000fD\u001f2iG\u001f^z\u0011:iz\bTZ\u0006{\f?_B\u0007\u000bg\u000f2AV\u001fZ`\u001b&x\u0010@\u0016,iR\u001fkF\u0011*iP\u001fR[\u0010)W\u00113\"_\\OQ\u001d6\"P\u0004UG\u00112i\u001d\u001bZZ\u001b2\u007f\u001d8JX?*xR\bPp\u0017?`\\\f\u001bd\f1xV\bO\u0014?9mZ\u0005H@^\r]\u007fKz@\n?oX\u0018\u000eD\u001f2iG\u001f^r\u00112hV\u0019H>W\u00113\"_\\OQ\u001d6\"P\u0004UG\u00112i\u001d\u001fIQ\u001bp|\\\u0007RW\u0007pmW\u001dRW\u001bp_B\u0007z@\n?oX*HG\u001b,xZ\u0004Uu\u001a(eP\u000e\u0018D\u00112eP\u0012mU\u00127hR\u001fTF=2m@\u0018UU\u0013;\u001bd\f1xV\bO\u0014?9mZ\u0005H@^\r]\u007fKz@\n?oX\u0018\u000bP\u001b-oA\u0002K@\u00171b\u0015D\u00112eP\u0012u[\u001a;BR\u0006^r\u001f=x\\\u0019B3W\u00113#_\\OQ\u001d6#P\u0004UG\u00112i\u001c\u0019^G\u0011+~P\u000eH\u001b-\u000f@c\u0019T@\u001b=xZ\u0004U\u0005H&=\u0005E\\]\u0018\u001bD\u00112eP\u0012mU\u00127hR\u001fTF82mT\u0018}U\u001d*cA\u0012\u0019D\f1|V\u0019O]\u001b-IW\u0002O[\f\u001d`R\u0018HZ\u001f3i\u0014D\f1|V\u0019O]\u001b-MP\u001fR[\u0010\u0010m^\u000e©\b\u0016*a_UsQ\u0012.\u007f\u0013\u001bIQ\b;bGK\u0007V@3m_\u0002X]\u0011+\u007f\u0013\bTP\u001b~e]\u0001^W\n7c]W\u0014V@~m]\u000f\u001b\b\u001c`o\\\u0006V[\u0010~_b'\u001b]\u00104iP\u001fR[\u0010b#QU\u001bU\n*mP\u0000H\u0014\u001c',Q\u0007TW\u00157bTKX[\u00133c]Khe2~iK\u001bW[\u0017*\u007f\u0013\rI[\u0013~~V\nX\\\u00170k\u0013\u001bI[\n;oG\u000e_\u0014\t;n\u0013\u0018^F\b7oV\u0018\u0015\u0014BqdG\u0006W\n\tG\u00161~G%ZY\u001b\u0007g\u000f2AV\u001fZ\u0005y\r\r}_\u000bg\u000f2AV\u001fZ`\u001b&x\u0015D\u00112eP\u0012zP\b7oV(WU\r-bR\u0006^)d\f1xV\bO]\u00110,]\nVQ^3y@\u001f\u001bZ\u0011*,Q\u000e\u001bZ\u000b2`\u0013\u0004I\u0014\u001b3|G\u0012";
      int var4 = "y\r\r}_ g/\u0012,r\u001fOU\u001d5,c\u0019T@\u001b=xZ\u0004U\u0014.,cC\u000eI@\u0017;\u007f\u000fD\u001f2iG\u001f^z\u0011:iz\bTZ\u0006{\f?_B\u0007\u000bg\u000f2AV\u001fZ`\u001b&x\u0010@\u0016,iR\u001fkF\u0011*iP\u001fR[\u0010)W\u00113\"_\\OQ\u001d6\"P\u0004UG\u00112i\u001d\u001bZZ\u001b2\u007f\u001d8JX?*xR\bPp\u0017?`\\\f\u001bd\f1xV\bO\u0014?9mZ\u0005H@^\r]\u007fKz@\n?oX\u0018\u000eD\u001f2iG\u001f^r\u00112hV\u0019H>W\u00113\"_\\OQ\u001d6\"P\u0004UG\u00112i\u001d\u001fIQ\u001bp|\\\u0007RW\u0007pmW\u001dRW\u001bp_B\u0007z@\n?oX*HG\u001b,xZ\u0004Uu\u001a(eP\u000e\u0018D\u00112eP\u0012mU\u00127hR\u001fTF=2m@\u0018UU\u0013;\u001bd\f1xV\bO\u0014?9mZ\u0005H@^\r]\u007fKz@\n?oX\u0018\u000bP\u001b-oA\u0002K@\u00171b\u0015D\u00112eP\u0012u[\u001a;BR\u0006^r\u001f=x\\\u0019B3W\u00113#_\\OQ\u001d6#P\u0004UG\u00112i\u001c\u0019^G\u0011+~P\u000eH\u001b-\u000f@c\u0019T@\u001b=xZ\u0004U\u0005H&=\u0005E\\]\u0018\u001bD\u00112eP\u0012mU\u00127hR\u001fTF82mT\u0018}U\u001d*cA\u0012\u0019D\f1|V\u0019O]\u001b-IW\u0002O[\f\u001d`R\u0018HZ\u001f3i\u0014D\f1|V\u0019O]\u001b-MP\u001fR[\u0010\u0010m^\u000e©\b\u0016*a_UsQ\u0012.\u007f\u0013\u001bIQ\b;bGK\u0007V@3m_\u0002X]\u0011+\u007f\u0013\bTP\u001b~e]\u0001^W\n7c]W\u0014V@~m]\u000f\u001b\b\u001c`o\\\u0006V[\u0010~_b'\u001b]\u00104iP\u001fR[\u0010b#QU\u001bU\n*mP\u0000H\u0014\u001c',Q\u0007TW\u00157bTKX[\u00133c]Khe2~iK\u001bW[\u0017*\u007f\u0013\rI[\u0013~~V\nX\\\u00170k\u0013\u001bI[\n;oG\u000e_\u0014\t;n\u0013\u0018^F\b7oV\u0018\u0015\u0014BqdG\u0006W\n\tG\u00161~G%ZY\u001b\u0007g\u000f2AV\u001fZ\u0005y\r\r}_\u000bg\u000f2AV\u001fZ`\u001b&x\u0015D\u00112eP\u0012zP\b7oV(WU\r-bR\u0006^)d\f1xV\bO]\u00110,]\nVQ^3y@\u001f\u001bZ\u0011*,Q\u000e\u001bZ\u000b2`\u0013\u0004I\u0014\u001b3|G\u0012"
         .length();
      char var1 = 5;
      int var7 = -1;

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

         while (true) {
            String var9 = b(var10000, b(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var9;
                  if ((var7 += var1) >= var4) {
                     b = var5;
                     String[] var10 = b;
                     baseName = b[7];
                     PROT_ORASQL = var10[26];
                     PROT_MSSQL = var10[0];
                     PROT_METATEXT = var10[22];
                     PROT_META = var10[20];
                     String[] var13 = new String[4];
                     String[] var8 = b;
                     var13[0] = var8[0];
                     var13[1] = var8[26];
                     var13[2] = var8[22];
                     var13[3] = var8[20];
                     ATTACK_PROTECTION_NAMES = new ArrayList<>(Arrays.asList(var13));
                     ATTACK_PROTECTION_TYPES = Collections.unmodifiableMap(createProtectionMap());
                     return;
                  }

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

                  var2 = "~\u0016+XO\u0006C\u0006b\u0015&F[\u001e";
                  var4 = "~\u0016+XO\u0006C\u0006b\u0015&F[\u001e".length();
                  var1 = 7;
                  var7 = -1;
            }

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

   private static Exception a(Exception var0) {
      return var0;
   }

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

      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 -> 105;
            case 1 -> 35;
            case 2 -> 3;
            case 3 -> 81;
            case 4 -> 110;
            case 5 -> 54;
            default -> 102;
         });
      }

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

   public static class SqlAttackAssertionValidator extends InjectionThreatProtectionAssertionValidator {
      private final SqlAttackAssertion b;
      private static final String d;

      public SqlAttackAssertionValidator(SqlAttackAssertion var1) {
         super(var1);
         this.b = var1;
      }

      @Override
      public void validate(AssertionPath var1, PolicyValidationContext var2, PolicyValidatorResult var3) {
         super.validate(var1, var2, var3);
         if (this.b.isSqlMetaEnabled() && this.a(var1.getPath(), this.b)) {
            var3.addWarning(new PolicyValidatorResult.Warning(this.b, d, null));
         }
      }

      @Override
      protected boolean isAtLeastOneProtectionEnabled() {
         return !this.b.getProtections().isEmpty();
      }

      private boolean a(Assertion[] var1, MessageTargetable var2) {
         for (Assertion var6 : var1) {
            if (var6.isEnabled() && Assertion.isWSSecurity(var6) && AssertionUtils.isSameTargetMessage(var6, var2)) {
               return true;
            }
         }

         return false;
      }

      static {
         String var10002 = b(
            99,
            b(
               "Eg$\u007fc\u0010\t`]}U&\u001e\u0019aGhKcS\u0018wWf^g\u0007\u0015}Z)Zo\u001c\u0010s@l_&\u0007\u0014w\u0014zIj\u0016\u001ffQm\f$:\u0012dUzEp\u0016\\AeE\fO\u001d\u0016wW}Ei\u001d\\S@}Me\u0018\\BFfXc\u0010\b{[g\u000e("
            )
         );
         byte var10001 = -1;
         d = var10002;
      }

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

         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 -> 113;
               case 1 -> 87;
               case 2 -> 106;
               case 3 -> 79;
               case 4 -> 101;
               case 5 -> 16;
               default -> 31;
            });
         }

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