private void AuthenticateSpecificMechanism(NetworkCredential credential) { using (var server = new ImapPseudoServer()) { server.Start(); var prof = new Profile(new NetworkCredential("imap-user", (string)null), "imap", server.HostPort); prof.UsingSaslMechanisms = new[] {"LOGIN", "PLAIN", "ANONYMOUS", "DIGEST-MD5", "CRAM-MD5"}; prof.AllowInsecureLogin = true; // greeting server.EnqueueResponse("* OK ready\r\n"); // CAPABILITY response server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0000 OK done\r\n"); // AUTHENTICATE X-PSEUDO-MECHANISM response server.EnqueueResponse("+ \r\n"); server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0001 OK done\r\n"); using (var authMechanism = new SaslPseudoMechanism(1)) { authMechanism.Credential = credential; using (var session = ImapSessionCreator.CreateSession(prof, authMechanism, null)) { Assert.AreEqual(ImapSessionState.Authenticated, session.State); if (credential == null) Assert.AreEqual(new Uri(string.Format("imap://AUTH=X-PSEUDO-MECHANISM@{0}/", server.HostPort)), session.Authority); else Assert.AreEqual(new Uri(string.Format("imap://sasl-user;AUTH=X-PSEUDO-MECHANISM@{0}/", server.HostPort)), session.Authority); } Assert.AreSame(credential, authMechanism.Credential, "credential must be kept"); Assert.AreEqual(Smdn.Security.Authentication.Sasl.SaslExchangeStatus.Succeeded, authMechanism.ExchangeStatus); } server.DequeueRequest(); // CAPABILITY StringAssert.Contains("AUTHENTICATE X-PSEUDO-MECHANISM", server.DequeueRequest()); } }
public void TestConnectWithSpecifiedSaslMechanism() { Connect(delegate(ImapPseudoServer server, ImapClient client) { // greeting server.EnqueueResponse("* OK [CAPABILITY IMAP4rev1] ImapPseudoServer ready\r\n"); // AUTHENTICATE X-PSEUDO-MECHANISM server.EnqueueResponse("+ \r\n"); server.EnqueueTaggedResponse("* CAPABILITY IMAP4rev1\r\n" + "$tag OK done\r\n"); using (var authMechanism = new SaslPseudoMechanism(1)) { client.Connect(authMechanism); Assert.AreEqual(Smdn.Security.Authentication.Sasl.SaslExchangeStatus.Succeeded, authMechanism.ExchangeStatus); } Assert.IsTrue(client.IsConnected); Assert.IsFalse(client.IsSecureSession); Assert.IsNotNull(client.ServerCapabilities); Assert.IsNotNull(client.ServerNamespace); Assert.IsNotNull(client.ServerID); Assert.IsNull((client.Profile as IImapSessionProfile).Credentials); }); }
public void TestAuthenticateSpecificMechanismSaslIRCapable() { using (var authMechanism = new SaslPseudoMechanism(2)) { authMechanism.Credential = new NetworkCredential("user", (string)null); AuthenticateSpecificMechanism(true, authMechanism); } }
public void TestAuthenticateSpecificMechanismWithNoCredential() { using (var authMechanism = new SaslPseudoMechanism(2)) { AuthenticateSpecificMechanism(false, authMechanism); } }
public void TestAuthenticateSpecificMechanismAlreadyExchanged() { using (var authMechanism = new SaslPseudoMechanism(2)) { byte[] clientResponse; authMechanism.Exchange(null, out clientResponse); Assert.AreNotEqual(SaslExchangeStatus.None, authMechanism.ExchangeStatus); AuthenticateSpecificMechanism(true, authMechanism); } }