Exemple #1
0
 public static SaslMechanics GetSafest(this SaslMechanics mechanics)
 {
     return(Enum.GetValues(typeof(SaslMechanics))
            .Cast <SaslMechanics>()
            .OrderByDescending(x => x)
            .FirstOrDefault(x => mechanics.HasFlag(x)));
 }
Exemple #2
0
        public void GetFastestMechanic()
        {
            const SaslMechanics mechanics = SaslMechanics.Login | SaslMechanics.CramMd5 | SaslMechanics.Plain;
            var fastest = mechanics.GetFastest();

            Assert.IsTrue(fastest == SaslMechanics.Login);
        }
Exemple #3
0
        public void GetSafestMechanic()
        {
            const SaslMechanics mechanics = SaslMechanics.Login | SaslMechanics.CramMd5 | SaslMechanics.Plain;
            var safest = mechanics.GetSafest();

            Assert.IsTrue(safest == SaslMechanics.CramMd5);
        }
Exemple #4
0
        /// <summary>
        ///   Authenticates the client to the server using the best supported SASL mechanism.
        /// </summary>
        /// <param name = "username">The username, obviously.</param>
        /// <param name = "password">The users password.</param>
        /// <param name = "mechanic">The SASL mechanism to use. This param is optional and can be left blank (0x0000), if done so, the best fitting mechanism will be chosen automatically.</param>
        /// <returns>Returns true on success, false otherwise.</returns>
        public bool Authenticate(string username, string password, SaslMechanics mechanic = (SaslMechanics)0x0000)
        {
            var credentials = new NetworkCredential(username, password);

            IsAuthenticated = Authenticate(credentials, mechanic);
            return(IsAuthenticated);
        }
Exemple #5
0
        public bool Authenticate(NetworkCredential credentials, SaslMechanics mechanic = (SaslMechanics)0x0000)
        {
            var authenticator = new SmtpAuthenticator(this);

            if (mechanic != 0x0000)
            {
                IsAuthenticated = authenticator.Authenticate(credentials, mechanic);
                return(IsAuthenticated);
            }

            IsAuthenticated = authenticator.CanAuthenticate ?
                              authenticator.Authenticate(credentials) :
                              InvokeManualSaslAuthenticationRequired(credentials, this);
            return(IsAuthenticated);
        }
Exemple #6
0
        public bool Authenticate(NetworkCredential credentials, SaslMechanics mechanic = (SaslMechanics) 0x0000)
        {
            Arguments.VerifyNotNull(credentials);

            var authenticator = new Pop3Authenticator(this);
            if (mechanic != 0x0000) {
                IsAuthenticated = authenticator.Authenticate(credentials, mechanic);
                return IsAuthenticated;
            }

            IsAuthenticated = authenticator.CanAuthenticate
                                  ? authenticator.Authenticate(credentials)
                                  : InvokeManualSaslAuthenticationRequired(credentials, this);

            return IsAuthenticated;
        }
        public bool Authenticate(NetworkCredential credentials, SaslMechanics mechanic = (SaslMechanics)0x0000)
        {
            var supported = mechanic == 0x0000 ? _client.ServerCapabilities.GetSupportedSaslMechanics() : mechanic;

            var best = _client.IsSecure ? supported.GetFastest() : supported.GetSafest();

            switch (best)
            {
            case SaslMechanics.Plain:
                return(AuthenticatePlain(credentials));

            case SaslMechanics.Login:
                return(AuthenticateLogin(credentials));

            case SaslMechanics.CramMd5:
                return(AuthenticateCramMd5(credentials));

            default:
                return(false);
            }
        }
        public SaslMechanics GetSupportedSaslMechanics()
        {
            SaslMechanics mechanics = 0x0000;

            if (_items.ContainsKey("PLAIN"))
            {
                mechanics |= SaslMechanics.Plain;
            }

            if (_items.ContainsKey("LOGIN"))
            {
                mechanics |= SaslMechanics.Login;
            }

            if (_items.ContainsKey("CRAM-MD5"))
            {
                mechanics |= SaslMechanics.CramMd5;
            }

            //if (_items.ContainsKey("AUTH=DIGEST-MD5"))
            //{
            //    mechanics |= SaslMechanics.DigestMd5;
            //}

            //if (_items.ContainsKey("AUTH=NTLM"))
            //{
            //    mechanics |= SaslMechanics.Ntlm;
            //}

            //if (_items.ContainsKey("AUTH=GSSAPI"))
            //{
            //    mechanics |= SaslMechanics.GssApi;
            //}

            // to be continued ...

            return(mechanics);
        }
Exemple #9
0
 public bool Authenticate(string username, string password, SaslMechanics mechanic = (SaslMechanics) 0x0000)
 {
     return Authenticate(new NetworkCredential(username, password));
 }
Exemple #10
0
 public bool Authenticate(string username, string password, SaslMechanics mechanic = (SaslMechanics)0x0000)
 {
     return(Authenticate(new NetworkCredential(username, password)));
 }
 /// <summary>
 ///   Authenticates the client to the server using the best supported SASL mechanism.
 /// </summary>
 /// <param name = "username">The username, obviously.</param>
 /// <param name = "password">The users password.</param>
 /// <param name = "mechanic">The SASL mechanism to use. This param is optional and can be left blank (0x0000), if done so, the best fitting mechanism will be chosen automatically.</param>
 /// <returns>Returns true on success, false otherwise.</returns>
 public bool Authenticate(string username, string password, SaslMechanics mechanic = (SaslMechanics) 0x0000)
 {
     var credentials = new NetworkCredential(username, password);
     IsAuthenticated = Authenticate(credentials, mechanic);
     return IsAuthenticated;
 }
        public bool Authenticate(NetworkCredential credentials, SaslMechanics mechanic = (SaslMechanics) 0x0000)
        {
            var supported = mechanic == 0x0000 ? _client.ServerCapability.GetSupportedSaslMechanics() : mechanic;
            var best = _client.IsSecure ? supported.GetFastest() : supported.GetSafest();

            switch (best) {
                case SaslMechanics.Login:
                    return AuthenticateLogin(credentials);
                case SaslMechanics.Plain:
                    return AuthenticatePlain(credentials);
                case SaslMechanics.CramMd5:
                    return AuthenticateCramMd5(credentials);
            }

            if (_client.ServerCapability.IsUserSupported) {
                return AuthenticateUser(credentials);
            }
            return false;
        }