package com.l7tech.server.policy.assertion.xmlsec;

import com.l7tech.gateway.common.audit.Audit;
import com.l7tech.policy.assertion.xmlsec.RequireSaml;
import com.l7tech.server.util.ContextVariableUtils;
import com.l7tech.util.Pair;
import com.l7tech.util.TextUtils;
import com.l7tech.util.ValidationUtils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.xmlbeans.XmlObject;

public abstract class SamlStatementValidate {
   protected static final TimeZone UTC_TIME_ZONE;
   protected final Logger logger = Logger.getLogger(this.getClass().getName());
   protected Collection errorCollector = new ArrayList();
   protected final RequireSaml requestSaml;
   private static final String[] b;

   public SamlStatementValidate(RequireSaml var1) {
      this.requestSaml = var1;
   }

   protected abstract void validate(
      XmlObject var1, Collection<SamlAssertionValidate.Error> var2, Collection<Pair<String, String[]>> var3, Map<String, Object> var4, Audit var5
   );

   protected void validateAuthenticationMethods(
      String var1, List<String> var2, String var3, Collection<SamlAssertionValidate.Error> var4, Map<String, Object> var5, Audit var6
   ) {
      boolean var7 = false;

      for (String var9 : var2) {
         if (var1.equals(var9)) {
            var7 = true;
            if (this.logger.isLoggable(Level.FINER)) {
               String[] var11 = b;
               this.logger.finer(var11[5] + var9);
            }
            break;
         }
      }

      ArrayList var12 = new ArrayList();
      boolean var13 = var3 != null && !var3.trim().isEmpty();
      if (!var7 && var13) {
         List var10 = ContextVariableUtils.getAllResolvedStrings(var3, var5, var6, TextUtils.URI_STRING_SPLIT_PATTERN, new n(this));
         var12.addAll(var10);
         var7 = this.matchesCustomValue(var1, var10);
      }

      if (!var7) {
         String var10000;
         if (var13) {
            String[] var15 = b;
            var10000 = var15[3];
         } else {
            var10000 = "";
         }

         String var14 = b[2] + var10000;
         var4.add(new SamlAssertionValidate.Error(var14, null, var1, var2.size() == 1 ? var2.get(0) : var2.toString(), var13 ? var12.toString() : ""));
      }
   }

   protected boolean matchesCustomValue(String var1, List<String> var2) {
      if (var1 != null && !var1.trim().isEmpty()) {
         for (String var4 : var2) {
            if (ValidationUtils.isValidUri(var4)) {
               if (var1.equals(var4)) {
                  if (this.logger.isLoggable(Level.FINER)) {
                     String[] var5 = b;
                     this.logger.finer(var5[1] + var4);
                  }

                  return true;
               }
            } else {
               this.logger.warning(b[0] + var4);
            }
         }

         return false;
      } else {
         return false;
      }
   }

   static {
      String[] var5 = new String[6];
      int var3 = 0;
      String var2 = "\u0005g\u001cB~^0li\u001c[mW=( \u0011X\u007fO;! '\u007fE\u001b2#u\u001cI6\u001b%\u0001a\u0006Nd^0lc\u0007^xT9la\u0007Yd^:8i\u0011LxR;\" \u001fHxS;( K\ru\u0006EiU %c\u0013YeT:lm\u0017YdT0ln\u001dY,V58c\u001aHh\u0015t\u001ee\u0011HeM1( \u0004L`N1v \t\u001dq\u001b\u00114p\u0017Nx^0lo\u001cH,T2v \t\u001cq\u000flo\u0000\rON'8o\u001f\u0017,@f1";
      int var4 = "\u0005g\u001cB~^0li\u001c[mW=( \u0011X\u007fO;! '\u007fE\u001b2#u\u001cI6\u001b%\u0001a\u0006Nd^0lc\u0007^xT9la\u0007Yd^:8i\u0011LxR;\" \u001fHxS;( K\ru\u0006EiU %c\u0013YeT:lm\u0017YdT0ln\u001dY,V58c\u001aHh\u0015t\u001ee\u0011HeM1( \u0004L`N1v \t\u001dq\u001b\u00114p\u0017Nx^0lo\u001cH,T2v \t\u001cq\u000flo\u0000\rON'8o\u001f\u0017,@f1"
         .length();
      char var1 = '"';
      int var7 = -1;

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

         while (true) {
            String var8 = a(var10000, b(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     b = var5;
                     UTC_TIME_ZONE = TimeZone.getTimeZone(b[4]);
                     return;
                  }

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

                  var2 = "[\u0016s\u001eC#D\f&\u001cr.#E\u001b&\u001cxz+S\u000e:\u0010y`b]\n:\u0011yjb";
                  var4 = "[\u0016s\u001eC#D\f&\u001cr.#E\u001b&\u001cxz+S\u000e:\u0010y`b]\n:\u0011yjb".length();
                  var1 = 3;
                  var7 = -1;
            }

            var10000 = 13;
            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] ^ 27);
      }

      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 -> 3;
            case 1 -> 79;
            case 2 -> 61;
            case 3 -> 98;
            case 4 -> 67;
            case 5 -> 116;
            default -> 27;
         });
      }

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