package com.l7tech.server.transport.ftp;

import com.l7tech.common.ftp.FtpCommand;
import com.l7tech.common.mime.ContentTypeHeader;
import com.l7tech.gateway.common.transport.SsgConnector;
import com.l7tech.message.Message;
import com.l7tech.objectmodel.Goid;
import com.l7tech.policy.assertion.AssertionStatus;
import com.l7tech.server.MessageProcessor;
import com.l7tech.server.StashManagerFactory;
import com.l7tech.server.message.PolicyEnforcementContext;
import com.l7tech.server.util.EventChannel;
import com.l7tech.server.util.SoapFaultManager;
import com.l7tech.util.ResourceUtils;
import java.io.IOException;
import java.io.InputStream;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.RejectedExecutionException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.ftpserver.ftplet.DataConnection;
import org.apache.ftpserver.ftplet.DataType;
import org.apache.ftpserver.ftplet.DefaultFtpReply;
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.ftplet.FtpRequest;
import org.apache.ftpserver.impl.FtpIoSession;
import org.apache.ftpserver.impl.FtpServerContext;

public class UploadOnlyFtpRequestProcessor extends AbstractFtpRequestProcessor {
   private static final Logger k;
   private static final String[] m;

   public UploadOnlyFtpRequestProcessor(
      MessageProcessor var1,
      SoapFaultManager var2,
      StashManagerFactory var3,
      EventChannel var4,
      ExecutorService var5,
      ContentTypeHeader var6,
      Goid var7,
      SsgConnector var8,
      long var9
   ) {
      super(var1, var2, var3, var4, var5, var6, var7, var8, var9, k);
   }

