package com.l7tech.server.transport.firewall;

import com.l7tech.gateway.common.transport.InterfaceTag;
import com.l7tech.gateway.common.transport.firewall.SsgFirewallRule;
import com.l7tech.objectmodel.Entity;
import com.l7tech.objectmodel.EntityHeader;
import com.l7tech.objectmodel.EntityType;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.server.HibernateEntityManager;
import com.l7tech.server.ServerConfig;
import com.l7tech.server.event.EntityInvalidationEvent;
import com.l7tech.server.transport.ListenerException;
import com.l7tech.server.util.ApplicationEventProxy;
import com.l7tech.server.util.FirewallUtils;
import com.l7tech.util.ConfigFactory;
import com.l7tech.util.ExceptionUtils;
import com.l7tech.util.Functions;
import com.l7tech.util.InetAddressUtil;
import com.l7tech.util.Pair;
import java.io.File;
import java.net.InetAddress;
import java.net.SocketException;
import java.text.ParseException;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.context.ApplicationEvent;

public class SsgFirewallRuleManagerImpl extends HibernateEntityManager<SsgFirewallRule, EntityHeader> implements SsgFirewallRuleManager, DisposableBean {
   private static final Logger m;
   private final ServerConfig n;
   private final Map<Goid, SsgFirewallRule> o = new LinkedHashMap<>();
   private final AtomicReference<Pair<String, Set<InterfaceTag>>> p = new AtomicReference<>(null);
   private static final String[] q;

   public SsgFirewallRuleManagerImpl(ServerConfig var1, ApplicationEventProxy var2) {
      this.n = var1;
      var2.addApplicationListener(new a(this));
   }

   public Class<? extends Entity> getImpClass() {
      return SsgFirewallRule.class;
   }

   @Override
   public Class<? extends Entity> getInterfaceClass() {
      return SsgFirewallRule.class;
   }

   @Override
   public EntityType getEntityType() {
      return EntityType.FIREWALL_RULE;
   }

   protected void initDao() throws Exception {
      super.initDao();

      for (SsgFirewallRule var2 : this.findAll()) {
         this.o.put(var2.getGoid(), var2);
      }

      this.a();
   }

   public void destroy() throws Exception {
      File var1 = this.n.getLocalDirectoryProperty(q[16], true);
      FirewallUtils.closeFirewallForConnectors(var1);
   }

   private void a(ApplicationEvent var1) {
      if (var1 instanceof EntityInvalidationEvent var2) {
         if (SsgFirewallRule.class.isAssignableFrom(var2.getEntityClass())) {
            Goid[] var3 = var2.getEntityIds();
            char[] var4 = var2.getEntityOperations();

            for (int var5 = 0; var5 < var4.length; var5++) {
               char var6 = var4[var5];
               Goid var7 = var3[var5];
               switch (var6) {
                  case 'D':
                     m.warning(q[12]);
                     this.o.remove(var7);
                     break;
                  default:
                     this.a(var7);
               }
            }

            this.a();
         }
      }
   }

