コード例 #1
0
        public async Task <IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound(Describer.UnableToLoadUser(_userManager.GetUserId(User), Language.English)));
            }

            var changePasswordResult = await _userManager.ChangePasswordAsync(user, Input.OldPassword, Input.NewPassword);

            if (!changePasswordResult.Succeeded)
            {
                foreach (var error in changePasswordResult.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
                return(Page());
            }

            await _signInManager.RefreshSignInAsync(user);

            _logger.LogInformation($"User changed their password successfully (For user with ID '{_userManager.GetUserId(User)}').");
            StatusMessage = "گذرواژه شما تغییر کرد.";

            return(RedirectToPage());
        }
コード例 #2
0
        public async Task <IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return(Page());
            }

            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound(Describer.UnableToLoadUser(_userManager.GetUserId(User), Language.English)));
            }

            var addPasswordResult = await _userManager.AddPasswordAsync(user, Input.NewPassword);

            if (!addPasswordResult.Succeeded)
            {
                foreach (var error in addPasswordResult.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
                return(Page());
            }

            await _signInManager.RefreshSignInAsync(user);

            StatusMessage = "گذرواژه ثبت شد.";

            return(RedirectToPage());
        }
コード例 #3
0
        public async Task <IActionResult> OnPostAsync()
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound(Describer.UnableToLoadUser(_userManager.GetUserId(User), Language.English)));
            }

            var isTwoFactorEnabled = await _userManager.GetTwoFactorEnabledAsync(user);

            var userId = await _userManager.GetUserIdAsync(user);

            if (!isTwoFactorEnabled)
            {
                throw new InvalidOperationException($"امکان ساخت کد های بازیابی برای کاربر با شناسه '{userId}' وجود نداشت، چراکه احراز هویت دو مرحله ای برای وی فعال نیست.");
            }

            var recoveryCodes = await _userManager.GenerateNewTwoFactorRecoveryCodesAsync(user, 10);

            RecoveryCodes = recoveryCodes.ToArray();

            _logger.LogInformation($"برای کاربر با شناسه '{userId}' مجموعه جدیدی از کد های بازیابی ایجاد شد.", userId);
            StatusMessage = "اکنون کد های بازیابی تازه ای در اختیار دارید.";
            return(RedirectToPage("./ShowRecoveryCodes"));
        }
コード例 #4
0
        public async Task <IActionResult> OnGetLinkLoginCallbackAsync()
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound(Describer.UnableToLoadUser(_userManager.GetUserId(User), Language.English)));
            }

            var info = await _signInManager.GetExternalLoginInfoAsync(await _userManager.GetUserIdAsync(user));

            if (info == null)
            {
                throw new InvalidOperationException($"خطای پیش بینی نشده در حین بارگذاری اطلاعات ورود خارجی برای کاربر '{user.Id}' پیش آمد.");
            }

            var result = await _userManager.AddLoginAsync(user, info);

            if (!result.Succeeded)
            {
                StatusMessage = "ورود خارجی اضافه نشد. امکان استفاده همزمان از یک ورود خارجی، همزمان تنها برای یک حساب کاربری امکان پذیر است.";
                return(RedirectToPage());
            }

            // Clear the existing external cookie to ensure a clean login process
            await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme);

            StatusMessage = "ورود خارجی اضافه شد.";
            return(RedirectToPage());
        }
