package com.l7tech.common.http.prov.apache.components;

import java.io.Serializable;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.security.Principal;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.apache.hc.client5.http.auth.AuthChallenge;
import org.apache.hc.client5.http.auth.AuthScheme;
import org.apache.hc.client5.http.auth.AuthScope;
import org.apache.hc.client5.http.auth.AuthStateCacheable;
import org.apache.hc.client5.http.auth.AuthenticationException;
import org.apache.hc.client5.http.auth.Credentials;
import org.apache.hc.client5.http.auth.CredentialsProvider;
import org.apache.hc.client5.http.auth.MalformedChallengeException;
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
import org.apache.hc.client5.http.impl.StateHolder;
import org.apache.hc.client5.http.impl.auth.AuthSchemeSupport;
import org.apache.hc.client5.http.protocol.HttpClientContext;
import org.apache.hc.client5.http.utils.Base64;
import org.apache.hc.client5.http.utils.ByteArrayBuilder;
import org.apache.hc.core5.annotation.Internal;
import org.apache.hc.core5.http.HttpHost;
import org.apache.hc.core5.http.HttpRequest;
import org.apache.hc.core5.http.NameValuePair;
import org.apache.hc.core5.http.protocol.HttpContext;
import org.apache.hc.core5.util.Args;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@AuthStateCacheable
public class CharsetAwareHttpBasicAuthScheme implements AuthScheme, StateHolder<CharsetAwareHttpBasicAuthScheme.State>, Serializable {
   private static final long serialVersionUID = -1931571557597830536L;
   private static final Logger LOG;
   private final Map<String, String> paramMap = new HashMap<>();
   private transient ByteArrayBuilder buffer;
   private transient Base64 base64codec;
   private boolean complete = false;
   private UsernamePasswordCredentials credentials;
   private static final String[] a;

   @Deprecated
   public CharsetAwareHttpBasicAuthScheme(Charset var1) {
   }

   public CharsetAwareHttpBasicAuthScheme() {
   }

   public void initPreemptive(Credentials var1) {
      if (var1 != null) {
         Args.check(var1 instanceof UsernamePasswordCredentials, a[10] + var1.getClass());
         this.credentials = (UsernamePasswordCredentials)var1;
         this.complete = true;
      } else {
         this.credentials = null;
      }
   }

   public String getName() {
      return a[1];
   }

   public boolean isConnectionBased() {
      return false;
   }

   public String getRealm() {
      return this.paramMap.get(a[7]);
   }

   public void processChallenge(AuthChallenge var1, HttpContext var2) throws MalformedChallengeException {
      this.paramMap.clear();
      List var3 = var1.getParams();
      if (var3 != null) {
         for (NameValuePair var5 : var3) {
            this.paramMap.put(var5.getName().toLowerCase(Locale.ROOT), var5.getValue());
         }
      }

      this.complete = true;
   }

   public boolean isChallengeComplete() {
      return this.complete;
   }

   public boolean isResponseReady(HttpHost var1, CredentialsProvider var2, HttpContext var3) throws AuthenticationException {
      String[] var8 = a;
      Args.notNull(var1, var8[11]);
      Args.notNull(var2, var8[12]);
      AuthScope var4 = new AuthScope(var1, this.getRealm(), this.getName());
      Credentials var5 = var2.getCredentials(var4, var3);

      try {
         if (var5 instanceof UsernamePasswordCredentials) {
            this.credentials = (UsernamePasswordCredentials)var5;
            return true;
         }
      } catch (AuthenticationException var9) {
         throw a(var9);
      }

      if (LOG.isDebugEnabled()) {
         HttpClientContext var6 = HttpClientContext.cast(var3);
         String var7 = var6.getExchangeId();
         LOG.debug(a[5], var7, var4);
      }

      this.credentials = null;
      return false;
   }

   public Principal getPrincipal() {
      return null;
   }

   private void validateUsername() throws AuthenticationException {
      try {
         if (this.credentials == null) {
            throw new AuthenticationException(a[0]);
         }
      } catch (AuthenticationException var6) {
         throw a(var6);
      }

      String var1 = this.credentials.getUserName();

      for (int var2 = 0; var2 < var1.length(); var2++) {
         char var3 = var1.charAt(var2);

         try {
            if (Character.isISOControl(var3)) {
               throw new AuthenticationException(a[2]);
            }
         } catch (AuthenticationException var4) {
            throw a(var4);
         }

         try {
            if (var3 == ':') {
               throw new AuthenticationException(a[3]);
            }
         } catch (AuthenticationException var5) {
            throw a(var5);
         }
      }
   }

   private void validatePassword() throws AuthenticationException {
      try {
         if (this.credentials == null) {
            throw new AuthenticationException(a[4]);
         }
      } catch (AuthenticationException var6) {
         throw a(var6);
      }

      char[] var1 = this.credentials.getUserPassword();
      if (var1 != null) {
         for (char var5 : var1) {
            try {
               if (Character.isISOControl(var5)) {
                  throw new AuthenticationException(a[6]);
               }
            } catch (AuthenticationException var7) {
               throw a(var7);
            }
         }
      }
   }

