Esempio n. 1
0
        private async Task <IFtpResponse> HandleUserAsync(string argument, CancellationToken cancellationToken)
        {
            var results = new List <Tuple <IFtpResponse, IAuthorizationMechanism> >();

            foreach (var authorizationMechanism in SelectedHost.AuthorizationMechanisms)
            {
                var response = await authorizationMechanism.HandleUserAsync(argument, cancellationToken)
                               .ConfigureAwait(false);

                if (response.Code >= 200 && response.Code < 300)
                {
                    _filteredAuthorizationMechanism = authorizationMechanism;
                    return(response);
                }

                results.Add(Tuple.Create(response, authorizationMechanism));
            }

            var mechanismNeedingPassword = results.FirstOrDefault(x => x.Item1.Code >= 300 && x.Item1.Code < 400);

            if (mechanismNeedingPassword != null)
            {
                _filteredAuthorizationMechanism = mechanismNeedingPassword.Item2;
                return(mechanismNeedingPassword.Item1);
            }

            return(results.First().Item1);
        }
Esempio n. 2
0
        /// <inheritdoc />
        protected override void OnStatusChanged(SecurityStatus from, SecurityStatus to)
        {
            if (to == SecurityStatus.Unauthenticated)
            {
                _filteredAuthenticationMechanism = null;
                _selectedAuthenticationMechanism = null;
                foreach (var authenticationMechanism in SelectedHost.AuthenticationMechanisms)
                {
                    authenticationMechanism.Reset();
                }
            }
            else if (to == SecurityStatus.Authenticated)
            {
                _selectedAuthorizationMechanism = null;
                _filteredAuthorizationMechanism = null;

                foreach (var authorizationMechanism in SelectedHost.AuthorizationMechanisms)
                {
                    authorizationMechanism.Reset(SelectedAuthenticationMechanism);
                }

                if (from == SecurityStatus.Unauthenticated || from == SecurityStatus.NeedSecurityData)
                {
                    // Successfull AUTH or ADAT
                    _selectedAuthenticationMechanism = _filteredAuthenticationMechanism;
                }
            }
            else if (to == SecurityStatus.Authorized)
            {
                _selectedAuthorizationMechanism = _filteredAuthorizationMechanism;
            }
        }