コード例 #5
0
        public async Task <IActionResult> OnPostSetProfileImageAsync(IFormFile image)
        {
            var user = await _userManager.GetUserAsync(User);

            //Invalid UserID
            if (user == null)
            {
                return(NotFound(Describer.UnableToLoadUser(_userManager.GetUserId(User), Language.English)));
            }

            if (image == null)
            {
                return(RedirectToPage());
            }

            if (!string.IsNullOrEmpty(user.ProfileImagePath))
            {
                _ifileManager.DeleteFile(user.ProfileImagePath);
            }
            var avatarPath = $"uploads/avatars/{PersianDateTime.Now.ToString("yyyy/MM/dd/yyyyMMddhhmmss") + DateTime.Now.ToString("ffff") + new Random().Next(1000000, 9999999)}_{WebApp.Helpers.File.ValidateName(image.FileName)}";
            await _ifileManager.SaveFile(image, avatarPath);

            user.ProfileImagePath = $"/{avatarPath}";
            var result = await _userManager.UpdateAsync(user);

            if (!result.Succeeded)
            {
                var userId = await _userManager.GetUserIdAsync(user);

                throw new InvalidOperationException($"به روز رسانی تصویر نمایه برای کاربر '{userId}' با خطا مواجه شد..");
            }

            StatusMessage = "تصویر نمایه به روز شد.";
            return(RedirectToPage());
        }
コード例 #6
0
        public async Task <IActionResult> OnGet()
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound(Describer.UnableToLoadUser(_userManager.GetUserId(User), Language.English)));
            }

            return(Page());
        }
コード例 #7
0
        public async Task <IActionResult> OnPostAsync()
        {
            var user = await _userManager.GetUserAsync(User);

            //Invalid UserID
            if (user == null)
            {
                return(NotFound(Describer.UnableToLoadUser(_userManager.GetUserId(User), Language.English)));
            }

            if (ModelState.IsValid)
            {
                var phoneNumber = await _userManager.GetPhoneNumberAsync(user);

                if (Input.PhoneNumber != phoneNumber)
                {
                    var setPhoneResult = await _userManager.SetPhoneNumberAsync(user, Input.PhoneNumber.PersianNumberToEnglish());

                    if (!setPhoneResult.Succeeded)
                    {
                        var userId = await _userManager.GetUserIdAsync(user);

                        throw new InvalidOperationException($"تنظیم شماره تماس برای کاربر '{userId}' با خطا مواجه شد..");
                    }
                }

                user.DisplayName = Input.DisplayName;
                user.FirstName   = Input.FirstName;
                user.LastName    = Input.LastName;
                user.BirthDate   = Input.BirthDate;
                user.Location    = Input.LocationName;

                var result = await _userManager.UpdateAsync(user);

                if (!result.Succeeded)
                {
                    var userId = await _userManager.GetUserIdAsync(user);

                    throw new InvalidOperationException($"به روز رسانی نمایه برای کاربر '{userId}' با خطا مواجه شد..");
                }

                await _signInManager.RefreshSignInAsync(user);

                StatusMessage = "نمایه به روز شد.";
                return(RedirectToPage());
            }

            //Invalid Model
            await LoadAsync(user);

            return(Page());
        }
コード例 #8
0
        public async Task <IActionResult> OnPost()
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound(Describer.UnableToLoadUser(_userManager.GetUserId(User), Language.English)));
            }

            await _signInManager.ForgetTwoFactorClientAsync();

            StatusMessage = "مرورگر جاری فراموش شده است. زمان ورود مجدد از طریق این مرورگر مجدداً کد های بازیابی از شما درخواست می شوند.";
            return(RedirectToPage());
        }
コード例 #9
0
        public async Task <IActionResult> OnPostAsync()
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound(Describer.UnableToLoadUser(_userManager.GetUserId(User), Language.English)));
            }

            if (!ModelState.IsValid)
            {
                await LoadSharedKeyAndQrCodeUriAsync(user);

                return(Page());
            }

            // Strip spaces and hypens
            var verificationCode = Input.Code.Replace(" ", string.Empty).Replace("-", string.Empty);

            var is2faTokenValid = await _userManager.VerifyTwoFactorTokenAsync(
                user, _userManager.Options.Tokens.AuthenticatorTokenProvider, verificationCode);

            if (!is2faTokenValid)
            {
                ModelState.AddModelError("Input.Code", "کد فعال سازی نامعتبر است.");
                await LoadSharedKeyAndQrCodeUriAsync(user);

                return(Page());
            }

            await _userManager.SetTwoFactorEnabledAsync(user, true);

            var userId = await _userManager.GetUserIdAsync(user);

            _logger.LogInformation($"حساب کاربری با شناسه '{userId}' دارای احراز هویت فعال است.", userId);

            StatusMessage = "نرم افزار احراز هویت شما فعال شد.";

            if (await _userManager.CountRecoveryCodesAsync(user) == 0)
            {
                var recoveryCodes = await _userManager.GenerateNewTwoFactorRecoveryCodesAsync(user, 10);

                RecoveryCodes = recoveryCodes.ToArray();
                return(RedirectToPage("./ShowRecoveryCodes"));
            }
            else
            {
                return(RedirectToPage("./TwoFactorAuthentication"));
            }
        }
