package com.l7tech.server.event;

import com.l7tech.gateway.common.spring.remoting.RemoteUtils;
import com.l7tech.identity.IdentityProviderConfig;
import com.l7tech.identity.User;
import com.l7tech.objectmodel.EntityType;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.IdentityHeader;
import com.l7tech.util.InetAddressUtil;
import java.rmi.server.ServerNotActiveException;
import java.security.AccessController;
import java.security.Principal;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.security.auth.Subject;
import org.jetbrains.annotations.Nullable;

public class AdminInfo {
   public static final Logger logger;
   public static final String LOCALHOST_IP;
   public static final String LOCALHOST_SUBJECT;
   public final String login;
   public final String id;
   public final Goid identityProviderOid;
   public final String ip;
   @Nullable
   public final User user;
   private final Subject a;
   private static final String[] b;

   private AdminInfo(String var1, String var2, Goid var3, String var4, @Nullable User var5, Subject var6) {
      this.ip = var4;
      this.id = var2;
      this.identityProviderOid = var3;
      this.login = var1;
      this.user = var5;
      this.a = var6;
   }

   public static AdminInfo find() {
      return find(true);
   }

   public static AdminInfo find(boolean var0) {
      Subject var1 = null;
      String var2 = null;
      String var3 = null;
      Goid var5 = IdentityProviderConfig.DEFAULT_GOID;

      String var4;
      try {
         var4 = RemoteUtils.getClientHost();
         var1 = Subject.getSubject(AccessController.getContext());
      } catch (ServerNotActiveException var12) {
         try {
            if (var0) {
               logger.log(Level.WARNING, b[5] + LOCALHOST_IP + b[6]);
            }
         } catch (ServerNotActiveException var11) {
            throw a(var11);
         }

         var4 = LOCALHOST_IP;
         String[] var9 = b;
         var2 = var9[1];
      }

      User var6;
      var6 = null;
      label54:
      if (var1 != null) {
         Set var7 = var1.getPrincipals();

         try {
            if (var7 == null || var7.isEmpty()) {
               break label54;
            }
         } catch (ServerNotActiveException var10) {
            throw a(var10);
         }

         Principal var8 = (Principal)var7.iterator().next();
         if (var8 instanceof User) {
            var6 = (User)var8;
            var2 = var6.getLogin();
            var3 = var6.getId();
            var5 = var6.getProviderId();
         }

         if (var2 == null) {
            var2 = var8.getName();
         }

         if (var3 == null) {
            String[] var13 = b;
            var3 = var13[3] + var2;
         }
      }

      if (var2 == null) {
         String[] var14 = b;
         var2 = var14[2];
      }

      if (var3 == null) {
         var3 = b[0] + var2;
      }

      if (var4 == null) {
         var4 = LOCALHOST_IP;
      }

      return new AdminInfo(var2, var3, var5, var4, var6, var1);
   }

   public <OUT> Callable<OUT> wrapCallable(Callable<OUT> var1) {
      return a(this.a, a(this.ip, var1));
   }

   private static <OUT> Callable<OUT> a(Subject var0, Callable<OUT> var1) {
      return var0 == null ? var1 : new a(var0, var1);
   }

   private static <OUT> Callable<OUT> a(String var0, Callable<OUT> var1) {
      return var0 == null ? var1 : new b(var0, var1);
   }

   public IdentityHeader getIdentityHeader() {
      return new IdentityHeader(this.identityProviderOid, this.id, EntityType.USER, this.login, "", null, null);
   }

   public <OUT> OUT invokeCallable(Callable<OUT> var1) throws Exception {
      Callable var2 = a(this.a, a(this.ip, var1));
      return (OUT)var2.call();
   }

   static {
      String[] var5 = new String[7];
      int var3 = 0;
      String var2 = "K'<$]AhZ9o\u000bW:6+R[aH!0'\u0014N;>$Q_vx9</P\\KN7?/]\\\nK'<$]AhZ9o\u000bW:6+R[aH!0'";
      int var4 = "K'<$]AhZ9o\u000bW:6+R[aH!0'\u0014N;>$Q_vx9</P\\KN7?/]\\\nK'<$]AhZ9o\u000bW:6+R[aH!0'".length();
      char var1 = '\n';
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 127;
         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) {
                     b = var5;
                     LOCALHOST_SUBJECT = b[4];
                     logger = Logger.getLogger(AdminInfo.class.getName());
                     LOCALHOST_IP = InetAddressUtil.getLocalHostAddress();
                     return;
                  }

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

                  var2 = "|.#yL_fA(/*YIj\\/0<\r^}M(2yNZ~[#\"yLH+D)%8A\u001bhI**u\rT~\\5/=H\u001bdNf5<_MbK/(>\rZe\b'\"4DUx\\4'-DMn\b4#4BOn\b%'5A\u0015\\A**yXHn\b/6vXHnZ\f\u0007*):LWxQ52<@";
                  var4 = "|.#yL_fA(/*YIj\\/0<\r^}M(2yNZ~[#\"yLH+D)%8A\u001bhI**u\rT~\\5/=H\u001bdNf5<_MbK/(>\rZe\b'\"4DUx\\4'-DMn\b4#4BOn\b%'5A\u0015\\A**yXHn\b/6vXHnZ\f\u0007*):LWxQ52<@"
                     .length();
                  var1 = 'q';
                  var7 = -1;
            }

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

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

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

      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 -> 68;
            case 1 -> 42;
            case 2 -> 42;
            case 3 -> 53;
            case 4 -> 65;
            case 5 -> 87;
            default -> 103;
         });
      }

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