コード例 #1
0
        public async Task <IActionResult> ChangePassword(ChangePasswordViewModel model)
        {
            if (ModelState.IsValid)
            {
                if (model.OldPassword == model.NewPassword)
                {
                    ModelState.AddModelError(string.Empty, "Новый и старый пароли не должны совпадать");
                    return(View(model));
                }

                User user = await userManager.FindByNameAsync(User.Identity.Name);

                user.UserName += ApplicationConstantsProvider.AvoidValidationCode();
                user.Email    += ApplicationConstantsProvider.AvoidValidationCode();

                var changePasswordResult = await userManager.ChangePasswordAsync(user, model.OldPassword, model.NewPassword);

                if (changePasswordResult.Succeeded)
                {
                    return(View("Redirect", new RedirectModel
                    {
                        InfoMessages = RedirectionMessageProvider.AccountUpdatedMessages(),
                        RedirectUrl = "/Account/Personal",
                        SecondsToRedirect = ApplicationConstantsProvider.GetShortRedirectionTime()
                    }));
                }
                else
                {
                    ModelState.AddModelError(string.Empty, "Вы ввели неверный старый пароль");
                }
            }
            return(View(model));
        }
コード例 #2
0
        public async Task <IActionResult> CreateUser(CreateUserViewModel model)
        {
            if (ModelState.IsValid)
            {
                User moderator = new User
                {
                    Email    = model.Email,
                    UserName = model.UserName
                };
                var registerResult = await userManager.CreateAsync(moderator, model.Password);

                if (registerResult.Succeeded)
                {
                    moderator.Email    += ApplicationConstantsProvider.AvoidValidationCode();
                    moderator.UserName += ApplicationConstantsProvider.AvoidValidationCode();
                    await userManager.AddToRoleAsync(moderator, "moderator");

                    return(RedirectToAction("UsersList"));
                }
                else
                {
                    foreach (var error in registerResult.Errors)
                    {
                        ModelState.AddModelError(string.Empty, error.Description);
                    }
                }
            }
            return(View(model));
        }
コード例 #3
0
        public async Task <IActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                if (!string.IsNullOrWhiteSpace(model.TelegramId))
                {
                    User sameTelegramUser = (await userLogic.Read(new User
                    {
                        TelegramUsername = model.TelegramId
                    }))?.FirstOrDefault();
                    if (sameTelegramUser != null)
                    {
                        ModelState.AddModelError(string.Empty,
                                                 "Уже есть пользователь с таким Telegram-идентификатором");
                        return(View(model));
                    }
                }
                User user = new User
                {
                    Email            = model.Email,
                    UserName         = model.UserName,
                    TelegramUsername = string.IsNullOrWhiteSpace(model.TelegramId) ?
                                       string.Empty : model.TelegramId,
                    TelegramChatId = string.Empty
                };

                var registerResult = await userManager.CreateAsync(user, model.Password);

                if (registerResult.Succeeded)
                {
                    user.Email    += ApplicationConstantsProvider.AvoidValidationCode();
                    user.UserName += ApplicationConstantsProvider.AvoidValidationCode();
                    await userManager.AddToRoleAsync(user, "regular user");

                    await savedListLogic.Create(user);

                    await signInManager.SignInAsync(user, false);

                    return(View("Redirect", new RedirectModel
                    {
                        InfoMessages = RedirectionMessageProvider.AccountCreatedMessages(),
                        RedirectUrl = "/Home/Lots",
                        SecondsToRedirect = ApplicationConstantsProvider.GetShortRedirectionTime()
                    }));
                }
                else
                {
                    foreach (var error in registerResult.Errors)
                    {
                        ModelState.AddModelError(string.Empty, error.Description);
                    }
                }
            }
            return(View(model));
        }
