password reset workflow changed

This commit is contained in:
vfedosevich 2015-04-30 04:24:15 -07:00
parent 2f1e740d5a
commit 410b15c2c4
36 changed files with 1229 additions and 255 deletions

View file

@ -14,6 +14,7 @@ using WebsitePanel.WebDav.Core.Wsp.Framework;
using WebsitePanel.WebDavPortal.CustomAttributes;
using WebsitePanel.WebDavPortal.Models;
using WebsitePanel.WebDavPortal.Models.Account;
using WebsitePanel.WebDavPortal.Models.Account.Enums;
using WebsitePanel.WebDavPortal.Models.Common;
using WebsitePanel.WebDavPortal.Models.Common.EditorTemplates;
using WebsitePanel.WebDavPortal.Models.Common.Enums;
@ -162,16 +163,16 @@ namespace WebsitePanel.WebDavPortal.Controllers
[HttpGet]
[AllowAnonymous]
public ActionResult PasswordResetEmail()
public ActionResult PasswordResetLogin()
{
var model = new PasswordResetEmailModel();
var model = new PasswordResetLoginModel();
return View(model);
}
[HttpPost]
[AllowAnonymous]
public ActionResult PasswordResetEmail(PasswordResetEmailModel model)
public ActionResult PasswordResetLogin(PasswordResetLoginModel model)
{
if (!ModelState.IsValid)
{
@ -187,17 +188,117 @@ namespace WebsitePanel.WebDavPortal.Controllers
return View(model);
}
WspContext.Services.Organizations.SendResetUserPasswordEmail(exchangeAccount.ItemId, exchangeAccount.AccountId, Resources.Messages.PasswordResetUserReason, exchangeAccount.PrimaryEmailAddress, false);
var tokenEntity = WspContext.Services.Organizations.CreatePasswordResetAccessToken(exchangeAccount.ItemId, exchangeAccount.AccountId);
return View("PasswordResetEmailSent");
return RedirectToRoute(AccountRouteNames.PasswordResetPincodeSendOptions, new {token = tokenEntity.AccessTokenGuid.ToString("N")});
}
[HttpGet]
[AllowAnonymous]
public ActionResult PasswordResetSms(Guid token)
public ActionResult PasswordResetPincodeSendOptions(Guid token)
{
var model = new PasswordResetSmsModel();
var accessToken = WspContext.Services.Organizations.GetPasswordresetAccessToken(token);
if (accessToken == null)
{
AddMessage(MessageType.Error, Resources.Messages.IncorrectPasswordResetUrl);
return RedirectToRoute(AccountRouteNames.PasswordResetLogin);
}
var user = WspContext.Services.Organizations.GetUserGeneralSettings(accessToken.ItemId, accessToken.AccountId);
if (string.IsNullOrEmpty(user.MobilePhone))
{
var result = WspContext.Services.Organizations.SendResetUserPasswordPincodeEmail(accessToken.AccessTokenGuid, user.PrimaryEmailAddress);
if (result.IsSuccess)
{
AddMessage(MessageType.Success, Resources.Messages.PincodeEmailWasSent);
}
else
{
AddMessage(MessageType.Error, Resources.Messages.PincodeEmailWasNotSent);
}
return RedirectToRoute(AccountRouteNames.PasswordResetPincode);
}
var model = new PasswordResetPincodeSendOptionsModel();
model.MobileNumber = user.MobilePhone;
model.Email = user.PrimaryEmailAddress;
return View(model);
}
[HttpPost]
[AllowAnonymous]
public ActionResult PasswordResetPincodeSendOptions(Guid token, PasswordResetPincodeSendOptionsModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
var accessToken = WspContext.Services.Organizations.GetPasswordresetAccessToken(token);
if (accessToken == null)
{
AddMessage(MessageType.Error, Resources.Messages.IncorrectPasswordResetUrl);
return RedirectToRoute(AccountRouteNames.PasswordResetLogin);
}
var user = WspContext.Services.Organizations.GetUserGeneralSettings(accessToken.ItemId, accessToken.AccountId);
switch (model.Method)
{
case PincodeSendMethod.Mobile:
{
var result = WspContext.Services.Organizations.SendResetUserPasswordPincodeSms(accessToken.AccessTokenGuid, user.MobilePhone);
if (result.IsSuccess)
{
AddMessage(MessageType.Success, Resources.Messages.SmsWasSent);
}
else
{
AddMessage(MessageType.Error, Resources.Messages.SmsWasNotSent);
return RedirectToRoute(AccountRouteNames.PasswordResetPincodeSendOptions);
}
break;
}
case PincodeSendMethod.Email:
{
var result = WspContext.Services.Organizations.SendResetUserPasswordPincodeEmail(accessToken.AccessTokenGuid, user.PrimaryEmailAddress);
if (result.IsSuccess)
{
AddMessage(MessageType.Success, Resources.Messages.PincodeEmailWasSent);
}
else
{
AddMessage(MessageType.Error, Resources.Messages.PincodeEmailWasNotSent);
return RedirectToRoute(AccountRouteNames.PasswordResetPincodeSendOptions);
}
break;
}
}
return RedirectToRoute(AccountRouteNames.PasswordResetPincode);
}
[HttpGet]
[AllowAnonymous]
public ActionResult PasswordResetPincode(Guid token)
{
var model = new PasswordResetPincodeModel();
var accessToken = WspContext.Services.Organizations.GetPasswordresetAccessToken(token);
@ -207,25 +308,13 @@ namespace WebsitePanel.WebDavPortal.Controllers
{
AddMessage(MessageType.Error, Resources.Messages.IncorrectPasswordResetUrl);
return View(model);
return RedirectToRoute(AccountRouteNames.PasswordResetLogin);
}
if (accessToken != null && accessToken.IsSmsSent == false)
{
var user = WspContext.Services.Organizations.GetUserGeneralSettings(accessToken.ItemId,
accessToken.AccountId);
var result = WspContext.Services.Organizations.SendResetUserPasswordPincodeSms(token, user.MobilePhone);
if (result.IsSuccess)
{
AddMessage(MessageType.Success, Resources.Messages.SmsWasSent);
}
else
{
AddMessage(MessageType.Error, Resources.Messages.SmsWasNotSent);
}
return RedirectToRoute(AccountRouteNames.PasswordResetPincodeSendOptions);
}
return View(model);
@ -233,7 +322,7 @@ namespace WebsitePanel.WebDavPortal.Controllers
[HttpPost]
[AllowAnonymous]
public ActionResult PasswordResetSms(Guid token, PasswordResetSmsModel model)
public ActionResult PasswordResetPincode(Guid token, PasswordResetPincodeModel model)
{
if (!ModelState.IsValid)
{
@ -313,35 +402,6 @@ namespace WebsitePanel.WebDavPortal.Controllers
return View();
}
[HttpGet]
[AllowAnonymous]
public ActionResult PasswordResetSendSms(Guid token)
{
var accessToken = WspContext.Services.Organizations.GetPasswordresetAccessToken(token);
if (accessToken == null)
{
return RedirectToRoute(AccountRouteNames.PasswordResetSms);
}
var user = WspContext.Services.Organizations.GetUserGeneralSettings(accessToken.ItemId,
accessToken.AccountId);
var result = WspContext.Services.Organizations.SendResetUserPasswordPincodeSms(accessToken.AccessTokenGuid,
user.MobilePhone);
if (result.IsSuccess)
{
AddMessage(MessageType.Success, Resources.Messages.SmsWasSent);
}
else
{
AddMessage(MessageType.Error, Resources.Messages.SmsWasNotSent);
}
return RedirectToRoute(AccountRouteNames.PasswordResetSms);
}
#region Helpers
/// <summary>
@ -362,7 +422,7 @@ namespace WebsitePanel.WebDavPortal.Controllers
{
AddMessage(MessageType.Error, Resources.Messages.IncorrectSmsResponse);
return RedirectToRoute(AccountRouteNames.PasswordResetSms);
return RedirectToRoute(AccountRouteNames.PasswordResetPincode); //todo
}
var tokenEntity = WspContext.Services.Organizations.GetPasswordresetAccessToken(token);