137 lines
3.4 KiB
C#
137 lines
3.4 KiB
C#
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,
|
|
}
|
|
}
|
|
}
|