コード例 #4
0
        public Task <IdentityResult> ValidateAsync(UserManager <User> manager, User user)
        {
            List <IdentityError> errors = new List <IdentityError>();
            string avoidValidationCode  = ApplicationConstantsProvider.AvoidValidationCode();

            if (user.UserName == user.Email)
            {
                errors.Add(new IdentityError
                {
                    Description = "Имя пользователя и адрес электронной почты не должны совпадать"
                });
            }

            if (user.Email.Contains(avoidValidationCode))
            {
                user.Email = user.Email.Replace(avoidValidationCode, string.Empty);
            }
            else
            {
                User existingEmail = manager.FindByEmailAsync(user.Email).Result;
                if (existingEmail != null)
                {
                    errors.Add(new IdentityError
                    {
                        Description = "Данный Email уже используется"
                    });
                }
            }

            if (user.UserName.Contains(avoidValidationCode))
            {
                user.UserName = user.UserName.Replace(avoidValidationCode, string.Empty);
            }
            else
            {
                User existingUserName = manager.FindByNameAsync(user.UserName).Result;
                if (existingUserName != null)
                {
                    errors.Add(new IdentityError
                    {
                        Description = "Имя пользователя занято"
                    });
                }
            }

            return(Task.FromResult(errors.Count == 0 ?
                                   IdentityResult.Success : IdentityResult.Failed(errors.ToArray())));
        }
コード例 #5
0
        public static async Task InitializeAdmin(UserManager <User> userManager, IConfiguration configuration)
        {
            string email    = configuration["AdminEmailAzure"];
            string password = configuration["AdminPasswordAzure"];
            string username = configuration["AdminUsernameAzure"];

            if (await userManager.FindByEmailAsync(email) == null)
            {
                User admin = new User
                {
                    Email    = email,
                    UserName = username
                };
                var registerResult = await userManager.CreateAsync(admin, password);

                if (registerResult.Succeeded)
                {
                    admin.Email    += ApplicationConstantsProvider.AvoidValidationCode();
                    admin.UserName += ApplicationConstantsProvider.AvoidValidationCode();
                    await userManager.AddToRoleAsync(admin, "admin");
                }
            }
        }
コード例 #6
0
        public async Task <IActionResult> Update(UpdateAccountViewModel model)
        {
            if (ModelState.IsValid)
            {
                User userToUpdate = await userManager.FindByNameAsync(User.Identity.Name);

                if (!string.IsNullOrWhiteSpace(model.NewEmail))
                {
                    if (model.NewEmail == userToUpdate.Email)
                    {
                        ModelState.AddModelError(string.Empty, "Новый email совпадает со старым");
                        return(View(model));
                    }
                    else
                    {
                        userToUpdate.UserName += ApplicationConstantsProvider.AvoidValidationCode();
                        var updateEmailResult = await userManager.SetEmailAsync(userToUpdate, model.NewEmail);

                        if (!updateEmailResult.Succeeded)
                        {
                            foreach (var updateEmailError in updateEmailResult.Errors)
                            {
                                ModelState.AddModelError(string.Empty, updateEmailError.Description);
                            }
                            return(View(model));
                        }
                    }
                }

                if (!string.IsNullOrWhiteSpace(model.NewTelegramUserName))
                {
                    if (model.NewTelegramUserName == userToUpdate.TelegramUsername)
                    {
                        ModelState.AddModelError(string.Empty, "Новое имя пользователя в Telegram совпадает со старым");
                        return(View(model));
                    }
                    else
                    {
                        User sameTelegramUser = (await userLogic.Read(new User
                        {
                            TelegramUsername = model.NewTelegramUserName
                        }))?.FirstOrDefault();
                        if (sameTelegramUser != null)
                        {
                            ModelState.AddModelError(string.Empty, "Уже есть пользователь с таким Telegram-идентификатором");
                        }
                        else
                        {
                            userToUpdate.Email           += ApplicationConstantsProvider.AvoidValidationCode();
                            userToUpdate.UserName        += ApplicationConstantsProvider.AvoidValidationCode();
                            userToUpdate.TelegramUsername = model.NewTelegramUserName;
                            string tempChatId = userToUpdate.TelegramChatId;
                            userToUpdate.TelegramChatId = string.Empty;
                            var updateTelegramResult = await userManager.UpdateAsync(userToUpdate);

                            if (updateTelegramResult.Succeeded)
                            {
                                if (!string.IsNullOrWhiteSpace(tempChatId))
                                {
                                    await telegramBot.SendMessage("Вы отписаны от уведомлений, " +
                                                                  "т.к. изменили учетные данные на сайте", tempChatId);
                                }
                            }
                            else
                            {
                                foreach (var updateTelegramError in updateTelegramResult.Errors)
                                {
                                    ModelState.AddModelError(string.Empty, updateTelegramError.Description);
                                }
                                return(View(model));
                            }
                        }
                    }
                }
                return(RedirectToAction("Personal", "Account"));
            }
            return(View(model));
        }