コード例 #10
0
        public async Task <IActionResult> OnGet()
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound(Describer.UnableToLoadUser(_userManager.GetUserId(User), Language.English)));
            }

            if (!await _userManager.GetTwoFactorEnabledAsync(user))
            {
                throw new InvalidOperationException($"غیرفعال سازی احراز هویت دو مرحله ای برای کاربر یا شناسه '{_userManager.GetUserId(User)}' ممکن نبود. چرا که اینک احراز هویت دو مرحله ای برای ایشان فعال نیست.");
            }

            return(Page());
        }
コード例 #11
0
        public async Task <IActionResult> OnGetAsync()
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound(Describer.UnableToLoadUser(_userManager.GetUserId(User), Language.English)));
            }

            CurrentLogins = await _userManager.GetLoginsAsync(user);

            OtherLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync())
                          .Where(auth => CurrentLogins.All(ul => auth.Name != ul.LoginProvider))
                          .ToList();
            ShowRemoveButton = user.PasswordHash != null || CurrentLogins.Count > 1;
            return(Page());
        }
コード例 #12
0
        public async Task <IActionResult> OnGetAsync()
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound(Describer.UnableToLoadUser(_userManager.GetUserId(User), Language.English)));
            }

            var hasPassword = await _userManager.HasPasswordAsync(user);

            if (!hasPassword)
            {
                return(RedirectToPage("./SetPassword"));
            }

            return(Page());
        }
コード例 #13
0
        public async Task <IActionResult> OnPostChangeEmailAsync()
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound(Describer.UnableToLoadUser(_userManager.GetUserId(User), Language.English)));
            }

            if (!ModelState.IsValid)
            {
                await LoadAsync(user);

                return(Page());
            }

            var email = await _userManager.GetEmailAsync(user);

            if (Input.NewEmail != email)
            {
                var userId = await _userManager.GetUserIdAsync(user);

                var code = await _userManager.GenerateChangeEmailTokenAsync(user, Input.NewEmail);

                var callbackUrl = Url.Page(
                    "/Account/ConfirmEmailChange",
                    pageHandler: null,
                    values: new { userId = userId, email = Input.NewEmail, code = code },
                    protocol: Request.Scheme);
                await _emailSender.SendAsync(
                    from : WeblogApp.Helpers.EmailTypes.NoReply,
                    to : Input.NewEmail,
                    subject : "تایید رایانامه",
                    body : $"لطفاً حساب کاربری خود را با <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>کلیک روی نشانی</a> تایید کنید.",
                    isBodyHtml : true);

                StatusMessage = "نشانی تاییدیه به رایانامه ارسال شد. لطفاً رایانامه خود را بررسی کنید.";
                return(RedirectToPage());
            }

            StatusMessage = "رایانامه شما تغییر نکرد.";
            return(RedirectToPage());
        }
コード例 #14
0
        public async Task <IActionResult> OnGet()
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound(Describer.UnableToLoadUser(_userManager.GetUserId(User), Language.English)));
            }

            HasAuthenticator = await _userManager.GetAuthenticatorKeyAsync(user) != null;

            Is2faEnabled = await _userManager.GetTwoFactorEnabledAsync(user);

            IsMachineRemembered = await _signInManager.IsTwoFactorClientRememberedAsync(user);

            RecoveryCodesLeft = await _userManager.CountRecoveryCodesAsync(user);

            return(Page());
        }
