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);
              }
        }
Example #7
0
        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;
        }