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; })); }
async Task AddRolesForUser(MawUser user) { var rolesResult = await InternalGetRolesForUserAsync(user.Username); foreach (var role in rolesResult) { user.AddRole(role.Name); } }
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)); }
public static MawUser Convert(ClaimsIdentity identity) { if (identity == null) { throw new ArgumentNullException(nameof(identity)); } var mawUser = new MawUser(); mawUser.AddClaims(identity.Claims); return(mawUser); }
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(); }
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; })); }
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 } ) )); }