public bool ProcessResponse(SMTPTransaction transaction, string response, out string challenge) { if (string.IsNullOrEmpty(response)) { challenge = null; return(false); } var parts = response.Split('\0'); if (parts.Length != 3) { challenge = null; return(false); } var username = parts[1]; var password = parts[2]; transaction.SetProperty("Username", username, true); transaction.SetProperty("Password", password, true); challenge = null; // TODO // var password = response; // var username = transaction.GetProperty<string>("Username"); return(true); }
public void TestSetAndGetProperty(bool permanent) { using (ShimsContext.Create()) { var server = new ShimSMTPServer(); var settings = new StubIReceiveSettings(); var transaction = new SMTPTransaction(server, settings); const int value1 = 5; const string value2 = "foo"; const bool value3 = false; var value4 = new object(); transaction.SetProperty("foo", value1, permanent); var actualValue1 = transaction.GetProperty <int>("foo"); Assert.Equal(value1, actualValue1); transaction.SetProperty("foo", value2, permanent); var actualValue2 = transaction.GetProperty <string>("foo"); Assert.Equal(value2, actualValue2); transaction.SetProperty("foo", value3, permanent); var actualValue3 = transaction.GetProperty <bool>("foo"); Assert.Equal(value3, actualValue3); transaction.SetProperty("foo", value4, permanent); var actualValue4 = transaction.GetProperty <object>("foo"); Assert.Equal(value4, actualValue4); } }
public void TestGetListProperty(bool permanent) { using (ShimsContext.Create()) { var server = new ShimSMTPServer(); var settings = new StubIReceiveSettings(); var transaction = new SMTPTransaction(server, settings); var list = transaction.GetListProperty <string>("foo", permanent); Assert.NotNull(list); Assert.Empty(list); list.Add("fubar"); list = transaction.GetListProperty <string>("foo", permanent); Assert.NotNull(list); Assert.Contains("fubar", list); transaction.SetProperty("foo", null, permanent); list = transaction.GetListProperty <string>("foo", permanent); Assert.NotNull(list); Assert.Empty(list); } }
public override SMTPResponse DoExecute(SMTPTransaction transaction, string parameters) { if (transaction.GetProperty <bool>("MailInProgress")) { return(new SMTPResponse(SMTPStatusCode.BadSequence)); } var match = FromRegex.Match(parameters); if (!match.Success) { return(new SMTPResponse(SMTPStatusCode.SyntaxError)); } var path = match.Groups[1].Value.Equals("<>") ? MailPath.Empty : MailPath.FromMatch(match); transaction.SetProperty("ReversePath", path); transaction.SetProperty("MailInProgress", true); return(new SMTPResponse(SMTPStatusCode.Okay)); }
public void TestResetProperties() { using (ShimsContext.Create()) { var server = new ShimSMTPServer(); var settings = new StubIReceiveSettings(); var transaction = new SMTPTransaction(server, settings); transaction.SetProperty("foo", "bar", false); transaction.SetProperty("foo2", "baz", true); Assert.True(transaction.HasProperty("foo")); Assert.Equal("bar", transaction.GetProperty <string>("foo")); Assert.True(transaction.HasProperty("foo2")); Assert.Equal("baz", transaction.GetProperty <string>("foo2")); transaction.Reset(); Assert.False(transaction.HasProperty("foo")); Assert.Equal(default(string), transaction.GetProperty <string>("foo")); Assert.True(transaction.HasProperty("foo2")); Assert.Equal("baz", transaction.GetProperty <string>("foo2")); } }
public void TestHasProperty() { using (ShimsContext.Create()) { var server = new ShimSMTPServer(); var settings = new StubIReceiveSettings(); var transaction = new SMTPTransaction(server, settings); Assert.False(transaction.HasProperty("foo")); transaction.SetProperty("foo", 5, false); Assert.True(transaction.HasProperty("foo")); transaction.SetProperty("foo", null, false); Assert.False(transaction.HasProperty("foo")); transaction.SetProperty("foo", 5, true); Assert.True(transaction.HasProperty("foo")); transaction.SetProperty("foo", null, true); Assert.False(transaction.HasProperty("foo")); } }
public void TestOvershadowingProperties() { using (ShimsContext.Create()) { var server = new ShimSMTPServer(); var settings = new StubIReceiveSettings(); var transaction = new SMTPTransaction(server, settings); const string value1 = "bar"; const string value2 = "baz"; transaction.SetProperty("foo", value1, true); Assert.Equal(value1, transaction.GetProperty <string>("foo")); transaction.SetProperty("foo", value2, false); Assert.Equal(value2, transaction.GetProperty <string>("foo")); transaction.SetProperty("foo", null, false); Assert.Equal(value1, transaction.GetProperty <string>("foo")); transaction.SetProperty("foo", null, true); Assert.Equal(default(string), transaction.GetProperty <string>("foo")); } }
public bool ProcessResponse(SMTPTransaction transaction, string response, out string challenge) { if (response == null) { challenge = "Username:"******"Username")) { transaction.SetProperty("Username", response, true); challenge = "Password:"******"Password", response, true); challenge = null; // TODO // var password = response; // var username = transaction.GetProperty<string>("Username"); return(true); }
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)); }
public void Abort(SMTPTransaction transaction) { transaction.SetProperty("Username", null, true); transaction.SetProperty("Password", null, true); }