package com.l7tech.server.transport.ftp;

import com.l7tech.gateway.common.transport.SsgConnector;
import com.l7tech.server.ServerConfig;
import com.l7tech.server.transport.ListenerException;
import com.l7tech.server.transport.SsgConnectorManager;
import org.apache.ftpserver.ConnectionConfig;
import org.apache.ftpserver.ConnectionConfigFactory;
import org.apache.ftpserver.DataConnectionConfiguration;
import org.apache.ftpserver.DataConnectionConfigurationFactory;
import org.apache.ftpserver.FtpServer;
import org.apache.ftpserver.command.CommandFactory;
import org.apache.ftpserver.ftplet.Ftplet;
import org.apache.ftpserver.ftplet.UserManager;
import org.apache.ftpserver.impl.DefaultFtpServer;
import org.apache.ftpserver.listener.Listener;
import org.apache.ftpserver.ssl.SslConfiguration;
import org.springframework.beans.factory.annotation.Autowired;

public class SsgFtpServerFactory {
   private static final String a;
   private static final String b;
   private static final String c;
   private static final String d;
   private static final String e;
   private static final String f;
   private static final String g;
   private static final String h;
   private static final String i;
   private static final String j;
   @Autowired
   private FtpSslFactory k;
   @Autowired
   private SsgFtpletFactory l;
   @Autowired
   private FtpRequestProcessorFactory m;
   @Autowired
   private SsgConnectorManager n;
   @Autowired
   private ServerConfig o;
   private static final String[] p;

   public FtpServer create(SsgConnector var1) throws ListenerException {
      return new DefaultFtpServer(this.a(var1));
   }

   private SsgFtpServerContext a(SsgConnector var1) throws ListenerException {
      CommandFactory var2 = this.b(var1);
      ConnectionConfig var3 = this.c(var1);
      FtpRequestProcessor var4 = this.a(var1, var3);
      UserManager var5 = this.d(var1);
      SsgFtpServerContext var6 = new SsgFtpServerContext(var2, var3, var4, var5);
      Listener var7 = this.e(var1);

      SsgFtpServerContext var10000;
      String var10001;
      label17: {
         try {
            var10000 = var6;
            if (var7.isImplicitSsl()) {
               var10001 = p[3];
               break label17;
            }
         } catch (ListenerException var9) {
            throw a(var9);
         }

         String[] var8 = p;
         var10001 = var8[12];
      }

      var10000.addListener(var10001, var7);
      var6.addFtplet(p[11], this.a());
      return var6;
   }

   private CommandFactory b(SsgConnector var1) {
      boolean var2 = var1.getBooleanProperty(SsgConnector.PROP_SUPPORT_EXTENDED_FTP_COMMANDS);

      try {
         if (var2) {
            return new d();
         }
      } catch (NumberFormatException var3) {
         throw a(var3);
      }

      return new h();
   }

   private ConnectionConfig c(SsgConnector var1) throws ListenerException {
      String[] var8 = p;
      String var3 = var1.getProperty(var8[1]);
      boolean var2;
      if (null != var3) {
         var2 = Boolean.parseBoolean(var3);
      } else {
         var8 = p;
         var2 = Boolean.parseBoolean(this.o.getProperty(var8[4]));
      }

      var8 = p;
      int var4 = this.a(var1, var8[13]);
      int var5 = this.a(var1, var8[19]);
      int var6 = this.a(var1, var8[9]);

      label26: {
         label25: {
            try {
               if (var6 >= 1) {
                  break label26;
               }

               if (var5 > 0) {
                  break label25;
               }
            } catch (ListenerException var9) {
               throw a(var9);
            }

            var6 = 10;
            break label26;
         }

         var6 = var5;
      }

      ConnectionConfigFactory var7 = new ConnectionConfigFactory();
      var7.setAnonymousLoginEnabled(var2);
      var7.setMaxAnonymousLogins(var4);
      var7.setMaxLogins(var5);
      var7.setMaxThreads(var6);
      return var7.createConnectionConfig();
   }

   private FtpRequestProcessor a(SsgConnector var1, ConnectionConfig var2) throws ListenerException {
      return this.m.create(var1, var2);
   }

   private UserManager d(SsgConnector var1) throws ListenerException {
      String[] var5 = p;
      int var2 = this.a(var1, var5[21]);
      int var3 = this.a(var1, var5[18]);
      int var4 = this.a(var1, var5[14]);
      return new g(var2, var3, var4);
   }

