From 56befec173f185abd33b8d8988a4cab65f370825 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Tue, 28 Feb 2012 15:54:10 -0800 Subject: [PATCH] #18425: Fixing challenge email again Work Item: 18425 --HG-- branch : 1.x --- .../Controllers/AccountController.cs | 4 +--- .../Controllers/AdminController.cs | 8 ++++++- .../Mvc/Extensions/UrlHelperExtensions.cs | 24 ++++++++++++++++--- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs b/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs index 7c38ff08b..eedb62403 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs +++ b/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs @@ -150,9 +150,7 @@ namespace Orchard.Users.Controllers { siteUrl = HttpContext.Request.ToRootUrlString(); } - siteUrl = siteUrl.TrimEnd('/'); - - _userService.SendChallengeEmail(user.As(), nonce => siteUrl + "/" + Url.Action("ChallengeEmail", "Account", new {Area = "Orchard.Users", nonce = nonce}).TrimStart('/') ); + _userService.SendChallengeEmail(user.As(), nonce => Url.MakeAbsolute(Url.Action("ChallengeEmail", "Account", new {Area = "Orchard.Users", nonce = nonce}), siteUrl)); foreach (var userEventHandler in _userEventHandlers) { userEventHandler.SentChallengeEmail(user); diff --git a/src/Orchard.Web/Modules/Orchard.Users/Controllers/AdminController.cs b/src/Orchard.Web/Modules/Orchard.Users/Controllers/AdminController.cs index 395d29524..ee44766a4 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Controllers/AdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.Users/Controllers/AdminController.cs @@ -18,6 +18,7 @@ using Orchard.Mvc.Extensions; using System; using Orchard.Settings; using Orchard.UI.Navigation; +using Orchard.Utility.Extensions; namespace Orchard.Users.Controllers { [ValidateInput(false)] @@ -297,7 +298,12 @@ namespace Orchard.Users.Controllers { var user = Services.ContentManager.Get(id); if ( user != null ) { - _userService.SendChallengeEmail(user.As(), nonce => Url.AbsoluteAction(() => Url.Action("ChallengeEmail", "Account", new {Area = "Orchard.Users", nonce = nonce}))); + var siteUrl = Services.WorkContext.CurrentSite.As().BaseUrl; + if (String.IsNullOrWhiteSpace(siteUrl)) { + siteUrl = HttpContext.Request.ToRootUrlString(); + } + + _userService.SendChallengeEmail(user.As(), nonce => Url.MakeAbsolute(Url.Action("ChallengeEmail", "Account", new { Area = "Orchard.Users", nonce = nonce }), siteUrl)); Services.Notifier.Information(T("Challenge email sent to {0}", user.UserName)); } diff --git a/src/Orchard/Mvc/Extensions/UrlHelperExtensions.cs b/src/Orchard/Mvc/Extensions/UrlHelperExtensions.cs index 27fc1a04b..8c41e1688 100644 --- a/src/Orchard/Mvc/Extensions/UrlHelperExtensions.cs +++ b/src/Orchard/Mvc/Extensions/UrlHelperExtensions.cs @@ -24,9 +24,27 @@ namespace Orchard.Mvc.Extensions { return urlHelper.MakeAbsolute(urlHelper.Action(actionName, controller, routeValues)); } - public static string MakeAbsolute(this UrlHelper urlHelper, string url) { - var siteUrl = urlHelper.RequestContext.HttpContext.Request.ToRootUrlString(); - return siteUrl + url; + public static string MakeAbsolute(this UrlHelper urlHelper, string url, string baseUrl = null) { + if(String.IsNullOrEmpty(baseUrl)) { + baseUrl = urlHelper.RequestContext.HttpContext.Request.ToRootUrlString(); + } + + // remove any application path from the base url + var applicationPath = urlHelper.RequestContext.HttpContext.Request.ApplicationPath; + + // orchardlocal/foo/bar => /orchardlocal/foo/bar + if(!url.StartsWith("/")) { + url = "/" + url; + } + // /orchardlocal/foo/bar => foo/bar + if (url.StartsWith(applicationPath)) { + url = url.Substring(applicationPath.Length); + } + + baseUrl = baseUrl.TrimEnd('/'); + url = url.TrimStart('/'); + + return baseUrl + "/" + url; } } }