   private void a(Goid param1) {
      // $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:
      // 00: aload 0
      // 01: aload 1
      // 02: invokevirtual com/l7tech/server/transport/firewall/SsgFirewallRuleManagerImpl.findByPrimaryKey (Lcom/l7tech/objectmodel/Goid;)Lcom/l7tech/objectmodel/PersistentEntity;
      // 05: checkcast com/l7tech/gateway/common/transport/firewall/SsgFirewallRule
      // 08: astore 2
      // 09: aload 2
      // 0a: ifnull 2e
      // 0d: aload 2
      // 0e: invokevirtual com/l7tech/gateway/common/transport/firewall/SsgFirewallRule.isEnabled ()Z
      // 11: ifeq 2e
      // 14: goto 1b
      // 17: invokestatic com/l7tech/server/transport/firewall/SsgFirewallRuleManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 1a: athrow
      // 1b: aload 0
      // 1c: getfield com/l7tech/server/transport/firewall/SsgFirewallRuleManagerImpl.o Ljava/util/Map;
      // 1f: aload 1
      // 20: aload 2
      // 21: invokeinterface java/util/Map.put (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 3
      // 26: pop
      // 27: goto 39
      // 2a: invokestatic com/l7tech/server/transport/firewall/SsgFirewallRuleManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 2d: athrow
      // 2e: aload 0
      // 2f: getfield com/l7tech/server/transport/firewall/SsgFirewallRuleManagerImpl.o Ljava/util/Map;
      // 32: aload 1
      // 33: invokeinterface java/util/Map.remove (Ljava/lang/Object;)Ljava/lang/Object; 2
      // 38: pop
      // 39: goto 63
      // 3c: astore 2
      // 3d: getstatic com/l7tech/server/transport/firewall/SsgFirewallRuleManagerImpl.m Ljava/util/logging/Logger;
      // 40: getstatic java/util/logging/Level.WARNING Ljava/util/logging/Level;
      // 43: aload 1
      // 44: invokestatic java/lang/String.valueOf (Ljava/lang/Object;)Ljava/lang/String;
      // 47: aload 2
      // 48: invokestatic com/l7tech/util/ExceptionUtils.getMessage (Ljava/lang/Throwable;)Ljava/lang/String;
      // 4b: getstatic com/l7tech/server/transport/firewall/SsgFirewallRuleManagerImpl.q [Ljava/lang/String;
      // 4e: astore 3
      // 4f: aload 3
      // 50: bipush 14
      // 52: aaload
      // 53: dup_x2
      // 54: pop
      // 55: aload 3
      // 56: bipush 13
      // 58: aaload
      // 59: swap
      // 5a: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001\u0001\u0001" ]
      // 5f: aload 2
      // 60: invokevirtual java/util/logging/Logger.log (Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Throwable;)V
      // 63: return
      // try (7 -> 20): 20 com/l7tech/objectmodel/FindException
      // try (5 -> 10): 11 com/l7tech/objectmodel/FindException
      // try (0 -> 27): 28 com/l7tech/objectmodel/FindException
   }

   private void a() {
      File var1 = this.n.getLocalDirectoryProperty(q[8], true);
      List var2 = Functions.sort(this.o.values(), new b(this));
      var2 = Functions.map(var2, new c(this));
      FirewallUtils.openFirewallForRules(var1, var2);
   }

   private SsgFirewallRule a(SsgFirewallRule var1, String var2) {
      try {
         String var3 = var1.getProperty(var2);
         if (this.a(var3)) {
            String var4 = this.b(var3);
            var1.putProperty(var2, var4);
         }
      } catch (ListenerException var5) {
         m.log(Level.WARNING, q[5] + ExceptionUtils.getMessage(var5), ExceptionUtils.getDebugException(var5));
      }

      return var1;
   }

   private boolean a(String var1) {
      if (var1 != null && var1.length() >= 1 && !var1.contains(":")) {
         char var2 = var1.charAt(0);
         return var2 < '0' || var2 > '9';
      } else {
         return false;
      }
   }

   private String b(String var1) throws ListenerException {
      try {
         if (!this.a(var1)) {
            return var1;
         }
      } catch (SocketException var17) {
         throw a(var17);
      }

      Pair var2 = this.b();

      try {
         if (var2 == null) {
            throw new ListenerException(q[11] + var1);
         }
      } catch (SocketException var16) {
         throw a(var16);
      }

      List var3;
      try {
         var3 = InetAddressUtil.findAllLocalInetAddresses();
      } catch (SocketException var12) {
         String var10003 = ExceptionUtils.getMessage(var12);
         String[] var11 = q;
         throw new ListenerException(var11[6] + var1 + var11[7] + var10003);
      }

      InterfaceTag var4 = this.a((Collection<InterfaceTag>)var2.right, var1);

      try {
         if (var4 == null) {
            throw new ListenerException(q[1] + var1 + q[2]);
         }
      } catch (SocketException var15) {
         throw a(var15);
      }

      Set var5 = var4.getIpPatterns();
      InetAddress var6 = null;

      label65:
      for (InetAddress var8 : var3) {
         Iterator var9 = var5.iterator();

         while (true) {
            if (!var9.hasNext()) {
               continue label65;
            }

            String var10 = (String)var9.next();

            try {
               if (!InetAddressUtil.patternMatchesAddress(var10, var8)) {
                  continue;
               }

               if (var6 != null) {
                  break;
               }
            } catch (SocketException var14) {
               throw a(var14);
            }

            var6 = var8;
         }

         Logger var10000 = m;
         Level var10001 = Level.WARNING;
         String var19 = String.valueOf(var6);
         String[] var18 = q;
         var10000.log(var10001, var18[3] + var1 + var18[0] + var19);
         break;
      }

      try {
         if (var6 == null) {
            throw new ListenerException(q[4] + var1 + q[15]);
         }
      } catch (SocketException var13) {
         throw a(var13);
      }

      return var6.getHostAddress();
   }