   private Listener e(SsgConnector param1) throws ListenerException {
      // $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: new org/apache/ftpserver/listener/ListenerFactory
      // 03: dup
      // 04: invokespecial org/apache/ftpserver/listener/ListenerFactory.<init> ()V
      // 07: astore 2
      // 08: aload 0
      // 09: aload 1
      // 0a: getstatic com/l7tech/server/transport/ftp/SsgFtpServerFactory.p [Ljava/lang/String;
      // 0d: astore 7
      // 0f: aload 7
      // 11: bipush 17
      // 13: aaload
      // 14: invokevirtual com/l7tech/server/transport/ftp/SsgFtpServerFactory.a (Lcom/l7tech/gateway/common/transport/SsgConnector;Ljava/lang/String;)I
      // 17: istore 3
      // 18: aload 2
      // 19: iload 3
      // 1a: invokevirtual org/apache/ftpserver/listener/ListenerFactory.setIdleTimeout (I)V
      // 1d: aload 2
      // 1e: aload 1
      // 1f: invokevirtual com/l7tech/gateway/common/transport/SsgConnector.getPort ()I
      // 22: invokevirtual org/apache/ftpserver/listener/ListenerFactory.setPort (I)V
      // 25: aload 0
      // 26: getfield com/l7tech/server/transport/ftp/SsgFtpServerFactory.n Lcom/l7tech/server/transport/SsgConnectorManager;
      // 29: aload 1
      // 2a: getstatic com/l7tech/gateway/common/transport/SsgConnector.PROP_BIND_ADDRESS Ljava/lang/String;
      // 2d: invokevirtual com/l7tech/gateway/common/transport/SsgConnector.getProperty (Ljava/lang/String;)Ljava/lang/String;
      // 30: aload 1
      // 31: invokevirtual com/l7tech/gateway/common/transport/SsgConnector.getPort ()I
      // 34: invokeinterface com/l7tech/server/transport/SsgConnectorManager.translateBindAddress (Ljava/lang/String;I)Ljava/lang/String; 3
      // 39: astore 4
      // 3b: aconst_null
      // 3c: aload 4
      // 3e: if_acmpne 63
      // 41: invokestatic com/l7tech/util/InetAddressUtil.isUseIpv6 ()Z
      // 44: ifeq 5b
      // 47: goto 4e
      // 4a: invokestatic com/l7tech/server/transport/ftp/SsgFtpServerFactory.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 4d: athrow
      // 4e: getstatic com/l7tech/server/transport/ftp/SsgFtpServerFactory.p [Ljava/lang/String;
      // 51: bipush 10
      // 53: aaload
      // 54: goto 61
      // 57: invokestatic com/l7tech/server/transport/ftp/SsgFtpServerFactory.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 5a: athrow
      // 5b: getstatic com/l7tech/server/transport/ftp/SsgFtpServerFactory.p [Ljava/lang/String;
      // 5e: bipush 23
      // 60: aaload
      // 61: astore 4
      // 63: aload 2
      // 64: aload 4
      // 66: invokevirtual org/apache/ftpserver/listener/ListenerFactory.setServerAddress (Ljava/lang/String;)V
      // 69: getstatic com/l7tech/gateway/common/transport/SsgConnector.SCHEME_FTPS Ljava/lang/String;
      // 6c: aload 1
      // 6d: invokevirtual com/l7tech/gateway/common/transport/SsgConnector.getScheme ()Ljava/lang/String;
      // 70: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 73: istore 5
      // 75: aload 2
      // 76: iload 5
      // 78: invokevirtual org/apache/ftpserver/listener/ListenerFactory.setImplicitSsl (Z)V
      // 7b: iload 5
      // 7d: ifeq 8c
      // 80: aload 0
      // 81: aload 1
      // 82: invokevirtual com/l7tech/server/transport/ftp/SsgFtpServerFactory.f (Lcom/l7tech/gateway/common/transport/SsgConnector;)Lorg/apache/ftpserver/ssl/SslConfiguration;
      // 85: goto 8d
      // 88: invokestatic com/l7tech/server/transport/ftp/SsgFtpServerFactory.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 8b: athrow
      // 8c: aconst_null
      // 8d: astore 6
      // 8f: aload 2
      // 90: aload 6
      // 92: invokevirtual org/apache/ftpserver/listener/ListenerFactory.setSslConfiguration (Lorg/apache/ftpserver/ssl/SslConfiguration;)V
      // 95: aload 2
      // 96: aload 0
      // 97: aload 1
      // 98: aload 6
      // 9a: invokevirtual com/l7tech/server/transport/ftp/SsgFtpServerFactory.a (Lcom/l7tech/gateway/common/transport/SsgConnector;Lorg/apache/ftpserver/ssl/SslConfiguration;)Lorg/apache/ftpserver/DataConnectionConfiguration;
      // 9d: invokevirtual org/apache/ftpserver/listener/ListenerFactory.setDataConnectionConfiguration (Lorg/apache/ftpserver/DataConnectionConfiguration;)V
      // a0: aload 2
      // a1: invokevirtual org/apache/ftpserver/listener/ListenerFactory.createListener ()Lorg/apache/ftpserver/listener/Listener;
      // a4: areturn
      // try (29 -> 34): 35 com/l7tech/server/transport/ListenerException
      // try (32 -> 41): 41 com/l7tech/server/transport/ListenerException
      // try (55 -> 64): 64 com/l7tech/server/transport/ListenerException
   }