コード例 #15
0
        public async Task <IActionResult> OnGetAsync()
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound(Describer.UnableToLoadUser(_userManager.GetUserId(User), Language.English)));
            }

            var isTwoFactorEnabled = await _userManager.GetTwoFactorEnabledAsync(user);

            if (!isTwoFactorEnabled)
            {
                var userId = await _userManager.GetUserIdAsync(user);

                throw new InvalidOperationException($"امکان ساخت کد های بازیابی برای کاربر با شناسه '{userId}' وجود نداشت، چراکه احراز هویت دو مرحله ای برای وی فعال نیست.");
            }

            return(Page());
        }
コード例 #16
0
        public async Task <IActionResult> OnGetAsync(string userId, string code)
        {
            if (userId == null || code == null)
            {
                return(RedirectToPage("/Index"));
            }

            var user = await _userManager.FindByIdAsync(userId);

            if (user == null)
            {
                return(NotFound(Describer.UnableToLoadUser(_userManager.GetUserId(User), Language.English)));
            }

            code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code));
            var result = await _userManager.ConfirmEmailAsync(user, code);

            StatusMessage = result.Succeeded ? "رایانامه شما با موفقیت تایید شد." : "در تایید رایانامه خطایی پیش آمد.";
            return(Page());
        }
コード例 #17
0
        public async Task <IActionResult> OnPostAsync()
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound(Describer.UnableToLoadUser(_userManager.GetUserId(User), Language.English)));
            }

            var disable2faResult = await _userManager.SetTwoFactorEnabledAsync(user, false);

            if (!disable2faResult.Succeeded)
            {
                throw new InvalidOperationException($"مواجهه با خطای پیش بینی نشده در حین غیرفعال سازی احراز هویت دو مرحله ای برای کاربر با شناسه '{_userManager.GetUserId(User)}'.");
            }

            _logger.LogInformation($"احراز هویت دو مرحله ای برای کاربر با شناسه '{_userManager.GetUserId(User)}' غیر فعال است.");
            StatusMessage = "احراز هویت دومرحله ای غیرفعال شد. شما میتوانید با تنظیم مجدد اقدام به فعال سازی دوباره کنید.";
            return(RedirectToPage("./TwoFactorAuthentication"));
        }
コード例 #18
0
        public async Task <IActionResult> OnPostAsync()
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound(Describer.UnableToLoadUser(_userManager.GetUserId(User), Language.English)));
            }

            await _userManager.SetTwoFactorEnabledAsync(user, false);

            await _userManager.ResetAuthenticatorKeyAsync(user);

            _logger.LogInformation($"کاربر با شناسه '{user.Id}' اقدام به تنظیم مجدد کلید نرم افزار احراز هویت کرد.");

            await _signInManager.RefreshSignInAsync(user);

            StatusMessage = "کلید احراز هویت نرم افزار دوباره تنظیم شد. به تنظیم مجدد نرم افزار با کلید جدید اقدام کنید.";

            return(RedirectToPage("./EnableAuthenticator"));
        }
コード例 #19
0
        public async Task <IActionResult> OnPostRemoveLoginAsync(string loginProvider, string providerKey)
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound(Describer.UnableToLoadUser(_userManager.GetUserId(User), Language.English)));
            }

            var result = await _userManager.RemoveLoginAsync(user, loginProvider, providerKey);

            if (!result.Succeeded)
            {
                StatusMessage = $"ورود خارجی برای کاربر با شناسه '{_userManager.GetUserId(User)}' حذف شد.";
                return(RedirectToPage());
            }

            await _signInManager.RefreshSignInAsync(user);

            StatusMessage = $"ورود خارجی برای کاربر با شناسه '{_userManager.GetUserId(User)}' حذف نشد.";
            return(RedirectToPage());
        }