   private Pair<String, Set<InterfaceTag>> b() {
      Pair var1 = this.p.get();
      if (var1 == null) {
         try {
            var1 = this.c();
            this.p.set(var1);
         } catch (FindException var4) {
            Logger var10000 = m;
            Level var10001 = Level.WARNING;
            String var10002 = ExceptionUtils.getMessage(var4);
            String[] var3 = q;
            var10000.log(var10001, var3[10] + var10002, ExceptionUtils.getDebugException(var4));
         } catch (ParseException var5) {
            m.log(Level.WARNING, q[9] + ExceptionUtils.getMessage(var5), ExceptionUtils.getDebugException(var5));
         }
      }

      return var1;
   }

   private Pair<String, Set<InterfaceTag>> c() throws FindException, ParseException {
      String var1 = ConfigFactory.getUncachedConfig().getProperty(InterfaceTag.PROPERTY_NAME);

      Set var10000;
      label17: {
         try {
            if (var1 == null) {
               var10000 = Collections.emptySet();
               break label17;
            }
         } catch (FindException var3) {
            throw a(var3);
         }

         var10000 = InterfaceTag.parseMultiple(var1);
      }

      Set var2 = var10000;
      return new Pair(var1, var2);
   }

   private InterfaceTag a(Collection<InterfaceTag> var1, String var2) {
      for (InterfaceTag var4 : var1) {
         if (var4.getName().equalsIgnoreCase(var2)) {
            return var4;
         }
      }

      return null;
   }

