diff --git a/src/Umbraco.Web/Controllers/UmbLoginStatusController.cs b/src/Umbraco.Web/Controllers/UmbLoginStatusController.cs index 76a2816239..fb71c6ef14 100644 --- a/src/Umbraco.Web/Controllers/UmbLoginStatusController.cs +++ b/src/Umbraco.Web/Controllers/UmbLoginStatusController.cs @@ -1,34 +1,37 @@ using System.Linq; using System.Web.Mvc; +using System.Web.Security; using umbraco.cms.businesslogic.member; using Umbraco.Web.Models; using Umbraco.Web.Mvc; +using Umbraco.Core; namespace Umbraco.Web.Controllers { public class UmbLoginStatusController : SurfaceController { [HttpPost] - public ActionResult HandleLogout([Bind(Prefix = "loginStatusModel")]LoginStatusModel model) + public ActionResult HandleLogout([Bind(Prefix = "logoutModel")]PostRedirectModel model) { - // TODO: Use new Member API - if (ModelState.IsValid) + if (ModelState.IsValid == false) { - if (Member.IsLoggedOn()) - { - var member = Member.GetCurrentMember(); - if (member != null) - { - var memberId = member.Id; - Member.RemoveMemberFromCache(memberId); - Member.ClearMemberFromClient(memberId); - } - } - - return Redirect("/"); + return CurrentUmbracoPage(); } - return CurrentUmbracoPage(); + if (Members.IsLoggedIn()) + { + FormsAuthentication.SignOut(); + } + + //if there is a specified path to redirect to then use it + if (model.RedirectUrl.IsNullOrWhiteSpace() == false) + { + return Redirect(model.RedirectUrl); + } + + //redirect to current page by default + TempData.Add("LogoutSuccess", true); + return RedirectToCurrentUmbracoPage(); } } } diff --git a/src/Umbraco.Web/Controllers/UmbProfileController.cs b/src/Umbraco.Web/Controllers/UmbProfileController.cs index 23f16748ad..701e34ea23 100644 --- a/src/Umbraco.Web/Controllers/UmbProfileController.cs +++ b/src/Umbraco.Web/Controllers/UmbProfileController.cs @@ -1,50 +1,48 @@ -using System.Linq; +using System; +using System.Linq; using System.Web.Mvc; +using System.Web.Security; using System.Xml; using umbraco.cms.businesslogic.member; using Umbraco.Web.Models; using Umbraco.Web.Mvc; +using Umbraco.Core.Security; +using Umbraco.Core; namespace Umbraco.Web.Controllers { public class UmbProfileController : SurfaceController { [HttpPost] - public ActionResult HandleUpdateProfile([Bind(Prefix="profileModel")]ProfileModel model) + public ActionResult HandleUpdateProfile([Bind(Prefix = "profileModel")] ProfileModel model) { - //TODO: Use new Member API - if (ModelState.IsValid) + if (Membership.Provider.IsUmbracoMembershipProvider() == false) { - var member = Member.GetCurrentMember(); - if (member != null) - { - if (model.Name != null) - { - member.Text = model.Name; - } - - member.Email = model.Email; - member.LoginName = model.Email; - - if (model.MemberProperties != null) - { - foreach (var property in model.MemberProperties.Where(p => p.Value != null)) - { - member.getProperty(property.Alias).Value = property.Value; - } - } - - member.Save(); - - member.XmlGenerate(new XmlDocument()); - - Member.AddMemberToCache(member); - - Response.Redirect("/"); - } + throw new NotSupportedException("Profile editing with the " + typeof(UmbProfileController) + " is not supported when not using the default Umbraco membership provider"); } - return CurrentUmbracoPage(); + if (ModelState.IsValid == false) + { + return CurrentUmbracoPage(); + } + + var updateAttempt = Members.UpdateMemberProfile(model); + if (updateAttempt.Success == false) + { + //don't add a field level error, just model level + ModelState.AddModelError("profileModel", updateAttempt.Exception.Message); + return CurrentUmbracoPage(); + } + + //if there is a specified path to redirect to then use it + if (model.RedirectUrl.IsNullOrWhiteSpace() == false) + { + return Redirect(model.RedirectUrl); + } + + //redirect to current page by default + TempData.Add("ProfileUpdateSuccess", true); + return RedirectToCurrentUmbracoPage(); } } } diff --git a/src/Umbraco.Web/Controllers/UmbRegisterController.cs b/src/Umbraco.Web/Controllers/UmbRegisterController.cs index 0deeca609d..d876df7f6e 100644 --- a/src/Umbraco.Web/Controllers/UmbRegisterController.cs +++ b/src/Umbraco.Web/Controllers/UmbRegisterController.cs @@ -1,7 +1,11 @@ -using System.Linq; +using System; +using System.Linq; using System.Web.Mvc; +using System.Web.Security; using umbraco.BusinessLogic; using umbraco.cms.businesslogic.member; +using Umbraco.Core; +using Umbraco.Core.Security; using Umbraco.Web.Models; using Umbraco.Web.Mvc; @@ -12,73 +16,63 @@ namespace Umbraco.Web.Controllers [HttpPost] public ActionResult HandleRegisterMember([Bind(Prefix = "registerModel")]RegisterModel model) { - //TODO: Use new Member API and use the MemberShipProvider variables for validating password strength etc - if (ModelState.IsValid) + if (ModelState.IsValid == false) { - model.Username = (model.UsernameIsEmail || model.Username == null) ? model.Email : model.Username; + return CurrentUmbracoPage(); + } - var member = Member.GetMemberFromLoginName(model.Username); - if (member != null) - { - ModelState.AddModelError((model.UsernameIsEmail || model.Username == null) - ? "registerModel.Email" - : "registerModel.Username", - "A member with this username already exists."); + MembershipCreateStatus status; + var member = Members.RegisterMember(model, out status, model.LoginOnSuccess); - return CurrentUmbracoPage(); - } - - member = Member.GetMemberFromEmail(model.Email); - if (member != null) - { - ModelState.AddModelError("registerModel.Email", "A member with this e-mail address already exists."); - - return CurrentUmbracoPage(); - } - - member = CreateNewMember(model); - - // Log member in - Member.AddMemberToCache(member); - - if (model.RedirectOnSucces) - { - return Redirect(model.RedirectUrl); - } - - TempData.Add("FormSuccess", true); - return RedirectToCurrentUmbracoPage(); + switch (status) + { + case MembershipCreateStatus.Success: + //if there is a specified path to redirect to then use it + if (model.RedirectUrl.IsNullOrWhiteSpace() == false) + { + return Redirect(model.RedirectUrl); + } + //redirect to current page by default + TempData.Add("FormSuccess", true); + return RedirectToCurrentUmbracoPage(); + case MembershipCreateStatus.InvalidUserName: + ModelState.AddModelError((model.UsernameIsEmail || model.Username == null) + ? "registerModel.Email" + : "registerModel.Username", + "Username is not valid"); + break; + case MembershipCreateStatus.InvalidPassword: + ModelState.AddModelError("registerModel.Password", "The password is not strong enough"); + break; + case MembershipCreateStatus.InvalidQuestion: + case MembershipCreateStatus.InvalidAnswer: + //TODO: Support q/a http://issues.umbraco.org/issue/U4-3213 + throw new NotImplementedException(status.ToString()); + case MembershipCreateStatus.InvalidEmail: + ModelState.AddModelError("registerModel.Email", "Email is invalid"); + break; + case MembershipCreateStatus.DuplicateUserName: + ModelState.AddModelError((model.UsernameIsEmail || model.Username == null) + ? "registerModel.Email" + : "registerModel.Username", + "A member with this username already exists."); + break; + case MembershipCreateStatus.DuplicateEmail: + ModelState.AddModelError("registerModel.Email", "A member with this e-mail address already exists"); + break; + case MembershipCreateStatus.UserRejected: + case MembershipCreateStatus.InvalidProviderUserKey: + case MembershipCreateStatus.DuplicateProviderUserKey: + case MembershipCreateStatus.ProviderError: + //don't add a field level error, just model level + ModelState.AddModelError("registerModel", "An error occurred creating the member: " + status); + break; + default: + throw new ArgumentOutOfRangeException(); } return CurrentUmbracoPage(); } - private static Member CreateNewMember(RegisterModel model) - { - var user = new User(0); - - var mt = MemberType.GetByAlias(model.MemberTypeAlias) ?? MemberType.MakeNew(user, model.MemberTypeAlias); - - var member = Member.MakeNew(model.Username, mt, user); - - if (model.Name != null) - { - member.Text = model.Name; - } - - member.Email = model.Email; - member.Password = model.Password; - - if (model.MemberProperties != null) - { - foreach (var property in model.MemberProperties.Where(p => p.Value != null)) - { - member.getProperty(property.Alias).Value = property.Value; - } - } - - member.Save(); - return member; - } } }