   public String generateAuthResponse(HttpHost var1, HttpRequest var2, HttpContext var3) throws AuthenticationException {
      label28: {
         try {
            this.validateUsername();
            this.validatePassword();
            if (this.buffer == null) {
               this.buffer = new ByteArrayBuilder(64);
               break label28;
            }
         } catch (AuthenticationException var8) {
            throw a(var8);
         }

         this.buffer.reset();
      }

      String[] var6 = a;
      Charset var4 = AuthSchemeSupport.parseCharset(this.paramMap.get(var6[9]), HttpComponentsClient.getCredentialCharset());

      try {
         this.buffer.charset(var4);
         this.buffer.append(this.credentials.getUserName()).append(":").append(this.credentials.getUserPassword());
         if (this.base64codec == null) {
            this.base64codec = new Base64();
         }
      } catch (AuthenticationException var7) {
         throw a(var7);
      }

      byte[] var5 = this.base64codec.encode(this.buffer.toByteArray());
      this.buffer.reset();
      return a[8] + new String(var5, 0, var5.length, StandardCharsets.US_ASCII);
   }

   public CharsetAwareHttpBasicAuthScheme.State store() {
      return this.complete ? new CharsetAwareHttpBasicAuthScheme.State(new HashMap<>(this.paramMap), this.credentials) : null;
   }

   public void restore(CharsetAwareHttpBasicAuthScheme.State var1) {
      if (var1 != null) {
         this.paramMap.clear();
         this.paramMap.putAll(var1.a);
         this.credentials = var1.b;
         this.complete = true;
      }
   }

   @Override
   public String toString() {
      return this.getName() + this.paramMap;
   }

   static {
      String[] var5 = new String[13];
      int var3 = 0;
      String var2 = "n\u0016kV95`^\u0001kJm?sW\u0016.Jv\"2H\u0000z\u0005y\u0004}Mz0n\u0016kVw7\u007f^EcQj\"2U\nz\u0004z9|O\u0004gJ97|BEmKw\"`T\t.Gq7`Z\u0006zAk%2n\u0016kVw7\u007f^EmKw\"sR\u000b}\u0004xvqT\taJ95zZ\u0017oGm3`\u001b\u0004`@9?a\u001b\f`Rx:{_\u0018n\u0016kV95`^\u0001kJm?sW\u0016.Jv\"2H\u0000z+@\u0018.jvvqI\u0000jAw\"{Z\t}\u0004\u007f9gU\u0001.Bv$2Z\u0010zL9%qT\u0015k\u0004B-of0k\u0004}Wn9`_EcQj\"2U\nz\u0004z9|O\u0004gJ97|BEmKw\"`T\t.Gq7`Z\u0006zAk%\u0005I\u0000oHt\u0006y\u0004}Mzv\u0007X\roVj3f\u001dn\u000b}Qi&}I\u0011k@95`^\u0001kJm?sWEz]i3(\u001b";
      int var4 = "n\u0016kV95`^\u0001kJm?sW\u0016.Jv\"2H\u0000z\u0005y\u0004}Mz0n\u0016kVw7\u007f^EcQj\"2U\nz\u0004z9|O\u0004gJ97|BEmKw\"`T\t.Gq7`Z\u0006zAk%2n\u0016kVw7\u007f^EmKw\"sR\u000b}\u0004xvqT\taJ95zZ\u0017oGm3`\u001b\u0004`@9?a\u001b\f`Rx:{_\u0018n\u0016kV95`^\u0001kJm?sW\u0016.Jv\"2H\u0000z+@\u0018.jvvqI\u0000jAw\"{Z\t}\u0004\u007f9gU\u0001.Bv$2Z\u0010zL9%qT\u0015k\u0004B-of0k\u0004}Wn9`_EcQj\"2U\nz\u0004z9|O\u0004gJ97|BEmKw\"`T\t.Gq7`Z\u0006zAk%\u0005I\u0000oHt\u0006y\u0004}Mzv\u0007X\roVj3f\u001dn\u000b}Qi&}I\u0011k@95`^\u0001kJm?sWEz]i3(\u001b"
         .length();
      char var1 = 24;
      int var7 = -1;

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

         while (true) {
            String var8 = a(var10000, a(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     a = var5;
                     LOG = LoggerFactory.getLogger(CharsetAwareHttpBasicAuthScheme.class);
                     return;
                  }

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

                  var2 = "a\u000baW\"%fS\n\u0013c\fp[g#}I\u001fyLR?fV\u0017qZp";
                  var4 = "a\u000baW\"%fS\n\u0013c\fp[g#}I\u001fyLR?fV\u0017qZp".length();
                  var1 = '\t';
                  var7 = -1;
            }

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

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

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

      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 -> 62;
            case 1 -> 96;
            case 2 -> 11;
            case 3 -> 33;
            case 4 -> 28;
            case 5 -> 83;
            default -> 23;
         });
      }

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

   @Internal
   public static class State {
      final Map<String, String> a;
      final UsernamePasswordCredentials b;
      private static final String c;

      State(Map<String, String> var1, UsernamePasswordCredentials var2) {
         this.a = var1;
         this.b = var2;
      }

      @Override
      public String toString() {
         return c + this.a + "}";
      }

      static {
         String var10002 = a(118, a("mPD\u0006$\tI_VD\u001f2O"));
         byte var10001 = -1;
         c = var10002;
      }

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

         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 -> 72;
               case 1 -> 82;
               case 2 -> 83;
               case 3 -> 4;
               case 4 -> 55;
               case 5 -> 4;
               default -> 79;
            });
         }

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