コード例 #20
0
        public async Task <IActionResult> OnPostSendVerificationEmailAsync()
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound(Describer.UnableToLoadUser(_userManager.GetUserId(User), Language.English)));
            }

            if (!ModelState.IsValid)
            {
                await LoadAsync(user);

                return(Page());
            }

            var userId = await _userManager.GetUserIdAsync(user);

            var email = await _userManager.GetEmailAsync(user);

            var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

            code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
            var callbackUrl = Url.Page(
                "/Account/ConfirmEmail",
                pageHandler: null,
                values: new { area = "Identity", userId = userId, code = code },
                protocol: Request.Scheme);
            await _emailSender.SendAsync(
                from : WebApp.Helpers.EmailTypes.NoReply,
                to : Input.NewEmail,
                subject : "تایید رایانامه",
                body : $"لطفاً حساب کاربری خود را با <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>کلیک روی نشانی</a> تایید کنید.",
                isBodyHtml : true);

            StatusMessage = "رایانامه تاییدیه ارسال شد. لطفاً رایانامه خود را بررسی کنید.";
            return(RedirectToPage());
        }
コード例 #21
0
        public async Task <IActionResult> OnPostAsync()
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound(Describer.UnableToLoadUser(_userManager.GetUserId(User), Language.English)));
            }

            RequirePassword = await _userManager.HasPasswordAsync(user);

            if (RequirePassword)
            {
                if (!await _userManager.CheckPasswordAsync(user, Input.Password))
                {
                    ModelState.AddModelError(string.Empty, "گذرواژه اشتباه است.");
                    return(Page());
                }
            }

            var result = await _userManager.DeleteAsync(user);

            var userId = await _userManager.GetUserIdAsync(user);

            if (!result.Succeeded)
            {
                throw new InvalidOperationException($"خطای پیش بینی نشده حین حذف کاربر '{userId}' پیش آمد.");
            }

            //Delete User's Profile Image
            _ifileManager.DeleteFile(user.ProfileImagePath);

            await _signInManager.SignOutAsync();

            _logger.LogInformation($"User with ID '{userId}' deleted themselves.");

            return(Redirect("~/"));
        }
コード例 #22
0
        public async Task <IActionResult> OnGetAsync(string userId, string email, string code)
        {
            if (userId == null || email == null || code == null)
            {
                return(RedirectToPage("/Index"));
            }

            var user = await _userManager.FindByIdAsync(userId);

            if (user == null)
            {
                return(NotFound(Describer.UnableToLoadUser(_userManager.GetUserId(User), Language.English)));
            }

            code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code));
            var result = await _userManager.ChangeEmailAsync(user, email, code);

            if (!result.Succeeded)
            {
                StatusMessage = "در تغییر رایانامه خطایی پیش آمد.";
                return(Page());
            }

            // In our UI email and user name are one and the same, so when we update the email
            // we need to update the user name.
            var setUserNameResult = await _userManager.SetUserNameAsync(user, email);

            if (!setUserNameResult.Succeeded)
            {
                StatusMessage = "در تغییر نام کاربری خطایی پیش آمد.";
                return(Page());
            }

            await _signInManager.RefreshSignInAsync(user);

            StatusMessage = "رایانامه شما با موفقیت تایید شد.";
            return(Page());
        }
コード例 #23
0
        public async Task <IActionResult> OnPostAsync()
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound(Describer.UnableToLoadUser(_userManager.GetUserId(User), Language.English)));
            }

            _logger.LogInformation($"User with ID '{_userManager.GetUserId(User)}' asked for their personal data.");

            // Only include personal data for download
            var personalData      = new Dictionary <string, string>();
            var personalDataProps = typeof(ApplicationUser).GetProperties().Where(
                prop => Attribute.IsDefined(prop, typeof(PersonalDataAttribute)));

            foreach (var p in personalDataProps)
            {
                personalData.Add(p.Name, p.GetValue(user)?.ToString() ?? "null");
            }

            Response.Headers.Add("Content-Disposition", "attachment; filename=PersonalData.json");
            return(new FileContentResult(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(personalData)), "text/json"));
        }