From de1f86c7a1e67f9adde1d1e0b2e75bb174577bd4 Mon Sep 17 00:00:00 2001 From: Shannon Date: Tue, 28 Jan 2014 16:30:58 +1100 Subject: [PATCH] adds logic to the membership helper to create a new LoginStatusModel with the values filled in, obsoletes the empty ctor on LoginStatusModel since that does some biz logic lookups, instead replaces it with a static method to create an empty one. --- src/Umbraco.Web/Models/LoginStatusModel.cs | 50 +++++++++++++------ src/Umbraco.Web/Security/MembershipHelper.cs | 36 +++++++++++++ .../umbraco/members/EditMember.aspx.cs | 3 +- .../umbraco/users/EditUser.aspx.cs | 2 +- 4 files changed, 75 insertions(+), 16 deletions(-) diff --git a/src/Umbraco.Web/Models/LoginStatusModel.cs b/src/Umbraco.Web/Models/LoginStatusModel.cs index 7c1dd8b359..973630b7f7 100644 --- a/src/Umbraco.Web/Models/LoginStatusModel.cs +++ b/src/Umbraco.Web/Models/LoginStatusModel.cs @@ -1,29 +1,51 @@ -using System.Web; -using umbraco.cms.businesslogic.member; +using System; +using System.Web; using Umbraco.Core; +using Umbraco.Web.Security; namespace Umbraco.Web.Models { + /// + /// The model + /// public class LoginStatusModel { - public LoginStatusModel() + /// + /// Creates a new empty LoginStatusModel + /// + /// + public static LoginStatusModel CreateModel() { - if (HttpContext.Current != null - && HttpContext.Current.User != null - && HttpContext.Current.User.Identity.IsAuthenticated) + var model = new LoginStatusModel(false); + return model; + } + + private LoginStatusModel(bool doLookup) + { + if (doLookup && HttpContext.Current != null && ApplicationContext.Current != null) { - var member = ApplicationContext.Current.Services.MemberService.GetByUsername( - HttpContext.Current.User.Identity.Name); - if (member != null) + var helper = new MembershipHelper(ApplicationContext.Current, new HttpContextWrapper(HttpContext.Current)); + var model = helper.GetLoginStatusModel(); + if (model != null) { - this.Name = member.Name; - this.Username = member.Username; - this.Email = member.Email; - this.IsLoggedIn = true; - } + Name = model.Name; + Username = model.Username; + Email = model.Email; + IsLoggedIn = true; + } } } + /// + /// This will construct a new LoginStatusModel and perform a lookup for hte curently logged in member + /// + [Obsolete("Do not use this ctor as it will perform business logic lookups. Use the MembershipHelper.GetLoginStatusModel or the static LoginStatusModel.CreateModel() to create an empty model.")] + public LoginStatusModel() + : this(true) + { + + } + public string Name { get; set; } public string Username { get; set; } public string Email { get; set; } diff --git a/src/Umbraco.Web/Security/MembershipHelper.cs b/src/Umbraco.Web/Security/MembershipHelper.cs index c43ef623a5..0d958e0626 100644 --- a/src/Umbraco.Web/Security/MembershipHelper.cs +++ b/src/Umbraco.Web/Security/MembershipHelper.cs @@ -2,12 +2,48 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Web; using System.Web.Security; +using Umbraco.Core; +using Umbraco.Web.Models; namespace Umbraco.Web.Security { internal class MembershipHelper { + private readonly ApplicationContext _applicationContext; + private readonly HttpContextBase _httpContext; + + public MembershipHelper(ApplicationContext applicationContext, HttpContextBase httpContext) + { + if (applicationContext == null) throw new ArgumentNullException("applicationContext"); + if (httpContext == null) throw new ArgumentNullException("httpContext"); + _applicationContext = applicationContext; + _httpContext = httpContext; + } + + public MembershipHelper(UmbracoContext umbracoContext) + { + if (umbracoContext == null) throw new ArgumentNullException("umbracoContext"); + _httpContext = umbracoContext.HttpContext; + _applicationContext = umbracoContext.Application; + } + + public LoginStatusModel GetLoginStatusModel() + { + if (_httpContext.User == null || _httpContext.User.Identity.IsAuthenticated == false) + return null; + + var member = _applicationContext.Services.MemberService.GetByUsername( + _httpContext.User.Identity.Name); + + var model = LoginStatusModel.CreateModel(); + model.Name = member.Name; + model.Username = member.Username; + model.Email = member.Email; + model.IsLoggedIn = true; + return model; + } public MembershipUser UpdateMember(MembershipUser member, MembershipProvider provider, string email = null, diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/members/EditMember.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/members/EditMember.aspx.cs index 39bfafd546..9fb012f9ca 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/members/EditMember.aspx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/members/EditMember.aspx.cs @@ -1,5 +1,6 @@ using System; using System.Configuration.Provider; +using System.Web; using System.Web.UI; using System.Web.UI.Design.WebControls; using System.Web.UI.HtmlControls; @@ -242,7 +243,7 @@ namespace umbraco.cms.presentation.members private void UpdateMembershipProvider(MembershipUser membershipUser) { - var membershipHelper = new MembershipHelper(); + var membershipHelper = new MembershipHelper(ApplicationContext, new HttpContextWrapper(Context)); //set the writable properties that we are editing membershipHelper.UpdateMember(membershipUser, Membership.Provider, MemberEmail.Text.Trim()); } diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/users/EditUser.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/users/EditUser.aspx.cs index f8e2719e84..50d4a5d8dd 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/users/EditUser.aspx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/users/EditUser.aspx.cs @@ -589,7 +589,7 @@ namespace umbraco.cms.presentation.user // update when the AD provider is active. if ((BackOfficeProvider is ActiveDirectoryMembershipProvider) == false) { - var membershipHelper = new MembershipHelper(); + var membershipHelper = new MembershipHelper(ApplicationContext, new HttpContextWrapper(Context)); //set the writable properties that we are editing membershipHelper.UpdateMember(membershipUser, BackOfficeProvider, email.Text.Trim(),