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(),