   @Override
   public void process(FtpIoSession param1, FtpServerContext param2, FtpRequest param3, FtpCommand param4) throws FtpException {
      // $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/ftp/UploadOnlyFtpRequestProcessor.addDiagnosticContextInfo (Lorg/apache/ftpserver/impl/FtpIoSession;)V
      // 05: getstatic com/l7tech/server/transport/ftp/UploadOnlyFtpRequestProcessor.k Ljava/util/logging/Logger;
      // 08: getstatic java/util/logging/Level.FINE Ljava/util/logging/Level;
      // 0b: invokevirtual java/util/logging/Logger.isLoggable (Ljava/util/logging/Level;)Z
      // 0e: ifeq 38
      // 11: getstatic com/l7tech/server/transport/ftp/UploadOnlyFtpRequestProcessor.k Ljava/util/logging/Logger;
      // 14: getstatic java/util/logging/Level.FINE Ljava/util/logging/Level;
      // 17: getstatic com/l7tech/server/transport/ftp/UploadOnlyFtpRequestProcessor.m [Ljava/lang/String;
      // 1a: bipush 3
      // 1b: aaload
      // 1c: bipush 2
      // 1d: anewarray 236
      // 20: dup
      // 21: bipush 0
      // 22: aload 4
      // 24: aastore
      // 25: dup
      // 26: bipush 1
      // 27: aload 3
      // 28: invokeinterface org/apache/ftpserver/ftplet/FtpRequest.getArgument ()Ljava/lang/String; 1
      // 2d: aastore
      // 2e: invokevirtual java/util/logging/Logger.log (Ljava/util/logging/Level;Ljava/lang/String;[Ljava/lang/Object;)V
      // 31: goto 38
      // 34: invokestatic com/l7tech/server/transport/ftp/UploadOnlyFtpRequestProcessor.b (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 37: athrow
      // 38: aload 4
      // 3a: invokevirtual com/l7tech/common/ftp/FtpCommand.isArgumentRequired ()Z
      // 3d: ifeq 73
      // 40: aconst_null
      // 41: aload 3
      // 42: invokeinterface org/apache/ftpserver/ftplet/FtpRequest.getArgument ()Ljava/lang/String; 1
      // 47: if_acmpeq 67
      // 4a: goto 51
      // 4d: invokestatic com/l7tech/server/transport/ftp/UploadOnlyFtpRequestProcessor.b (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 50: athrow
      // 51: aload 3
      // 52: invokeinterface org/apache/ftpserver/ftplet/FtpRequest.getArgument ()Ljava/lang/String; 1
      // 57: invokevirtual java/lang/String.trim ()Ljava/lang/String;
      // 5a: invokevirtual java/lang/String.isEmpty ()Z
      // 5d: ifeq 73
      // 60: goto 67
      // 63: invokestatic com/l7tech/server/transport/ftp/UploadOnlyFtpRequestProcessor.b (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 66: athrow
      // 67: aload 0
      // 68: aload 1
      // 69: aload 2
      // 6a: aload 3
      // 6b: invokevirtual com/l7tech/server/transport/ftp/UploadOnlyFtpRequestProcessor.reply501SyntaxError (Lorg/apache/ftpserver/impl/FtpIoSession;Lorg/apache/ftpserver/impl/FtpServerContext;Lorg/apache/ftpserver/ftplet/FtpRequest;)V
      // 6e: aload 0
      // 6f: invokevirtual com/l7tech/server/transport/ftp/UploadOnlyFtpRequestProcessor.removeDiagnosticContextInfo ()V
      // 72: return
      // 73: getstatic com/l7tech/server/transport/ftp/i.a [I
      // 76: aload 4
      // 78: invokevirtual com/l7tech/common/ftp/FtpCommand.ordinal ()I
      // 7b: iaload
      // 7c: lookupswitch 44 2 1 28 2 28
      // 98: aload 0
      // 99: aload 1
      // 9a: aload 2
      // 9b: aload 3
      // 9c: aload 4
      // 9e: invokevirtual com/l7tech/server/transport/ftp/UploadOnlyFtpRequestProcessor.a (Lorg/apache/ftpserver/impl/FtpIoSession;Lorg/apache/ftpserver/impl/FtpServerContext;Lorg/apache/ftpserver/ftplet/FtpRequest;Lcom/l7tech/common/ftp/FtpCommand;)V
      // a1: goto c8
      // a4: invokestatic com/l7tech/server/transport/ftp/UploadOnlyFtpRequestProcessor.b (Ljava/lang/Exception;)Ljava/lang/Exception;
      // a7: athrow
      // a8: new org/apache/ftpserver/ftplet/FtpException
      // ab: dup
      // ac: aload 4
      // ae: invokestatic java/lang/String.valueOf (Ljava/lang/Object;)Ljava/lang/String;
      // b1: getstatic com/l7tech/server/transport/ftp/UploadOnlyFtpRequestProcessor.m [Ljava/lang/String;
      // b4: astore 6
      // b6: aload 6
      // b8: bipush 5
      // b9: aaload
      // ba: swap
      // bb: aload 6
      // bd: bipush 4
      // be: aaload
      // bf: invokedynamic makeConcatWithConstants (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" ]
      // c4: invokespecial org/apache/ftpserver/ftplet/FtpException.<init> (Ljava/lang/String;)V
      // c7: athrow
      // c8: aload 0
      // c9: invokevirtual com/l7tech/server/transport/ftp/UploadOnlyFtpRequestProcessor.removeDiagnosticContextInfo ()V
      // cc: goto d8
      // cf: astore 5
      // d1: aload 0
      // d2: invokevirtual com/l7tech/server/transport/ftp/UploadOnlyFtpRequestProcessor.removeDiagnosticContextInfo ()V
      // d5: aload 5
      // d7: athrow
      // d8: return
      // try (30 -> 42): 43 org/apache/ftpserver/ftplet/FtpException
      // try (27 -> 34): 35 org/apache/ftpserver/ftplet/FtpException
      // try (0 -> 24): 25 org/apache/ftpserver/ftplet/FtpException
      // try (0 -> 50): 86 null
      // try (53 -> 65): 65 org/apache/ftpserver/ftplet/FtpException
      // try (53 -> 83): 86 null
      // try (86 -> 87): 86 null
   }

