package com.l7tech.server.security.kerberos;

import com.l7tech.kerberos.KerberosClient;
import com.l7tech.kerberos.KerberosConfig;
import com.l7tech.kerberos.KerberosConfigException;
import com.l7tech.kerberos.KerberosException;
import com.l7tech.kerberos.KerberosGSSAPReqTicket;
import com.l7tech.kerberos.KerberosServiceTicket;
import com.l7tech.kerberos.KerberosTicketRepository.Key;
import com.l7tech.kerberos.KerberosTicketRepository.KeyType;
import com.l7tech.util.HexUtils;
import java.net.URL;
import java.util.Collections;
import java.util.concurrent.CompletionException;
import java.util.logging.Logger;
import javax.security.auth.Subject;
import javax.security.auth.kerberos.KerberosKey;
import javax.security.auth.kerberos.KerberosPrincipal;
import javax.security.auth.kerberos.KerberosTicket;
import org.ietf.jgss.GSSContext;
import org.ietf.jgss.GSSCredential;
import org.ietf.jgss.GSSException;
import org.ietf.jgss.GSSManager;
import org.ietf.jgss.GSSName;
import org.ietf.jgss.Oid;
import org.jaaslounge.decoding.kerberos.KerberosEncData;

public class KerberosRoutingClient extends KerberosClient {
   private static final Logger a;
   private static final String[] r;

   public KerberosServiceTicket getKerberosServiceTicket(String var1, KerberosServiceTicket var2) throws KerberosException {
      try {
         try {
            if (!KerberosConfig.hasKeytab()) {
               throw new KerberosConfigException(r[1]);
            }
         } catch (SecurityException var15) {
            throw a(var15);
         }

         Key var4 = ticketCache.generateKey(var1, KeyType.DELEGATED, var2.getClientPrincipalName(), null);
         KerberosTicket var18 = var2.getDelegatedKerberosTicket();

         try {
            if (var18 == null) {
               a.finer(r[4] + HexUtils.encodeBase64(var2.getGSSAPReqTicket().toByteArray(), true));
               throw new KerberosException(r[5]);
            }
         } catch (SecurityException var14) {
            throw a(var14);
         }

         KerberosServiceTicket var3;
         try {
            Oid var6 = getKerberos5Oid();
            GSSManager var7 = GSSManager.getInstance();
            GSSName var8 = var7.createName(var2.getClientPrincipalName(), GSSName.NT_USER_NAME, var6);
            Subject var9 = new Subject(
               false, Collections.singleton(new KerberosPrincipal(var2.getClientPrincipalName())), Collections.EMPTY_SET, Collections.singleton(var18)
            );
            var3 = Subject.callAs(
               var9,
               () -> {
                  GSSContext var6x = null;
                  GSSCredential var7x = null;

                  try {
                     var7x = var7.createCredential(var8, 0, var6, 1);
                     GSSName var8x = var7.createName(var1, GSSName.NT_HOSTBASED_SERVICE, var6);
                     var6x = var7.createContext(var8x, var6, var7x, this.getKerberosTicketLifetime());
                     var6x.requestMutualAuth(false);
                     var6x.requestConf(true);
                     var6x.requestCredDeleg(true);
                     byte[] var9x = var6x.initSecContext(new byte[0], 0, 0);
                     KerberosTicket var10x = this.getTicket(var9.getPrivateCredentials(), var8x, var7);
                     KerberosGSSAPReqTicket var11x = new KerberosGSSAPReqTicket(var9x);
                     KerberosEncData var12x = null;

                     try {
                        KerberosKey[] var13x = getKeys(var9.getPrivateCredentials());
                        var12x = this.getKerberosAuthorizationData(var13x, var11x);
                     } catch (IllegalStateException var22) {
                     }

                     return new KerberosServiceTicket(
                        var10x.getClient().getName(),
                        var1,
                        var10x.getSessionKey().getEncoded(),
                        System.currentTimeMillis() + var6x.getLifetime() * 1000L,
                        var11x,
                        null,
                        var12x
                     );
                  } finally {
                     try {
                        if (var6x != null) {
                           var6x.dispose();
                        }
                     } catch (IllegalStateException var21) {
                        throw a(var21);
                     }

                     try {
                        if (var7x != null) {
                           var7x.dispose();
                        }
                     } catch (IllegalStateException var23) {
                        throw a(var23);
                     }
                  }
               }
            );
         } catch (SecurityException var12) {
            String[] var19 = r;
            throw new KerberosConfigException(var19[8], var12);
         }

         try {
            if (var3 != null) {
               ticketCache.add(var4, var18, null, null, var3);
            }

            return var3;
         } catch (SecurityException var11) {
            throw a(var11);
         }
      } catch (GSSException var16) {
         String[] var10 = r;
         throw new KerberosConfigException(var10[2], var16);
      } catch (CompletionException var17) {
         Throwable var5 = var17.getCause();

         try {
            if (var5 instanceof KerberosException) {
               throw (KerberosException)var5;
            }
         } catch (SecurityException var13) {
            throw a(var13);
         }

         throw new KerberosException(r[3], var5);
      }
   }

