public static SaslMechanics GetSafest(this SaslMechanics mechanics) { return(Enum.GetValues(typeof(SaslMechanics)) .Cast <SaslMechanics>() .OrderByDescending(x => x) .FirstOrDefault(x => mechanics.HasFlag(x))); }
public void GetFastestMechanic() { const SaslMechanics mechanics = SaslMechanics.Login | SaslMechanics.CramMd5 | SaslMechanics.Plain; var fastest = mechanics.GetFastest(); Assert.IsTrue(fastest == SaslMechanics.Login); }
public void GetSafestMechanic() { const SaslMechanics mechanics = SaslMechanics.Login | SaslMechanics.CramMd5 | SaslMechanics.Plain; var safest = mechanics.GetSafest(); Assert.IsTrue(safest == SaslMechanics.CramMd5); }
/// <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 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); }
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); }
public bool Authenticate(string username, string password, SaslMechanics mechanic = (SaslMechanics) 0x0000) { return Authenticate(new NetworkCredential(username, password)); }
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; }