Ejemplo n.º 1
0
        public void TestDataHandler(string line)
        {
            using (ShimsContext.Create())
            {
                SMTPTransaction actualTransaction = null;
                string          decodedReponse    = null;
                IAuthMethod     actualAuthMethod  = null;
                var             expectedResponse  = new SMTPResponse(SMTPStatusCode.Okay);

                ShimAUTHHandler.HandleResponseSMTPTransactionStringIAuthMethod = (transaction, data, authMethod) =>
                {
                    actualTransaction = transaction;
                    decodedReponse    = data;
                    actualAuthMethod  = authMethod;

                    return(expectedResponse);
                };

                var method  = new StubIAuthMethod();
                var encoded = Convert.ToBase64String(Encoding.ASCII.GetBytes(line));

                var response = AUTHHandler.DataHandler(Transaction, encoded, method);

                Assert.Same(method, actualAuthMethod);
                Assert.Same(expectedResponse, response);
                Assert.Equal(Transaction, actualTransaction);
                Assert.Equal(line, decodedReponse);
            }
        }
Ejemplo n.º 2
0
        public void TestExecutSuccess(string parameters, string expectedDecoded)
        {
            using (ShimsContext.Create())
            {
                AddTransactionProperty("Authenticated", false);
                AddCoreListProperty("EHLOLines", new List <Func <SMTPTransaction, string> >());

                SMTPTransaction actualTransaction = null;
                string          decodedReponse    = null;
                IAuthMethod     actualAuthMethod  = null;
                var             expectedResponse  = new SMTPResponse(SMTPStatusCode.Okay);

                ShimAUTHHandler.HandleResponseSMTPTransactionStringIAuthMethod = (transaction, data, authMethod) =>
                {
                    actualTransaction = transaction;
                    decodedReponse    = data;
                    actualAuthMethod  = authMethod;

                    return(expectedResponse);
                };

                var method = new StubIAuthMethod();
                var loader = new StubIAuthMethodLoader
                {
                    GetModules =
                        () => new List <Tuple <string, IAuthMethod> > {
                        new Tuple <string, IAuthMethod>("TEST", method)
                    }
                };

                var handler = new AUTHHandler(loader);
                handler.Initialize(Core);
                var response = handler.DoExecute(Transaction, parameters);

                Assert.Same(method, actualAuthMethod);
                Assert.Same(expectedResponse, response);
                Assert.Equal(Transaction, actualTransaction);
                Assert.Equal(expectedDecoded, decodedReponse);
            }
        }
Ejemplo n.º 3
0
 public AuthUsersController(SSAuthContext context, IAuthMethod authMethod)
 {
     _context    = context;
     _authMethod = authMethod;
 }
Ejemplo n.º 4
0
        public static SMTPResponse HandleResponse(SMTPTransaction transaction, string decodedReponse, IAuthMethod method)
        {
            string challenge;

            if (!method.ProcessResponse(transaction, decodedReponse, out challenge))
            {
                return(new SMTPResponse(SMTPStatusCode.AuthFailed, challenge != null ? new[] { challenge } : new string[0]));
            }

            if (challenge != null)
            {
                transaction.StartDataMode(DataLineHandler, s => DataHandler(transaction, s, method));

                return(new SMTPResponse(SMTPStatusCode.AuthContinue, Base64Encode(challenge)));
            }

            transaction.SetProperty("Authenticated", true, true);

            return(new SMTPResponse(SMTPStatusCode.AuthSuccess));
        }
Ejemplo n.º 5
0
        public static SMTPResponse DataHandler(SMTPTransaction transaction, string reponse, IAuthMethod method)
        {
            if (transaction == null)
            {
                throw new ArgumentNullException();
            }
            if (reponse == null)
            {
                throw new ArgumentNullException();
            }
            if (method == null)
            {
                throw new ArgumentNullException();
            }

            if (reponse.Equals("*"))
            {
                method.Abort(transaction);
                return(new SMTPResponse(SMTPStatusCode.ParamError));
            }

            string decoded;

            try
            {
                decoded = Base64Decode(reponse);
            }
            catch (FormatException)
            {
                return(new SMTPResponse(SMTPStatusCode.SyntaxError));
            }

            return(HandleResponse(transaction, decoded, method));
        }