   static {
      String[] var5 = new String[17];
      int var3 = 0;
      String var2 = "\u001dJq\u0000:T:SZ>\u001e/A'X[p\u001dnX2IJv\u0007 RsPFl\u000bnA;\\G>\u0001 PsSLj\u0019!G8\u001dHz\n<P NLmN![sIAw\u001dn[<YL0Nnb:QE>\u001b=Ps[@l\u001d:\u0015>\\]}\u0006nZ5\u001d\u001esF>\u0007 A6OO\u007f\r+\u00157XOw\u0000'A:RG>\u0000/X6Y\t\n\u001d@mN%[<JG0\ntGj\u000b<S2^L>'sF>\u000f*Q!XZmN>T'ILl\u0000nS<O\tw\u0000:P![H}\u000bn[2PLzN@hG\u007f\f\"PsIF>\u001a<T=NE\u007f\u001a+\u00151TGzN/Q7OLm\u001dnB;TE{N;E7\\]w\u0000)\u00155T[{\u0019/Y?\u001d[k\u0002+Fi\u001d]hG\u007f\f\"PsIF>\u0002!Z8\u001d\\nN P'JFl\u0005n\\=ILl\b/V6N\ti\u0006'Y6\u001dOw\u0000*\\=Z\t\u007fN#T'^A>\b!Gs[@l\u000b9T?Q\tl\u001b\"PsHZw\u0000)\u0015:S]{\u001c(T0X\t\u0002\u0007\t\fKHl*'G6^]q\u001c7\u001etGh\u000f\"\\7\u001d@p\u001a+G5\\J{N*P5TGw\u001a'Z=\u0007\t&hG\u007f\f\"PsIF>\u0002!T7\u001d@p\u001a+G5\\J{N*P5TGw\u001a'Z=N\u0013>WsF>\u0007 A6OO\u007f\r+\u00157XOw\u0000'A:RGmN+M:N]%N;[2_E{N:Zs[@p\nnX2IJvN(Z!\u001dOw\u001c+B2QE>\u001c;Y6\u001d\\m\u0007 RsTGj\u000b<S2^L>\u0016YLr\u000b:\\=Z\tx\u0007<P$\\ErN<@?X\u0002\u0007\t9hG\u007f\f\"PsIF>\b'[7\u001dCk\u001d:\u00182YM{\nnZ!\u001d\u0004k\u001e*T'XM>\b'G6JHr\u0002nB:IA>\t!\\7\u001d";
      int var4 = "\u001dJq\u0000:T:SZ>\u001e/A'X[p\u001dnX2IJv\u0007 RsPFl\u000bnA;\\G>\u0001 PsSLj\u0019!G8\u001dHz\n<P NLmN![sIAw\u001dn[<YL0Nnb:QE>\u001b=Ps[@l\u001d:\u0015>\\]}\u0006nZ5\u001d\u001esF>\u0007 A6OO\u007f\r+\u00157XOw\u0000'A:RG>\u0000/X6Y\t\n\u001d@mN%[<JG0\ntGj\u000b<S2^L>'sF>\u000f*Q!XZmN>T'ILl\u0000nS<O\tw\u0000:P![H}\u000bn[2PLzN@hG\u007f\f\"PsIF>\u001a<T=NE\u007f\u001a+\u00151TGzN/Q7OLm\u001dnB;TE{N;E7\\]w\u0000)\u00155T[{\u0019/Y?\u001d[k\u0002+Fi\u001d]hG\u007f\f\"PsIF>\u0002!Z8\u001d\\nN P'JFl\u0005n\\=ILl\b/V6N\ti\u0006'Y6\u001dOw\u0000*\\=Z\t\u007fN#T'^A>\b!Gs[@l\u000b9T?Q\tl\u001b\"PsHZw\u0000)\u0015:S]{\u001c(T0X\t\u0002\u0007\t\fKHl*'G6^]q\u001c7\u001etGh\u000f\"\\7\u001d@p\u001a+G5\\J{N*P5TGw\u001a'Z=\u0007\t&hG\u007f\f\"PsIF>\u0002!T7\u001d@p\u001a+G5\\J{N*P5TGw\u001a'Z=N\u0013>WsF>\u0007 A6OO\u007f\r+\u00157XOw\u0000'A:RGmN+M:N]%N;[2_E{N:Zs[@p\nnX2IJvN(Z!\u001dOw\u001c+B2QE>\u001c;Y6\u001d\\m\u0007 RsTGj\u000b<S2^L>\u0016YLr\u000b:\\=Z\tx\u0007<P$\\ErN<@?X\u0002\u0007\t9hG\u007f\f\"PsIF>\b'[7\u001dCk\u001d:\u00182YM{\nnZ!\u001d\u0004k\u001e*T'XM>\b'G6JHr\u0002nB:IA>\t!\\7\u001d"
         .length();
      char var1 = 'c';
      int var7 = -1;

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

         while (true) {
            String var8 = b(var10000, d(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     q = var5;
                     m = Logger.getLogger(SsgFirewallRuleManagerImpl.class.getName());
                     return;
                  }

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

                  var2 = "q(\u0013vA1Z\"e\u0013l[yQ41\u0005mP2\u001f0!\u0016pG*Lq*\u001c\"V1V\"e\u001cmF<\u001f7*\u0000\"D0M42\u0013nNyM$)\u0017,\f'$\u0000FK+Z21\u001dp[";
                  var4 = "q(\u0013vA1Z\"e\u0013l[yQ41\u0005mP2\u001f0!\u0016pG*Lq*\u001c\"V1V\"e\u001cmF<\u001f7*\u0000\"D0M42\u0013nNyM$)\u0017,\f'$\u0000FK+Z21\u001dp["
                     .length();
                  var1 = '<';
                  var7 = -1;
            }

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

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

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

      return var10000;
   }

   private static String b(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 -> 86;
            case 1 -> 66;
            case 2 -> 117;
            case 3 -> 5;
            case 4 -> 37;
            case 5 -> 94;
            default -> 56;
         });
      }

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