   public KerberosServiceTicket getKerberosServiceTicket(URL param1, String param2, String param3) throws KerberosException {
      // $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:
      // 000: aconst_null
      // 001: astore 5
      // 003: aconst_null
      // 004: astore 6
      // 006: aconst_null
      // 007: astore 7
      // 009: invokestatic com/l7tech/kerberos/KerberosConfig.hasKeytab ()Z
      // 00c: ifne 021
      // 00f: new com/l7tech/kerberos/KerberosConfigException
      // 012: dup
      // 013: getstatic com/l7tech/server/security/kerberos/KerberosRoutingClient.r [Ljava/lang/String;
      // 016: bipush 6
      // 018: aaload
      // 019: invokespecial com/l7tech/kerberos/KerberosConfigException.<init> (Ljava/lang/String;)V
      // 01c: athrow
      // 01d: invokestatic com/l7tech/server/security/kerberos/KerberosRoutingClient.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 020: athrow
      // 021: invokestatic com/l7tech/server/security/kerberos/KerberosRoutingClient.getKerberos5Oid ()Lorg/ietf/jgss/Oid;
      // 024: astore 8
      // 026: invokestatic org/ietf/jgss/GSSManager.getInstance ()Lorg/ietf/jgss/GSSManager;
      // 029: astore 9
      // 02b: aload 9
      // 02d: aload 2
      // 02e: getstatic org/ietf/jgss/GSSName.NT_USER_NAME Lorg/ietf/jgss/Oid;
      // 031: aload 8
      // 033: invokevirtual org/ietf/jgss/GSSManager.createName (Ljava/lang/String;Lorg/ietf/jgss/Oid;Lorg/ietf/jgss/Oid;)Lorg/ietf/jgss/GSSName;
      // 036: astore 10
      // 038: aload 1
      // 039: invokestatic com/l7tech/server/security/kerberos/KerberosRoutingClient.getGSSServiceName (Ljava/net/URL;)Ljava/lang/String;
      // 03c: astore 11
      // 03e: getstatic com/l7tech/server/security/kerberos/KerberosRoutingClient.ticketCache Lcom/l7tech/kerberos/KerberosTicketRepository;
      // 041: aload 11
      // 043: getstatic com/l7tech/kerberos/KerberosTicketRepository$KeyType.CREDENTIAL Lcom/l7tech/kerberos/KerberosTicketRepository$KeyType;
      // 046: aload 2
      // 047: aload 3
      // 048: invokevirtual com/l7tech/kerberos/KerberosTicketRepository.generateKey (Ljava/lang/String;Lcom/l7tech/kerberos/KerberosTicketRepository$KeyType;Ljava/lang/String;Ljava/lang/String;)Lcom/l7tech/kerberos/KerberosTicketRepository$Key;
      // 04b: astore 6
      // 04d: getstatic com/l7tech/server/security/kerberos/KerberosRoutingClient.ticketCache Lcom/l7tech/kerberos/KerberosTicketRepository;
      // 050: aload 6
      // 052: invokevirtual com/l7tech/kerberos/KerberosTicketRepository.getSubject (Lcom/l7tech/kerberos/KerberosTicketRepository$Key;)Ljavax/security/auth/Subject;
      // 055: astore 7
      // 057: aload 7
      // 059: ifnonnull 070
      // 05c: aload 0
      // 05d: getstatic com/l7tech/server/security/kerberos/KerberosRoutingClient.LOGIN_CONTEXT_OUT_CONFIG_ACCT Ljava/lang/String;
      // 060: aload 2
      // 061: aload 3
      // 062: invokevirtual com/l7tech/server/security/kerberos/KerberosRoutingClient.loginGatewayConfiguredSubject (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljavax/security/auth/login/LoginContext;
      // 065: astore 5
      // 067: aload 0
      // 068: getfield com/l7tech/server/security/kerberos/KerberosRoutingClient.kerberosSubject Ljavax/security/auth/Subject;
      // 06b: astore 12
      // 06d: goto 074
      // 070: aload 7
      // 072: astore 12
      // 074: aload 12
      // 076: aload 0
      // 077: aload 9
      // 079: aload 10
      // 07b: aload 8
      // 07d: aload 11
      // 07f: aload 12
      // 081: aload 2
      // 082: invokedynamic call (Lcom/l7tech/server/security/kerberos/KerberosRoutingClient;Lorg/ietf/jgss/GSSManager;Lorg/ietf/jgss/GSSName;Lorg/ietf/jgss/Oid;Ljava/lang/String;Ljavax/security/auth/Subject;Ljava/lang/String;)Ljava/util/concurrent/Callable; bsm=java/lang/invoke/LambdaMetafactory.metafactory (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; args=[ ()Ljava/lang/Object;, com/l7tech/server/security/kerberos/KerberosRoutingClient.lambda$getKerberosServiceTicket$1 (Lorg/ietf/jgss/GSSManager;Lorg/ietf/jgss/GSSName;Lorg/ietf/jgss/Oid;Ljava/lang/String;Ljavax/security/auth/Subject;Ljava/lang/String;)Lcom/l7tech/kerberos/KerberosServiceTicket;, ()Lcom/l7tech/kerberos/KerberosServiceTicket; ]
      // 087: invokestatic javax/security/auth/Subject.callAs (Ljavax/security/auth/Subject;Ljava/util/concurrent/Callable;)Ljava/lang/Object;
      // 08a: checkcast com/l7tech/kerberos/KerberosServiceTicket
      // 08d: astore 4
      // 08f: aload 4
      // 091: ifnull 0b7
      // 094: aload 7
      // 096: ifnonnull 0b7
      // 099: goto 0a0
      // 09c: invokestatic com/l7tech/server/security/kerberos/KerberosRoutingClient.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 09f: athrow
      // 0a0: getstatic com/l7tech/server/security/kerberos/KerberosRoutingClient.ticketCache Lcom/l7tech/kerberos/KerberosTicketRepository;
      // 0a3: aload 6
      // 0a5: aload 0
      // 0a6: getfield com/l7tech/server/security/kerberos/KerberosRoutingClient.kerberosSubject Ljavax/security/auth/Subject;
      // 0a9: aload 5
      // 0ab: aload 4
      // 0ad: invokevirtual com/l7tech/kerberos/KerberosTicketRepository.add (Lcom/l7tech/kerberos/KerberosTicketRepository$Key;Ljavax/security/auth/Subject;Ljavax/security/auth/login/LoginContext;Lcom/l7tech/kerberos/KerberosServiceTicket;)V
      // 0b0: goto 0b7
      // 0b3: invokestatic com/l7tech/server/security/kerberos/KerberosRoutingClient.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0b6: athrow
      // 0b7: goto 146
      // 0ba: astore 8
      // 0bc: new com/l7tech/kerberos/KerberosConfigException
      // 0bf: dup
      // 0c0: getstatic com/l7tech/server/security/kerberos/KerberosRoutingClient.r [Ljava/lang/String;
      // 0c3: astore 13
      // 0c5: aload 13
      // 0c7: bipush 0
      // 0c8: aaload
      // 0c9: aload 8
      // 0cb: invokespecial com/l7tech/kerberos/KerberosConfigException.<init> (Ljava/lang/String;Ljava/lang/Throwable;)V
      // 0ce: athrow
      // 0cf: astore 8
      // 0d1: new com/l7tech/kerberos/KerberosConfigException
      // 0d4: dup
      // 0d5: getstatic com/l7tech/server/security/kerberos/KerberosRoutingClient.r [Ljava/lang/String;
      // 0d8: astore 13
      // 0da: aload 13
      // 0dc: bipush 10
      // 0de: aaload
      // 0df: aload 8
      // 0e1: invokespecial com/l7tech/kerberos/KerberosConfigException.<init> (Ljava/lang/String;Ljava/lang/Throwable;)V
      // 0e4: athrow
      // 0e5: astore 8
      // 0e7: new com/l7tech/kerberos/KerberosConfigException
      // 0ea: dup
      // 0eb: getstatic com/l7tech/server/security/kerberos/KerberosRoutingClient.r [Ljava/lang/String;
      // 0ee: astore 13
      // 0f0: aload 13
      // 0f2: bipush 9
      // 0f4: aaload
      // 0f5: aload 8
      // 0f7: invokespecial com/l7tech/kerberos/KerberosConfigException.<init> (Ljava/lang/String;Ljava/lang/Throwable;)V
      // 0fa: athrow
      // 0fb: astore 8
      // 0fd: aload 7
      // 0ff: ifnull 11d
      // 102: aload 6
      // 104: ifnull 11d
      // 107: goto 10e
      // 10a: invokestatic com/l7tech/server/security/kerberos/KerberosRoutingClient.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 10d: athrow
      // 10e: getstatic com/l7tech/server/security/kerberos/KerberosRoutingClient.ticketCache Lcom/l7tech/kerberos/KerberosTicketRepository;
      // 111: aload 6
      // 113: invokevirtual com/l7tech/kerberos/KerberosTicketRepository.remove (Lcom/l7tech/kerberos/KerberosTicketRepository$Key;)V
      // 116: goto 11d
      // 119: invokestatic com/l7tech/server/security/kerberos/KerberosRoutingClient.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 11c: athrow
      // 11d: aload 8
      // 11f: invokevirtual java/util/concurrent/CompletionException.getCause ()Ljava/lang/Throwable;
      // 122: astore 9
      // 124: aload 9
      // 126: instanceof com/l7tech/kerberos/KerberosException
      // 129: ifeq 136
      // 12c: aload 9
      // 12e: checkcast com/l7tech/kerberos/KerberosException
      // 131: athrow
      // 132: invokestatic com/l7tech/server/security/kerberos/KerberosRoutingClient.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 135: athrow
      // 136: new com/l7tech/kerberos/KerberosException
      // 139: dup
      // 13a: getstatic com/l7tech/server/security/kerberos/KerberosRoutingClient.r [Ljava/lang/String;
      // 13d: bipush 7
      // 13f: aaload
      // 140: aload 9
      // 142: invokespecial com/l7tech/kerberos/KerberosException.<init> (Ljava/lang/String;Ljava/lang/Throwable;)V
      // 145: athrow
      // 146: aload 4
      // 148: areturn
      // try (69 -> 81): 82 javax/security/auth/login/LoginException
      // try (67 -> 71): 72 javax/security/auth/login/LoginException
      // try (6 -> 15): 15 javax/security/auth/login/LoginException
      // try (6 -> 84): 85 javax/security/auth/login/LoginException
      // try (6 -> 84): 96 java/lang/SecurityException
      // try (6 -> 84): 107 org/ietf/jgss/GSSException
      // try (6 -> 84): 118 java/util/concurrent/CompletionException
      // try (119 -> 123): 124 javax/security/auth/login/LoginException
      // try (121 -> 129): 130 javax/security/auth/login/LoginException
      // try (135 -> 141): 141 javax/security/auth/login/LoginException
   }