   private DataConnectionConfiguration a(SsgConnector var1, SslConfiguration var2) throws ListenerException {
      String[] var6 = p;
      int var3 = this.a(var6[6], var1.getProperty(SsgConnector.PROP_PORT_RANGE_START));
      int var4 = this.a(var6[0], var1.getProperty(SsgConnector.PROP_PORT_RANGE_COUNT)) + var3 - 1;
      DataConnectionConfigurationFactory var5 = new DataConnectionConfigurationFactory();

      DataConnectionConfigurationFactory var10000;
      boolean var10001;
      label17: {
         try {
            var5.setActiveEnabled(false);
            var5.setPassivePorts(var3 + "-" + var4);
            var10000 = var5;
            if (null != var2) {
               var10001 = true;
               break label17;
            }
         } catch (ListenerException var7) {
            throw a(var7);
         }

         var10001 = false;
      }

      var10000.setImplicitSsl(var10001);
      var5.setSslConfiguration(var2);
      return var5.createDataConnectionConfiguration();
   }

   private SslConfiguration f(SsgConnector var1) throws ListenerException {
      return this.k.create(var1);
   }

   private Ftplet a() throws ListenerException {
      return this.l.create();
   }

   private int a(SsgConnector var1, String var2) throws ListenerException {
      String var4 = var1.getProperty(var2);
      int var3;
      if (null != var4) {
         var3 = this.a(var2, var4);
      } else {
         var3 = this.a(var2, this.o.getProperty(var2));
      }

      return var3;
   }

   private int a(String var1, String var2) throws ListenerException {
      try {
         return Integer.parseInt(var2);
      } catch (NumberFormatException var5) {
         String[] var4 = p;
         throw new ListenerException(var4[5] + var1 + var4[20] + var2, var5);
      }
   }

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

