/MVCContent/Source/jQuery/Demo 1/Begin/MvcMusicStore/Controllers/AccountController.cs
C# | 234 lines | 169 code | 39 blank | 26 comment | 10 complexity | 5a20124a1811876af4d509dd0b51c31b MD5 | raw file
Possible License(s): Apache-2.0, CC-BY-SA-3.0
- // ----------------------------------------------------------------------------------
- // Microsoft Developer & Platform Evangelism
- //
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //
- // THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
- // EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES
- // OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
- // ----------------------------------------------------------------------------------
- // The example companies, organizations, products, domain names,
- // e-mail addresses, logos, people, places, and events depicted
- // herein are fictitious. No association with any real company,
- // organization, product, domain name, email address, logo, person,
- // places, or events is intended or should be inferred.
- // ----------------------------------------------------------------------------------
-
- using System;
- using System.Collections.Generic;
- using System.Diagnostics.CodeAnalysis;
- using System.Linq;
- using System.Security.Principal;
- using System.Web;
- using System.Web.Mvc;
- using System.Web.Routing;
- using System.Web.Security;
- using MvcMusicStore.Models;
-
- namespace MvcMusicStore.Controllers
- {
-
- [HandleError]
- public class AccountController : Controller
- {
-
- // This constructor is used by the MVC framework to instantiate the controller using
- // the default forms authentication and membership providers.
- public AccountController()
- : this(null, null)
- {
- }
-
- // This constructor is not used by the MVC framework but is instead provided for ease
- // of unit testing this type. See the comments in AccountModels.cs for more information.
- public AccountController(IFormsAuthenticationService formsService, IMembershipService membershipService)
- {
- FormsService = formsService ?? new FormsAuthenticationService();
- MembershipService = membershipService ?? new AccountMembershipService();
- }
-
- public IFormsAuthenticationService FormsService
- {
- get;
- private set;
- }
-
- public IMembershipService MembershipService
- {
- get;
- private set;
- }
-
- protected override void Initialize(RequestContext requestContext)
- {
- if (requestContext.HttpContext.User.Identity is WindowsIdentity)
- {
- throw new InvalidOperationException("Windows authentication is not supported.");
- }
- else
- {
- base.Initialize(requestContext);
- }
- }
-
- protected override void OnActionExecuting(ActionExecutingContext filterContext)
- {
- ViewData["PasswordLength"] = MembershipService.MinPasswordLength;
-
- base.OnActionExecuting(filterContext);
- }
-
- [Authorize]
- public ActionResult ChangePassword()
- {
- return View();
- }
-
- [Authorize]
- [HttpPost]
- public ActionResult ChangePassword(ChangePasswordModel model)
- {
- if (ModelState.IsValid)
- {
- if (MembershipService.ChangePassword(User.Identity.Name, model.OldPassword, model.NewPassword))
- {
- return RedirectToAction("ChangePasswordSuccess");
- }
- else
- {
- ModelState.AddModelError("", "The current password is incorrect or the new password is invalid.");
- }
- }
-
- // If we got this far, something failed, redisplay form
- return View(model);
- }
-
- public ActionResult ChangePasswordSuccess()
- {
- return View();
- }
-
- public ActionResult LogOff()
- {
- FormsService.SignOut();
-
- return RedirectToAction("Index", "Home");
- }
-
- public ActionResult LogOn()
- {
- return View();
- }
-
- [HttpPost]
- [SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings",
- Justification = "Needs to take same parameter type as Controller.Redirect()")]
- public ActionResult LogOn(LogOnModel model, string returnUrl)
- {
- if (ModelState.IsValid)
- {
- if (MembershipService.ValidateUser(model.UserName, model.Password))
- {
- MigrateShoppingCart(model.UserName);
-
- FormsService.SignIn(model.UserName, model.RememberMe);
-
- if (!String.IsNullOrEmpty(returnUrl))
- {
- return Redirect(returnUrl);
- }
- else
- {
- return RedirectToAction("Index", "Home");
- }
- }
- else
- {
- ModelState.AddModelError("", "The user name or password provided is incorrect.");
- }
- }
-
- // If we got this far, something failed, redisplay form
- return View(model);
- }
-
- private void MigrateShoppingCart(string UserName)
- {
- // Associate shopping cart items with logged-in user
- var cart = ShoppingCart.GetCart(this.HttpContext);
-
- cart.MigrateCart(UserName);
- Session[ShoppingCart.CartSessionKey] = UserName;
- }
-
- public ActionResult Register()
- {
- return View();
- }
-
- [HttpPost]
- public ActionResult Register(RegisterModel model)
- {
- if (ModelState.IsValid)
- {
- // Attempt to register the user
- MembershipCreateStatus createStatus = MembershipService.CreateUser(model.UserName, model.Password, model.Email);
-
- if (createStatus == MembershipCreateStatus.Success)
- {
- MigrateShoppingCart(model.UserName);
-
- FormsService.SignIn(model.UserName, false /* createPersistentCookie */);
- return RedirectToAction("Index", "Home");
- }
- else
- {
- ModelState.AddModelError("", ErrorCodeToString(createStatus));
- }
- }
-
- // If we got this far, something failed, redisplay form
- return View(model);
- }
-
- private static string ErrorCodeToString(MembershipCreateStatus createStatus)
- {
- // See http://go.microsoft.com/fwlink/?LinkID=177550 for
- // a full list of status codes.
- switch (createStatus)
- {
- case MembershipCreateStatus.DuplicateUserName:
- return "Username already exists. Please enter a different user name.";
-
- case MembershipCreateStatus.DuplicateEmail:
- return "A username for that e-mail address already exists. Please enter a different e-mail address.";
-
- case MembershipCreateStatus.InvalidPassword:
- return "The password provided is invalid. Please enter a valid password value.";
-
- case MembershipCreateStatus.InvalidEmail:
- return "The e-mail address provided is invalid. Please check the value and try again.";
-
- case MembershipCreateStatus.InvalidAnswer:
- return "The password retrieval answer provided is invalid. Please check the value and try again.";
-
- case MembershipCreateStatus.InvalidQuestion:
- return "The password retrieval question provided is invalid. Please check the value and try again.";
-
- case MembershipCreateStatus.InvalidUserName:
- return "The user name provided is invalid. Please check the value and try again.";
-
- case MembershipCreateStatus.ProviderError:
- return "The authentication provider returned an error. Please verify your entry and try again. If the problem persists, please contact your system administrator.";
-
- case MembershipCreateStatus.UserRejected:
- return "The user creation request has been canceled. Please verify your entry and try again. If the problem persists, please contact your system administrator.";
-
- default:
- return "An unknown error occurred. Please verify your entry and try again. If the problem persists, please contact your system administrator.";
- }
- }
-
- }
- }