   static {
      String[] var5 = new String[11];
      int var3 = 0;
      String var2 = "?Y\u0001\u0001^P6\u001eX@\u000f]R\u007f\u0004\u0017\u0015\u0010[[qJP\u0001\u0017WBw\u0013\u0017\u0003\f\\S\u007f\rB\u0012\u0006V\u0015w\tT\u000f\u0016\\A8#$X@(WLb\u000bU@KyPd\bR\u0012\fA\u0015x\u0005C@\u0000][p\u0003P\u0015\u0011WQ?'/E\u0012\f@\u0015u\u0018R\u0001\u0017[[qJ|\u0005\u0011PPd\u0005D@0WG`\u0003T\u0005Cf\\u\u0001R\u0014M&/E\u0012\f@\u0015u\u0018R\u0001\u0017[[qJ|\u0005\u0011PPd\u0005D@0WG`\u0003T\u0005Cf\\u\u0001R\u0014\u001a!R\u0012\u0001WGy\u0019\u00174\nQ^s\u001e\u0017H\u0001SFs\\\u0003IY\u0012$)E\u0005\u0007W[b\u0003V\f\u0010\u0012Sy\u0018\u0017\u0004\u0006^Pq\u000bC\t\f\\\u0015x\u0005C@\u0005]@x\u000e#$X@(WLb\u000bU@KyPd\bR\u0012\fA\u0015x\u0005C@\u0000][p\u0003P\u0015\u0011WQ?&/E\u0012\f@\u0015u\u0018R\u0001\u0017[[qJ|\u0005\u0011PPd\u0005D@0WG`\u0003T\u0005Cf\\u\u0001R\u0014\u001d!R\u0012\u0001WGy\u0019\u0017\u0003\f\\S\u007f\rB\u0012\u0002F\\y\u0004\u0017\u0005\u0011@ZdD";
      int var4 = "?Y\u0001\u0001^P6\u001eX@\u000f]R\u007f\u0004\u0017\u0015\u0010[[qJP\u0001\u0017WBw\u0013\u0017\u0003\f\\S\u007f\rB\u0012\u0006V\u0015w\tT\u000f\u0016\\A8#$X@(WLb\u000bU@KyPd\bR\u0012\fA\u0015x\u0005C@\u0000][p\u0003P\u0015\u0011WQ?'/E\u0012\f@\u0015u\u0018R\u0001\u0017[[qJ|\u0005\u0011PPd\u0005D@0WG`\u0003T\u0005Cf\\u\u0001R\u0014M&/E\u0012\f@\u0015u\u0018R\u0001\u0017[[qJ|\u0005\u0011PPd\u0005D@0WG`\u0003T\u0005Cf\\u\u0001R\u0014\u001a!R\u0012\u0001WGy\u0019\u00174\nQ^s\u001e\u0017H\u0001SFs\\\u0003IY\u0012$)E\u0005\u0007W[b\u0003V\f\u0010\u0012Sy\u0018\u0017\u0004\u0006^Pq\u000bC\t\f\\\u0015x\u0005C@\u0005]@x\u000e#$X@(WLb\u000bU@KyPd\bR\u0012\fA\u0015x\u0005C@\u0000][p\u0003P\u0015\u0011WQ?&/E\u0012\f@\u0015u\u0018R\u0001\u0017[[qJ|\u0005\u0011PPd\u0005D@0WG`\u0003T\u0005Cf\\u\u0001R\u0014\u001d!R\u0012\u0001WGy\u0019\u0017\u0003\f\\S\u007f\rB\u0012\u0002F\\y\u0004\u0017\u0005\u0011@ZdD"
         .length();
      char var1 = '1';
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 37;
         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) {
                     r = var5;
                     a = Logger.getLogger(KerberosRoutingClient.class.getName());
                     return;
                  }

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

                  var2 = "\u001ap'9u @-g4\"nnD\u007fI0$eeQ0qu\u0005brU6a0vSi@4g!x\u001d\u0014g'4brL,\"69ifJ8w'7siL1\"0$uoQq";
                  var4 = "\u001ap'9u @-g4\"nnD\u007fI0$eeQ0qu\u0005brU6a0vSi@4g!x\u001d\u0014g'4brL,\"69ifJ8w'7siL1\"0$uoQq".length();
                  var1 = '\'';
                  var7 = -1;
            }

            var10000 = 16;
            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] ^ 51);
      }

      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 -> 79;
            case 1 -> 18;
            case 2 -> 69;
            case 3 -> 70;
            case 4 -> 23;
            case 5 -> 16;
            default -> 51;
         });
      }

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