   private void a(FtpIoSession var1, FtpServerContext var2, FtpRequest var3, FtpCommand var4) throws FtpException {
      try {
         if (!this.validateConnectionFactoryState(var1)) {
            this.reply503BadSequence(var1);
            return;
         }
      } catch (Exception var41) {
         throw b(var41);
      }

      try {
         if (!var1.getDataType().equals(DataType.BINARY)) {
            var1.write(new DefaultFtpReply(550, m[0] + var1.getDataType().toString() + m[9]));
            return;
         }
      } catch (Exception var52) {
         throw b(var52);
      }

      this.reply150FileStatusOk(var1, var2, var3);
      String var5 = var3.getArgument();

      try {
         DataConnection var6;
         try {
            var6 = var1.getDataConnection().openConnection();
         } catch (Exception var48) {
            var1.resetState();
            this.handleOpenConnectionFailure(var1, var2, var3, var48);
            return;
         }

         try {
            if (FtpCommand.STOU == var4) {
               var1.write(new DefaultFtpReply(250, var5 + m[2]));
            }
         } catch (Exception var40) {
            throw b(var40);
         }

         try {
            if (k.isLoggable(Level.FINE)) {
               k.log(Level.FINE, m[1], new String[]{var1.getFileSystemView().getWorkingDirectory().getAbsolutePath(), var3.getArgument()});
            }
         } catch (Exception var46) {
            throw b(var46);
         }

         InputStream var7;
         try {
            var7 = this.transferDataFromClient(var1.getFtpletSession(), var6, var3.getArgument());
         } catch (RejectedExecutionException var49) {
            Logger var10000 = k;
            Level var10001 = Level.WARNING;
            String var10002 = var49.getMessage();
            String[] var13 = m;
            var10000.log(var10001, var13[7] + var10002);
            var1.write(new DefaultFtpReply(421, var13[6]));
            return;
         } catch (IOException var50) {
            this.handleDataTransferFailure(var1, var2, var3, var50);
            return;
         }

         Message var8;
         try {
            UploadOnlyFtpRequestProcessor var53;
            FtpIoSession var54;
            FtpRequest var55;
            FtpCommand var10003;
            boolean var10004;
            label221: {
               try {
                  var53 = this;
                  var54 = var1;
                  var55 = var3;
                  var10003 = FtpCommand.STOR;
                  if (FtpCommand.STOU == var4) {
                     var10004 = true;
                     break label221;
                  }
               } catch (Exception var45) {
                  throw b(var45);
               }

               var10004 = false;
            }

            var8 = var53.createRequestMessage(var54, var55, var10003, var10004, var7);
         } catch (IOException var47) {
            this.handleDataTransferFailure(var1, var2, var3, var47);
            return;
         }

         PolicyEnforcementContext var9 = this.createPolicyEnforcementContext(var8);

         try {
            AssertionStatus var10 = this.submitRequestMessage(var9);

            try {
               if (var9.isStealthResponseMode()) {
                  var1.close(false).awaitUninterruptibly(10000L);
                  return;
               }
            } catch (Exception var43) {
               throw b(var43);
            }

            try {
               if (var10 == AssertionStatus.NONE) {
                  this.reply226ClosingConnection(var1, var2, var3);
                  return;
               }
            } catch (Exception var42) {
               throw b(var42);
            }

            var1.write(new DefaultFtpReply(550, var5 + m[8]));
         } finally {
            ResourceUtils.closeQuietly(var9);
         }
      } finally {
         this.resetStateAndCloseConnection(var1);
      }
   }

   @Override
   protected ContentTypeHeader getDefaultMessageContentType() {
      return ContentTypeHeader.XML_DEFAULT;
   }

   static {
      String[] var5 = new String[10];
      int var3 = 0;
      String var2 = "\u000b>lW\rm2\u000f5sQH9}6){\u0012~\u001eA\rgz]_j~>3t\u0012\nmuo:;\u0015\r+`;gz[A/.x`g\u0003Pm)q\u0013egH@L$}9\"n\u0012^>o-3yV\u0003,\u0017&rVA#`8gOfb\u0018.9(n\u0012K#b:g;\u0015Vzsx`<\u001aX$g.2y\bV{svi\u0018}g\u007f]@'o1#<\\B>.,2lBB8z:#2\f\r(iFD$i\u007f(z\u0012\u000f\u0019\u0012&d\u0012N%`1\"\u007fFD%`,gyJN/k;\"x\u001c%\u0019&u^H..+(<F_+`,!y@\r.o+&<T_%c\u007f$p[H$zeg";
      int var4 = "\u000b>lW\rm2\u000f5sQH9}6){\u0012~\u001eA\rgz]_j~>3t\u0012\nmuo:;\u0015\r+`;gz[A/.x`g\u0003Pm)q\u0013egH@L$}9\"n\u0012^>o-3yV\u0003,\u0017&rVA#`8gOfb\u0018.9(n\u0012K#b:g;\u0015Vzsx`<\u001aX$g.2y\bV{svi\u0018}g\u007f]@'o1#<\\B>.,2lBB8z:#2\f\r(iFD$i\u007f(z\u0012\u000f\u0019\u0012&d\u0012N%`1\"\u007fFD%`,gyJN/k;\"x\u001c%\u0019&u^H..+(<F_+`,!y@\r.o+&<T_%c\u007f$p[H$zeg"
         .length();
      char var1 = 6;
      int var7 = -1;

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

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

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

                  var2 = "ZXel{\u0019T\u0004 GXMbfUB\u0015\bSb`\u0001T\u0004XEb`UE\b\u0011P-s\u0016E\t\u0017M#";
                  var4 = "ZXel{\u0019T\u0004 GXMbfUB\u0015\bSb`\u0001T\u0004XEb`UE\b\u0011P-s\u0016E\t\u0017M#".length();
                  var1 = '\b';
                  var7 = -1;
            }

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

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

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

      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 -> 79;
            case 1 -> 87;
            case 2 -> 12;
            case 3 -> 34;
            case 4 -> 61;
            case 5 -> 90;
            default -> 30;
         });
      }

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