public void TestApopCredentialNotFound() { server.EnqueueResponse("+OK POP3 server ready <*****@*****.**>\r\n"); using (var session = new PopSession(host, port)) { Assert.IsTrue(session.ApopAvailable); Assert.IsFalse((bool)session.Apop(new NullCredential())); Assert.IsFalse((bool)session.Apop(new NullCredential(),"user")); } }
public void TestApop() { server.EnqueueResponse("+OK POP3 server ready <*****@*****.**>\r\n"); using (var session = new PopSession(host, port)) { Assert.IsTrue(session.ApopAvailable); server.EnqueueResponse("+OK maildrop has 1 message (369 octets)\r\n"); Assert.IsTrue((bool)session.Apop(new NetworkCredential("mrose", "tanstaaf"))); StringAssert.AreEqualIgnoringCase("APOP mrose c4c9334bac560ecc979e58001b3e22fb\r\n", server.DequeueRequest()); Assert.AreEqual(PopSessionState.Transaction, session.State); Assert.AreEqual(new Uri(string.Format("pop://mrose;AUTH=+APOP@{0}:{1}/", host, port)), session.Authority); } }
public void TestApopNoWithInUseResponseCode() { server.EnqueueResponse("+OK POP3 server ready <*****@*****.**>\r\n"); using (var session = new PopSession(host, port)) { Assert.IsTrue(session.ApopAvailable); server.EnqueueResponse("-ERR [IN-USE] Do you have another POP session running?\r\n"); var result = session.Apop(new NetworkCredential("mrose", "tanstaaf")); Assert.IsTrue(result.Failed); Assert.IsNotNull(result.GetResponseCode(PopResponseCode.InUse)); StringAssert.AreEqualIgnoringCase("APOP mrose c4c9334bac560ecc979e58001b3e22fb\r\n", server.DequeueRequest()); Assert.AreEqual(PopSessionState.Authorization, session.State); Assert.AreEqual(new Uri(string.Format("pop://{0}:{1}/", host, port)), session.Authority); } }
private void ApopSelectAppropriateCredential(bool specifyUsername) { server.EnqueueResponse("+OK POP3 server ready <timestamp>\r\n"); using (var session = new PopSession(host, port)) { server.EnqueueResponse("+OK done\r\n"); var credentials = new CredentialCache(); credentials.Add("pop.example.net", 110, "LOGIN", new NetworkCredential("user", "pass1")); credentials.Add(server.Host, server.Port, "LOGIN", new NetworkCredential("user", "pass2")); credentials.Add(server.Host, server.Port, "+APOP", new NetworkCredential("user", "pass3")); credentials.Add(server.Host, server.Port, string.Empty, new NetworkCredential("user", "pass4")); server.EnqueueResponse("+OK done\r\n"); if (specifyUsername) Assert.IsTrue((bool)session.Apop(credentials, "user")); else Assert.IsTrue((bool)session.Apop(credentials)); StringAssert.AreEqualIgnoringCase("APOP user 80455cef894e28a3589d57c72e788afd\r\n", server.DequeueRequest()); Assert.AreEqual(PopSessionState.Transaction, session.State); Assert.AreEqual(new Uri(string.Format("pop://user;+APOP@{0}:{1}/", host, port)), session.Authority); } }
private void ApopCredentialPropertyNull(ICredentialsByHost credential) { server.EnqueueResponse("+OK POP3 server ready <*****@*****.**>\r\n"); using (var session = new PopSession(host, port)) { Assert.IsFalse((bool)session.Apop(credential)); } }
public void TestApopSelectAppropriateCredentialNotFound() { server.EnqueueResponse("+OK POP3 server ready <*****@*****.**>\r\n"); using (var session = new PopSession(host, port)) { var credentials = new CredentialCache(); credentials.Add("pop.example.net", 110, "LOGIN", new NetworkCredential("user", "pass1")); credentials.Add(server.Host, server.Port, "LOGIN", new NetworkCredential("user", "pass2")); credentials.Add(server.Host, server.Port, "+APOP", new NetworkCredential("user", "pass3")); credentials.Add(server.Host, server.Port, string.Empty, new NetworkCredential("user", "pass4")); var result = session.Apop(credentials, "xxxx"); Assert.IsFalse((bool)result); Assert.AreEqual(PopCommandResultCode.RequestError, result.Code); Assert.AreEqual(PopSessionState.Authorization, session.State); } }
private static PopCommandResult AuthenticateWithAppropriateMechanism(PopSession session, bool allowInsecureMechanism, ICredentialsByHost credentials, string username, IEnumerable<string> usingSaslMechanisms) { PopCommandResult result = null; foreach (var mechanism in usingSaslMechanisms) { if (!allowInsecureMechanism && SaslClientMechanism.IsMechanismPlainText(mechanism)) // disallow plain text mechanism continue; if (string.Equals(mechanism, SaslMechanisms.Anonymous, StringComparison.OrdinalIgnoreCase)) // disallow 'ANONYMOUS' mechanism continue; var authMechanism = PopAuthenticationMechanism.GetKnownOrCreate(mechanism); if (session.ServerCapabilities.IsCapable(authMechanism)) { result = session.Auth(credentials, username, authMechanism); if (result.Succeeded) break; } } if ((result == null || result.Failed) && allowInsecureMechanism) { if (session.ApopAvailable) result = session.Apop(credentials, username); } if ((result == null || result.Failed) && allowInsecureMechanism) result = session.Login(credentials, username); return result; }