/MvcMusicStore/Controllers/AccountController.cs
C# | 207 lines | 194 code | 8 blank | 5 comment | 8 complexity | cec1f3593e69f5d99ae78dda4240b5e0 MD5 | raw file
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Mvc;
- using System.Web.Routing;
- using System.Web.Security;
- using Mvc3ToolsUpdateWeb_Default.Models;
- using MvcMusicStore.Models;
-
- namespace Mvc3ToolsUpdateWeb_Default.Controllers
- {
- public class AccountController : Controller
- {
-
- 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;
- }
-
- //
- // GET: /Account/LogOn
-
- public ActionResult LogOn()
- {
- return View();
- }
-
- //
- // POST: /Account/LogOn
-
- [HttpPost]
- public ActionResult LogOn(LogOnModel model, string returnUrl)
- {
- if (ModelState.IsValid)
- {
- if (Membership.ValidateUser(model.UserName, model.Password))
- {
- MigrateShoppingCart(model.UserName);
-
- FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
- if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
- && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
- {
- 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);
- }
-
- //
- // GET: /Account/LogOff
-
- public ActionResult LogOff()
- {
- FormsAuthentication.SignOut();
-
- return RedirectToAction("Index", "Home");
- }
-
- //
- // GET: /Account/Register
-
- public ActionResult Register()
- {
- return View();
- }
-
- //
- // POST: /Account/Register
-
- [HttpPost]
- public ActionResult Register(RegisterModel model)
- {
- if (ModelState.IsValid)
- {
- // Attempt to register the user
- MembershipCreateStatus createStatus;
- Membership.CreateUser(model.UserName, model.Password, model.Email, "question", "answer", true, null, out createStatus);
-
- if (createStatus == MembershipCreateStatus.Success)
- {
- MigrateShoppingCart(model.UserName);
-
- FormsAuthentication.SetAuthCookie(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);
- }
-
- //
- // GET: /Account/ChangePassword
-
- [Authorize]
- public ActionResult ChangePassword()
- {
- return View();
- }
-
- //
- // POST: /Account/ChangePassword
-
- [Authorize]
- [HttpPost]
- public ActionResult ChangePassword(ChangePasswordModel model)
- {
- if (ModelState.IsValid)
- {
-
- // ChangePassword will throw an exception rather
- // than return false in certain failure scenarios.
- bool changePasswordSucceeded;
- try
- {
- MembershipUser currentUser = Membership.GetUser(User.Identity.Name, true /* userIsOnline */);
- changePasswordSucceeded = currentUser.ChangePassword(model.OldPassword, model.NewPassword);
- }
- catch (Exception)
- {
- changePasswordSucceeded = false;
- }
-
- if (changePasswordSucceeded)
- {
- 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);
- }
-
- //
- // GET: /Account/ChangePasswordSuccess
-
- public ActionResult ChangePasswordSuccess()
- {
- return View();
- }
-
- #region Status Codes
- 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 "User name already exists. Please enter a different user name.";
-
- case MembershipCreateStatus.DuplicateEmail:
- return "A user name 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.";
- }
- }
- #endregion
- }
- }