using System; using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp.Auditing; using Volo.Abp.Identity; using Volo.Abp.MultiTenancy; using Volo.Abp.Validation; namespace Volo.Abp.Account.Web.Pages.Account { //TODO: Implement live password complexity check on the razor view! public class ResetPasswordModel : AccountPageModel { [HiddenInput] [BindProperty(SupportsGet = true)] public Guid? TenantId { get; set; } [Required] [HiddenInput] [BindProperty(SupportsGet = true)] public Guid UserId { get; set; } [Required] [HiddenInput] [BindProperty(SupportsGet = true)] public string ResetToken { get; set; } [HiddenInput] [BindProperty(SupportsGet = true)] public string ReturnUrl { get; set; } [HiddenInput] [BindProperty(SupportsGet = true)] public string ReturnUrlHash { get; set; } [Required] [BindProperty] [DataType(DataType.Password)] [DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxPasswordLength))] [DisableAuditing] public string Password { get; set; } [Required] [BindProperty] [DataType(DataType.Password)] [DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxPasswordLength))] [DisableAuditing] public string ConfirmPassword { get; set; } protected virtual ITenantResolveResultAccessor TenantResolveResultAccessor { get; } public ResetPasswordModel(ITenantResolveResultAccessor tenantResolveResultAccessor) { TenantResolveResultAccessor = tenantResolveResultAccessor; } public virtual Task OnGetAsync() { //TODO: It would be good to try to switch tenant if needed CheckCurrentTenant(TenantId); return Task.FromResult(Page()); } public virtual async Task OnPostAsync() { ValidateModel(); try { await AccountAppService.ResetPasswordAsync( new ResetPasswordDto { UserId = UserId, ResetToken = ResetToken, Password = Password } ); } catch (AbpIdentityResultException e) { if (!string.IsNullOrWhiteSpace(e.Message)) { Alerts.Warning(GetLocalizeExceptionMessage(e)); return Page(); } throw; } //TODO: Try to automatically login! return RedirectToPage("./ResetPasswordConfirmation", new { returnUrl = ReturnUrl, returnUrlHash = ReturnUrlHash }); } protected override void ValidateModel() { if (!Equals(Password, ConfirmPassword)) { ModelState.AddModelError("ConfirmPassword", L["'{0}' and '{1}' do not match.", "ConfirmPassword", "Password"]); } base.ValidateModel(); } } }