   static {
      String[] var5 = new String[24];
      int var3 = 0;
      String var2 = "|,z<\u001bI\u001fNXX}\u0005A\b\u001a\u001bEi\u0005R\u001a\\\fZ2\nH\u0002T\u0001Gs\u001eU!U\u001fCr\u0018c\u0003[\u001aFy\u000f\u001f\\\fZ2\u0006G\u0015h\u001d[i\u000eU\u0019j\nE\u007f\u000eU\u001eS\u0016MH\u0003T\b[\u001cY\u0006I\u001dIi\u0019C\u001a\\\fZ2\nH\u0002T\u0001Gs\u001eU!U\u001fCr\u0018c\u0003[\u001aFy\u000f\u001ds\u0016\\}\u0007O\t\u001a\u000eKp\u001eCM\\\u0017X<\u001bG\u001f[\u0015Oh\u000eTM\u001d\u0014|,z<\u001bI\u001fNXX}\u0005A\b\u001a\u000b^}\u0019R\u0017\\\fZ2\u0006G\u0015y\u0017D\u007f\u001eT\u001f_\u0016^P\u0004A\u0004T\u000b \\\fZ2\u001eU\bH5Kd(I\u0003Y\rXn\u000eH\u0019v\u0017Mu\u0005U=_\ncl\u001f\\\fZ2\u0006G\u0015h\u001d[i\u000eU\u0019j\nE\u007f\u000eU\u001eS\u0016MH\u0003T\b[\u001cY\u0002\u0000B\u0007^\u001dL}\u001eJ\u0019\u0007^\u001dL}\u001eJ\u0019\u0016\\\fZ2\u0006G\u0015{\u0016Er\u0012K\u0002O\u000bfs\fO\u0003I\u0016\\\fZ2\u0018C\u001eI\u0011Er\"B\u0001_,Cq\u000eI\u0018N\u0006I\u001dIi\u0019C\u0016\\\fZ2\u0006G\u0015{\u0016Er\u0012K\u0002O\u000bfs\fO\u0003I\u0016\\\fZ2\u0018C\u001eI\u0011Er\"B\u0001_,Cq\u000eI\u0018N \\\fZ2\u001eU\bH5Kd(I\u0003Y\rXn\u000eH\u0019v\u0017Mu\u0005U=_\ncl\u0017\\\fZ2\u0006G\u0015y\u0017D\u007f\u001eT\u001f_\u0016^P\u0004A\u0004T\u000b\u0003\u001dB\n\u001b\\\fZ2\u001eU\bH5Kd(I\u0003Y\rXn\u000eH\u0019v\u0017Mu\u0005U";
      int var4 = "|,z<\u001bI\u001fNXX}\u0005A\b\u001a\u001bEi\u0005R\u001a\\\fZ2\nH\u0002T\u0001Gs\u001eU!U\u001fCr\u0018c\u0003[\u001aFy\u000f\u001f\\\fZ2\u0006G\u0015h\u001d[i\u000eU\u0019j\nE\u007f\u000eU\u001eS\u0016MH\u0003T\b[\u001cY\u0006I\u001dIi\u0019C\u001a\\\fZ2\nH\u0002T\u0001Gs\u001eU!U\u001fCr\u0018c\u0003[\u001aFy\u000f\u001ds\u0016\\}\u0007O\t\u001a\u000eKp\u001eCM\\\u0017X<\u001bG\u001f[\u0015Oh\u000eTM\u001d\u0014|,z<\u001bI\u001fNXX}\u0005A\b\u001a\u000b^}\u0019R\u0017\\\fZ2\u0006G\u0015y\u0017D\u007f\u001eT\u001f_\u0016^P\u0004A\u0004T\u000b \\\fZ2\u001eU\bH5Kd(I\u0003Y\rXn\u000eH\u0019v\u0017Mu\u0005U=_\ncl\u001f\\\fZ2\u0006G\u0015h\u001d[i\u000eU\u0019j\nE\u007f\u000eU\u001eS\u0016MH\u0003T\b[\u001cY\u0002\u0000B\u0007^\u001dL}\u001eJ\u0019\u0007^\u001dL}\u001eJ\u0019\u0016\\\fZ2\u0006G\u0015{\u0016Er\u0012K\u0002O\u000bfs\fO\u0003I\u0016\\\fZ2\u0018C\u001eI\u0011Er\"B\u0001_,Cq\u000eI\u0018N\u0006I\u001dIi\u0019C\u0016\\\fZ2\u0006G\u0015{\u0016Er\u0012K\u0002O\u000bfs\fO\u0003I\u0016\\\fZ2\u0018C\u001eI\u0011Er\"B\u0001_,Cq\u000eI\u0018N \\\fZ2\u001eU\bH5Kd(I\u0003Y\rXn\u000eH\u0019v\u0017Mu\u0005U=_\ncl\u0017\\\fZ2\u0006G\u0015y\u0017D\u007f\u001eT\u001f_\u0016^P\u0004A\u0004T\u000b\u0003\u001dB\n\u001b\\\fZ2\u001eU\bH5Kd(I\u0003Y\rXn\u000eH\u0019v\u0017Mu\u0005U"
         .length();
      char var1 = 20;
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 75;
         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) {
                     p = var5;
                     String[] var9 = p;
                     j = p[8];
                     f = var9[4];
                     i = var9[22];
                     e = var9[2];
                     a = var9[15];
                     g = var9[16];
                     h = var9[7];
                     c = var9[11];
                     b = var9[11];
                     d = var9[14];
                     return;
                  }

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

                  var2 = "\u001cL\u001ar^\u0015H\bu\u000b$h\tC\u0019M\u0018.N\bY6W\r5E\u0015\u0007J\u0016Zr\u001bH\u001d";
                  var4 = "\u001cL\u001ar^\u0015H\bu\u000b$h\tC\u0019M\u0018.N\bY6W\r5E\u0015\u0007J\u0016Zr\u001bH\u001d".length();
                  var1 = 27;
                  var7 = -1;
            }

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

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

      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 -> 113;
            case 1 -> 51;
            case 2 -> 97;
            case 3 -> 87;
            case 4 -> 32;
            case 5 -> 109;
            default -> 38;
         });
      }

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