Esempio n. 1
0
        private SslProtocols SetProtocol(FtpsOptions options)
        {
            switch (options.GetFtpsProtocol())
            {
            case FtpsProtocol.TLS1_0:
                return(SslProtocols.Tls);

            case FtpsProtocol.TLS1_1:
                return(SslProtocols.Tls11);

            case FtpsProtocol.TLS1_2:
                return(SslProtocols.Tls12);

            case FtpsProtocol.SSLv2:
                this.error.setError("FS0014", "Deprecated protocol, not implemented for .Net");
                return(SslProtocols.None);

            case FtpsProtocol.SSLv3:
                this.error.setError("FS0015", "Deprecated protocol, not implemented for .Net");
                return(SslProtocols.None);

            default:
                return(SslProtocols.Tls);
            }
        }
Esempio n. 2
0
        private FluentFTP.FtpEncryptionMode SetEncryptionMode(FtpsOptions options)
        {
            switch (options.GetFtpEncryptionMode())
            {
            case GeneXusFtpsUtils.FtpEncryptionMode.EXPLICIT:
                return(FluentFTP.FtpEncryptionMode.Explicit);

            case GeneXusFtpsUtils.FtpEncryptionMode.IMPLICIT:
                return(FluentFTP.FtpEncryptionMode.Implicit);

            default:
                return(FluentFTP.FtpEncryptionMode.Explicit);
            }
        }
Esempio n. 3
0
        private FtpDataType SetEncoding(FtpsOptions options)
        {
            switch (options.GetFtpEncoding())
            {
            case FtpEncoding.BINARY:
                return(FtpDataType.Binary);

            case FtpEncoding.ASCII:
                return(FtpDataType.ASCII);

            default:
                return(FtpDataType.Binary);
            }
        }
Esempio n. 4
0
        /******** EXTERNAL OBJECT PUBLIC METHODS - END ********/


        private FtpDataConnectionType SetConnectionMode(FtpsOptions options)
        {
            FtpConnectionMode mode = options.GetFtpConnectionMode();

            switch (mode)
            {
            case FtpConnectionMode.ACTIVE:
                return(FtpDataConnectionType.AutoActive);

            case FtpConnectionMode.PASSIVE:
                return(FtpDataConnectionType.PASV);

            default:
                return(FtpDataConnectionType.PASV);
            }
        }
Esempio n. 5
0
        public override bool Connect(FtpsOptions options)
        {
            if (options.HasError())
            {
                this.error = options.GetError();
                return(false);
            }
            if (SecurityUtils.compareStrings("", options.Host) || SecurityUtils.compareStrings("", options.User) ||
                SecurityUtils.compareStrings("", options.Password))
            {
                this.error.setError("FS001", "Empty connection data");
                return(false);
            }

            this.client = new FtpClient
            {
                Host               = options.Host,
                Port               = options.Port,
                Credentials        = new NetworkCredential(options.User, options.Password),
                DataConnectionType = SetConnectionMode(options),
                EncryptionMode     = SetEncryptionMode(options),
                Encoding           = Encoding.UTF8,
            };

            this.client.DownloadDataType = SetEncoding(options);

            SslProtocols protocols = SetProtocol(options);;

            if (protocols == SslProtocols.None)
            {
                return(false);
            }
            this.client.SslProtocols             = protocols;
            this.client.DataConnectionEncryption = options.ForceEncryption;
            if (SecurityUtils.compareStrings("", options.TrustStorePath))
            {
                this.client.ValidateCertificate += (control, e1) =>
                {
                    e1.Accept = true;
                };
            }
            else
            {
                X509Certificate2 cert_grt = new X509Certificate2(options.TrustStorePath, options.TrustStorePassword);
                client.ValidateCertificate += (control, e1) =>
                {
                    X509Chain verify = new X509Chain();
                    verify.Build(new X509Certificate2(e1.Certificate));
                    e1.Accept = SecurityUtils.compareStrings(verify.ChainElements[verify.ChainElements.Count - 1].Certificate.Thumbprint, cert_grt.Thumbprint);
                };
            }

            try
            {
                this.client.Connect();
                if (!this.client.LastReply.Success)
                {
                    this.client.Disconnect();
                    this.error.setError("FS008", "Connection error");
                    return(false);
                }
            }
            catch (Exception e)
            {
                this.error.setError("FS002", "Connection error " + e.Message);
                this.client = null;
                return(false);
            }
            if (!this.client.IsConnected)
            {
                this.error.setError("FS009", "Connection error");
                return(false);
            }
            this.whiteList = options.WhiteList;
            return(true);
        }