Пример #1
0
    public Task <bool> UpdateUserAsync(MawUser updatedUser)
    {
        if (updatedUser == null)
        {
            throw new ArgumentNullException(nameof(updatedUser));
        }

        return(RunAsync(async conn => {
            var result = await conn.QuerySingleAsync <long>(
                "SELECT * FROM maw.update_user("
                + " @username, @firstName, @lastName, @email, @hashedPassword, @securityStamp,"
                + " @enableGithubAuth, @enableGoogleAuth, @enableMicrosoftAuth, @enableTwitterAuth);",
                new {
                username = updatedUser.Username.ToLowerInvariant(),
                firstName = updatedUser.FirstName,
                lastName = updatedUser.LastName,
                email = updatedUser.Email?.ToLowerInvariant(),
                hashedPassword = updatedUser.HashedPassword,
                securityStamp = updatedUser.SecurityStamp,
                enableGithubAuth = updatedUser.IsGithubAuthEnabled,
                enableGoogleAuth = updatedUser.IsGoogleAuthEnabled,
                enableMicrosoftAuth = updatedUser.IsMicrosoftAuthEnabled,
                enableTwitterAuth = updatedUser.IsTwitterAuthEnabled
            }
                );

            if (result != 1)
            {
                throw new InvalidOperationException("Was not able to find user to update with username: " + updatedUser.Username.ToLowerInvariant());
            }

            return true;
        }));
    }
Пример #2
0
    async Task AddRolesForUser(MawUser user)
    {
        var rolesResult = await InternalGetRolesForUserAsync(user.Username);

        foreach (var role in rolesResult)
        {
            user.AddRole(role.Name);
        }
    }
Пример #3
0
    public async Task <IActionResult> CreateUser(CreateUserModel model)
    {
        if (model == null)
        {
            throw new ArgumentNullException(nameof(model));
        }

        if (ModelState.IsValid)
        {
            var user = new MawUser
            {
                Username  = model.Username,
                FirstName = model.FirstName,
                LastName  = model.LastName,
                Email     = model.Email
            };

            var password = await GeneratePassword();

            model.Result = IdentityResult.Failed();

            try
            {
                model.Result = await _userMgr.CreateAsync(user, password);

                if (model.Result == IdentityResult.Success)
                {
                    var emailModel = new CreateUserEmailModel
                                     (
                        "User Account Created",
                        model.Username,
                        model.FirstName,
                        password
                                     );

                    var body = await _razorRenderer.RenderViewToStringAsync("~/Views/Email/CreateUser.cshtml", emailModel);

                    await _emailSvc.SendHtmlAsync(model.Email, _emailSvc.FromAddress, "Account Created for mikeandwan.us", body);
                }
            }
            catch (Exception ex)
            {
                _log.LogError(ex, "error creating user");
                model.Result = IdentityResult.Failed(new IdentityError {
                    Description = ex.Message
                });
            }
        }
        else
        {
            model.Result = IdentityResult.Failed();
            LogValidationErrors();
        }

        return(View(model));
    }
Пример #4
0
    public static MawUser Convert(ClaimsIdentity identity)
    {
        if (identity == null)
        {
            throw new ArgumentNullException(nameof(identity));
        }

        var mawUser = new MawUser();

        mawUser.AddClaims(identity.Claims);

        return(mawUser);
    }
Пример #5
0
    async Task <string> GeneratePassword()
    {
        var dummyUser = new MawUser();

        // limit to 100 tries
        for (int i = 0; i < 100; i++)
        {
            var password = CryptoUtils.GeneratePassword(12);
            var isValid  = await _pwdValidator.ValidateAsync(_userMgr, dummyUser, password);

            if (isValid == IdentityResult.Success)
            {
                return(password);
            }
        }

        throw new InvalidOperationException();
    }
Пример #6
0
    public Task <bool> UpdateUserPasswordAsync(MawUser user)
    {
        if (user == null)
        {
            throw new ArgumentNullException(nameof(user));
        }

        return(RunAsync(async conn => {
            var result = await conn.QuerySingleAsync <long>(
                "SELECT * FROM maw.save_password(@username, @hashedPassword);",
                new {
                username = user.Username.ToLowerInvariant(),
                hashedPassword = user.HashedPassword
            }
                );

            return result == 1;
        }));
    }
Пример #7
0
    public Task <short> AddUserAsync(MawUser user)
    {
        if (user == null)
        {
            throw new ArgumentNullException(nameof(user));
        }

        return(RunAsync(conn =>
                        conn.QuerySingleAsync <short>(
                            "SELECT * FROM maw.add_user(@username, @hashedPassword, @firstName,"
                            + "@lastName, @email, @securityStamp, @passwordLastSetOn);",
                            new {
            username = user.Username.ToLowerInvariant(),
            hashedPassword = user.HashedPassword,
            firstName = user.FirstName,
            lastName = user.LastName,
            email = user.Email?.ToLowerInvariant(),
            securityStamp = user.SecurityStamp,
            passwordLastSetOn = DateTime.Now
        }
                            )
                        ));
    }