package com.l7tech.server.identity.ldap;

import com.l7tech.identity.ldap.LdapUrlBasedIdentityProviderConfig;
import com.l7tech.server.ServerConfig;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;
import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
import java.util.logging.Level;
import java.util.logging.Logger;

public class LdapUrlProviderImpl implements LdapUrlProvider {
   private static final Logger a;
   private static final Long b;
   private final ReentrantReadWriteLock c = new ReentrantReadWriteLock();
   private final LdapUrlBasedIdentityProviderConfig d;
   private final String[] e;
   private final ServerConfig f;
   private final Long[] g;
   private String h;
   private static final String[] i;

   public LdapUrlProviderImpl(LdapUrlBasedIdentityProviderConfig var1, ServerConfig var2) {
      this.d = var1;
      this.e = var1.getLdapUrl();
      this.f = var2;
      if (this.e != null) {
         this.g = new Long[this.e.length];
         this.h = this.e[0];
      } else {
         this.g = new Long[0];
      }
   }

   @Override
   public String getLastWorkingLdapUrl() {
      ReadLock var1 = this.c.readLock();

      try {
         var1.lockInterruptibly();
         return this.h;
      } catch (InterruptedException var6) {
         throw new RuntimeException(var6);
      } finally {
         var1.unlock();
      }
   }

   @Override
   public String markCurrentUrlFailureAndGetFirstAvailableOne(String var1) {
      WriteLock var2 = this.c.writeLock();

      try {
         var2.lockInterruptibly();
      } catch (InterruptedException var20) {
         throw new RuntimeException(var20);
      }

      try {
         Long var3 = this.d.getReconnectTimeout();
         if (var3 == null) {
            try {
               var3 = Long.parseLong(this.f.getProperty(LdapUrlBasedIdentityProviderConfig.PROP_LDAP_RECONNECT_TIMEOUT));
            } catch (NumberFormatException var19) {
               String[] var12 = i;
               a.log(Level.WARNING, LdapUrlBasedIdentityProviderConfig.PROP_LDAP_RECONNECT_TIMEOUT + var12[6], var19);
               var3 = b;
            }
         }

         if (var1 != this.h) {
            return this.h;
         }

         if (var1 != null) {
            int var4 = 0;
            int var5 = 0;

            while (true) {
               label119: {
                  try {
                     if (var5 >= this.e.length) {
                        break;
                     }

                     if (this.e[var5] != var1) {
                        break label119;
                     }
                  } catch (InterruptedException var21) {
                     throw a(var21);
                  }

                  var4 = var5;
                  this.g[var5] = System.currentTimeMillis();
                  Logger var10000 = a;
                  long var10001 = var3 / 1000L;
                  String var9 = this.e[var5];
                  long var10 = var10001;
                  String[] var25 = i;
                  var10000.info(var25[4] + var10 + var25[5] + var9);
               }

               var5++;
            }

            try {
               if (var4 > this.e.length - 1) {
                  throw new RuntimeException(i[3]);
               }
            } catch (InterruptedException var18) {
               throw a(var18);
            }
         }

         for (int var23 = 0; var23 < this.e.length; var23++) {
            boolean var24 = false;
            if (this.g[var23] == null) {
               var24 = true;
               String var29 = this.e[var23];
               String[] var26 = i;
               a.fine(var26[7] + var29);
            } else {
               long var6 = System.currentTimeMillis() - this.g[var23];
               if (var6 > var3) {
                  var24 = true;
                  this.g[var23] = null;
                  String var30 = this.e[var23];
                  String[] var27 = i;
                  a.fine(var27[1] + var30);
               }
            }

            if (var24) {
               String var31 = this.e[var23];
               String[] var28 = i;
               a.info(var28[2] + var31);
               this.h = this.e[var23];
               return this.h;
            }
         }

         a.fine(i[0]);
         this.h = null;
         return null;
      } finally {
         var2.unlock();
      }
   }

   static {
      String[] var5 = new String[8];
      int var3 = 0;
      String var2 = "\u0013\rZ)\f+O\"AC{\f<\u000e3\u0013S)\u0002#O1\nZ`\u0013;K6O<\u001e\u0005Wy@\u001a|\u001eA^h\u0013oL7\u0004X)\u0002#O1\nZ`\u0013;K6AZf\u000e(\u000e7\u000fY|\u0007'\u0000r5Dp\t!Ir\bB)\u0001(O;\u000f\f)\"\u0006\u0013O`\u000e(\u000e&\u000e\u0016{\u0005,A$\u0004D)\u0015<G<\u0006\u0016}\b&]r\u0014DeZo\u0018\"\u0000Ez\u0005+\u000e3AC{\fo@=\u0015\u0016`\u000eoB;\u0012B\u001a\u0010\rWj\u000b#G!\u0015_g\u0007o[ \r\u0016o\u000f=\u000e<\u0004N}@\u000br\u0012Sj\u000f!J!A\f)";
      int var4 = "\u0013\rZ)\f+O\"AC{\f<\u000e3\u0013S)\u0002#O1\nZ`\u0013;K6O<\u001e\u0005Wy@\u001a|\u001eA^h\u0013oL7\u0004X)\u0002#O1\nZ`\u0013;K6AZf\u000e(\u000e7\u000fY|\u0007'\u0000r5Dp\t!Ir\bB)\u0001(O;\u000f\f)\"\u0006\u0013O`\u000e(\u000e&\u000e\u0016{\u0005,A$\u0004D)\u0015<G<\u0006\u0016}\b&]r\u0014DeZo\u0018\"\u0000Ez\u0005+\u000e3AC{\fo@=\u0015\u0016`\u000eoB;\u0012B\u001a\u0010\rWj\u000b#G!\u0015_g\u0007o[ \r\u0016o\u000f=\u000e<\u0004N}@\u000br\u0012Sj\u000f!J!A\f)"
         .length();
      char var1 = 30;
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 73;
         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) {
                     i = var5;
                     a = Logger.getLogger(LdapUrlProviderImpl.class.getName());
                     b = 60000L;
                     return;
                  }

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

                  var2 = "m\u000e[y\u000f5C9\u0007\tx\u0010$\u0011.\u0011Gp\u00167D?\u001bM6\u000f\"^=\u001b[z\u0006~\u00118\r@x\u0018pU(\u0018Hc\u0013$\u001d\u0019\fP6\n\"]m\u0010Fb_?_m\u001cEw\u001c;]$\r]6\u00065Em";
                  var4 = "m\u000e[y\u000f5C9\u0007\tx\u0010$\u0011.\u0011Gp\u00167D?\u001bM6\u000f\"^=\u001b[z\u0006~\u00118\r@x\u0018pU(\u0018Hc\u0013$\u001d\u0019\fP6\n\"]m\u0010Fb_?_m\u001cEw\u001c;]$\r]6\u00065Em"
                     .length();
                  var1 = '0';
                  var7 = -1;
            }

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

   private static InterruptedException a(InterruptedException 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 -> 27;
            case 1 -> 40;
            case 2 -> 127;
            case 3 -> 64;
            case 4 -> 41;
            case 5 -> 6;
            default -> 103;
         });
      }

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