package com.l7tech.server.transport.ftp;

import com.l7tech.gateway.common.audit.LoggingAudit;
import com.l7tech.gateway.common.transport.ftp.FtpAdmin;
import com.l7tech.gateway.common.transport.ftp.FtpClientConfig;
import com.l7tech.gateway.common.transport.ftp.FtpSecurity;
import com.l7tech.gateway.common.transport.ftp.FtpTestException;
import com.l7tech.gateway.common.transport.ftp.FtpUtils;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.server.DefaultKey;
import com.l7tech.server.policy.variable.ServerVariables;
import com.l7tech.util.ExceptionUtils;
import java.util.logging.Logger;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.X509TrustManager;
import org.jetbrains.annotations.Nullable;

public class FtpAdminImpl implements FtpAdmin {
   private static final Logger a = Logger.getLogger(FtpAdminImpl.class.getName());
   private final X509TrustManager b;
   private final HostnameVerifier c;
   private final DefaultKey d;
   private static final String e;

   public FtpAdminImpl(X509TrustManager var1, HostnameVerifier var2, DefaultKey var3) {
      this.b = var1;
      this.c = var2;
      this.d = var3;
   }

   public void testConnection(
      boolean var1,
      boolean var2,
      boolean var3,
      String var4,
      int var5,
      String var6,
      String var7,
      Goid var8,
      boolean var9,
      @Nullable Goid var10,
      String var11,
      String var12,
      int var13
   ) throws FtpTestException {
      FtpClientConfig var14 = FtpClientUtils.newConfig(var4);

      FtpClientConfig var10000;
      FtpSecurity var10001;
      label62: {
         try {
            var10000 = var14;
            if (!var1) {
               var10001 = FtpSecurity.FTP_UNSECURED;
               break label62;
            }
         } catch (FindException var21) {
            throw a(var21);
         }

         try {
            if (var2) {
               var10001 = FtpSecurity.FTPS_EXPLICIT;
               break label62;
            }
         } catch (FindException var20) {
            throw a(var20);
         }

         var10001 = FtpSecurity.FTPS_IMPLICIT;
      }

      var10000.setSecurity(var10001);

      String var15;
      try {
         if (null == var8) {
            var15 = ServerVariables.expandPasswordOnlyVariable(new LoggingAudit(a), var7);
         } else {
            var15 = ServerVariables.getSecurePasswordByGoid(new LoggingAudit(a), var8);
         }
      } catch (FindException var18) {
         String var17 = e + ExceptionUtils.getMessage(var18);
         throw (FtpTestException)new FtpTestException(var17, var17).initCause(var18);
      }

      var14.setPort(var5).setUser(var6).setPass(var15).setDirectory(var12).setTimeout(var13);
      X509TrustManager var16 = null;
      if (var3) {
         var14.setVerifyServerCert(true);
         var16 = this.b;
      }

      DefaultKey var22 = null;
      if (var9) {
         var14.setUseClientCert(true).setClientCertId(var10).setClientCertAlias(var11);
         var22 = this.d;
      }

      try {
         if (var1) {
            FtpClientUtils.testFtpsConnection(var14, var22, var16, this.c);
            return;
         }
      } catch (FindException var19) {
         throw a(var19);
      }

      FtpUtils.testFtpConnection(var14);
   }

   static {
      String var10002 = a(3, a(" V\u001fcy'>\u0001W^mz-uUM\u000e!f'}\u0000J\u001b!e#m\u0006O\u0011sqbl\u0010^\u001bsp,}\u0010\u0002^"));
      byte var10001 = -1;
      e = var10002;
   }

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

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

      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 -> 118;
            case 1 -> 59;
            case 2 -> 125;
            case 3 -> 2;
            case 4 -> 22;
            case 5 -> 65;
            default -> 29;
         });
      }

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