From 98f264a5e7290f3479cd87dac86fbff1aec475c4 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Thu, 1 Mar 2012 16:36:12 -0800 Subject: [PATCH] #18507: Allowing an invalid email password to be resetted Work Item: 18507 --HG-- branch : 1.x --- .../Handlers/SmtpSettingsPartHandler.cs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/Orchard.Web/Modules/Orchard.Email/Handlers/SmtpSettingsPartHandler.cs b/src/Orchard.Web/Modules/Orchard.Email/Handlers/SmtpSettingsPartHandler.cs index b4971703e..ba8d6e662 100644 --- a/src/Orchard.Web/Modules/Orchard.Email/Handlers/SmtpSettingsPartHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Email/Handlers/SmtpSettingsPartHandler.cs @@ -6,6 +6,7 @@ using Orchard.Email.Models; using Orchard.Data; using Orchard.ContentManagement.Handlers; using Orchard.Localization; +using Orchard.Logging; using Orchard.Security; namespace Orchard.Email.Handlers { @@ -15,6 +16,8 @@ namespace Orchard.Email.Handlers { public SmtpSettingsPartHandler(IRepository repository, IEncryptionService encryptionService) { T = NullLocalizer.Instance; + Logger = NullLogger.Instance; + _encryptionService = encryptionService; Filters.Add(new ActivatingFilter("Site")); Filters.Add(StorageFilter.For(repository)); @@ -22,8 +25,19 @@ namespace Orchard.Email.Handlers { OnLoaded(LazyLoadHandlers); } + public ILogger Logger { get; set; } + void LazyLoadHandlers(LoadContentContext context, SmtpSettingsPart part) { - part.PasswordField.Getter(() => String.IsNullOrWhiteSpace(part.Record.Password) ? String.Empty : Encoding.UTF8.GetString(_encryptionService.Decode(Convert.FromBase64String(part.Record.Password)))); + part.PasswordField.Getter(() => { + try { + return String.IsNullOrWhiteSpace(part.Record.Password) ? String.Empty : Encoding.UTF8.GetString(_encryptionService.Decode(Convert.FromBase64String(part.Record.Password))); + } + catch { + Logger.Error("The email password could not be decrypted. It might be corrupted, try to reset it."); + return null; + } + }); + part.PasswordField.Setter(value => part.Record.Password = String.IsNullOrWhiteSpace(value) ? String.Empty : Convert.ToBase64String(_encryptionService.Encode(Encoding.UTF8.GetBytes(value)))); }