using System; using System.Web.Mvc; using System.Web.Security; using MileageTraker.Web.ViewModels.Account; namespace MileageTraker.Web.Controllers { [Authorize] public class AccountController : ControllerBase { [AllowAnonymous] public ActionResult Login(string returnUrl) { ViewBag.ReturnUrl = returnUrl; return View(); } [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public ActionResult Login(LoginViewModel model, string returnUrl) { if (ModelState.IsValid) { var success = Membership.ValidateUser(model.Username, model.Password); if (success) { FormsAuthentication.SetAuthCookie(model.Username, model.RememberMe); TempData["StatusMessage"] = "Logged in as " + model.Username; return RedirectToLocal(returnUrl); } } // If we got this far, something failed, redisplay form ModelState.AddModelError("", "The user name or password provided is incorrect."); return View(model); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult LogOff() { FormsAuthentication.SignOut(); TempData["StatusMessage"] = "Logged off"; return RedirectToAction("Index", "CreateLog"); } //[AllowAnonymous] //public ActionResult Register() //{ // return View(); //} //[HttpPost] //[AllowAnonymous] //[ValidateAntiForgeryToken] //public ActionResult Register(RegisterModel model) //{ // if (ModelState.IsValid) // { // // Attempt to register the user // try // { // WebSecurity.CreateUserAndAccount(model.UserName, model.Password); // WebSecurity.Login(model.UserName, model.Password); // return RedirectToAction("Login"); // } // catch (MembershipCreateUserException e) // { // ModelState.AddModelError("", ErrorCodeToString(e.StatusCode)); // } // } // // If we got this far, something failed, redisplay form // return View(model); //} public ActionResult Manage(ManageMessageId? message) { ViewBag.StatusMessage = message == ManageMessageId.ChangePasswordSuccess ? "Your password has been changed." : message == ManageMessageId.SetPasswordSuccess ? "Your password has been set." : ""; ViewBag.ReturnUrl = Url.Action("Manage"); return View(); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult Manage(ChangePasswordViewModel model) { ViewBag.ReturnUrl = Url.Action("Manage"); if (ModelState.IsValid) { // ChangePassword will throw an exception rather than return false in certain failure scenarios. bool changePasswordSucceeded; try { var currentUser = Membership.GetUser(User.Identity.Name, true); changePasswordSucceeded = currentUser.ChangePassword(model.OldPassword, model.NewPassword); } catch (Exception) { changePasswordSucceeded = false; } if (changePasswordSucceeded) { TempData["StatusMessage"] = ManageMessageId.ChangePasswordSuccess; return RedirectToAction("Manage"); } 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); } private ActionResult RedirectToLocal(string returnUrl) { if (Url.IsLocalUrl(returnUrl)) { return Redirect(returnUrl); } return RedirectToAction("Index", "Log"); } public enum ManageMessageId { ChangePasswordSuccess, SetPasswordSuccess, } } }