コード例 #1
0
        public async Task <bool> UpdatePasswordIsSuccessful(string token)
        {
            Token _token = await context.Tokens.FirstOrDefaultAsync(t => t.Value == token);

            if (_token != null && _token.Action == "repa")
            {
                User user = await context.Users.FirstOrDefaultAsync(u => u.Id == _token.UserId);

                if (user != null)
                {
                    string password = PasswordManager.GenerateToken();
                    string salt     = PasswordManager.GenerateSalt();
                    string hash     = PasswordManager.GenerateHash(password, salt);
                    user.PasswordHash = hash;
                    user.Salt         = salt;
                    user.LastChanges  = DateTime.Now;
                    await EmailManager.SendMessageAsync(user.Email, $"Восстановление пароля проведено успешно!<br>" +
                                                        $"Ваш новый пароль: {password}<br>" +
                                                        "Вы можете сменить его на любой другой в любое время в вашем" +
                                                        " <a href=\"" + AppConfig.AppUrl + "/Account/Cabinet\"> личном кабинете </a>.");

                    context.Tokens.Remove(_token);
                    await context.SaveChangesAsync();

                    return(true);
                }
            }
            return(false);
        }
コード例 #2
0
        public async Task <ServiceResult> RegistrationAsync(RegistrationViewModel model)
        {
            ServiceResult result = new ServiceResult()
            {
                ErrorMessages = new List <string>(),
                Successful    = false
            };

            if (await EmailIsUniq(model.Email))
            {
                if (await LoginIsUniq(model.Login))
                {
                    User user = new User()
                    {
                        ConfirmEmail = false,
                        Email        = model.Email,
                        Login        = model.Login,
                        Firstname    = model.FirstName,
                        LastChanges  = DateTime.Now,
                        Lastname     = model.LastName,
                        Salt         = PasswordManager.GenerateSalt(),
                        Role         = "User"
                    };
                    user.PasswordHash = PasswordManager.GenerateHash(model.Password, PasswordManager.MainSalt + user.Salt);
                    context.Users.Add(user);
                    await context.SaveChangesAsync();

                    Token token = new Token()
                    {
                        GenerationDate = DateTime.Now,
                        UserId         = user.Id,
                        Value          = PasswordManager.GenerateToken(15),
                        Action         = "coem"
                    };
                    context.Tokens.Add(token);
                    await context.SaveChangesAsync();

                    /*await EmailManager.SendMessageAsync(user.Email,
                     *  $"Благодарим за регистрацию." +
                     *  $" Для подтверждения эл. почты перейдите по" +
                     *  $" <a href=\"https://{AppConfig.AppUrl}/Account/ConfirmEmail?token={token.Value}\"> ссылке </a>",
                     *  "Shpilka регистрация");*/
                    string directoryName = AppConfig.UsersPath + "/" + user.Id.ToString();
                    Directory.CreateDirectory(directoryName);
                    result.Successful = true;
                }
                else
                {
                    result.ErrorMessages.Add("Пользователь с таким логином уже зарегистрирован");
                }
            }
            else
            {
                result.ErrorMessages.Add("Пользователь с такой электронной почтой уже зарегистрирован");
            }
            return(result);
        }
コード例 #3
0
        public async Task <AuthenticateUser> LoginAsync(LoginViewModel model)
        {
            AuthenticateUser auth = null;
            User             user = await context.Users.FirstOrDefaultAsync(u => u.Login == model.Login);

            if (user != null && PasswordManager.GenerateHash(model.Password, user.Salt) == user.PasswordHash)
            {
                auth = new AuthenticateUser()
                {
                    Id        = user.Id,
                    Firstname = user.Firstname,
                    Lastname  = user.Lastname,
                    Login     = user.Login
                };
            }
            return(auth);
        }
コード例 #4
0
        public string GenerateHash(string password, string salt)
        {
            string hash = passwordManager.GenerateHash(password, salt);

            return(hash);
        }