public async Task ExecuteAsync( UserId userId, Username username, Email email, string exampleWork, Password password, DateTime timeStamp) { userId.AssertNotNull("userId"); username.AssertNotNull("username"); email.AssertNotNull("email"); password.AssertNotNull("password"); var passwordHash = this.userManager.PasswordHasher.HashPassword(password.Value); var user = new FifthweekUser { Id = userId.Value, UserName = username.Value, Email = email.Value, ExampleWork = exampleWork, RegistrationDate = timeStamp, LastSignInDate = SqlDateTime.MinValue.Value, LastAccessTokenDate = SqlDateTime.MinValue.Value, SecurityStamp = Guid.NewGuid().ToString(), PasswordHash = passwordHash, }; var parameters = new SqlGenerationParameters <FifthweekUser, FifthweekUser.Fields>(user) { Conditions = new[] { WhereUsernameNotTaken, WhereEmailNotTaken } }; using (var transaction = TransactionScopeBuilder.CreateAsync()) { using (var connection = this.connectionFactory.CreateConnection()) { var result = await connection.InsertAsync(parameters); switch (result) { case 0: throw new RecoverableException("The username '" + username.Value + "' is already taken."); case 1: throw new RecoverableException("The email address '" + email.Value + "' is already taken."); } } await this.requestSnapshot.ExecuteAsync(userId, SnapshotType.Subscriber); transaction.Complete(); } }
public async Task <UserIdAndRoles> ExecuteAsync(Username username, Password password) { username.AssertNotNull("username"); password.AssertNotNull("password"); using (var connection = this.connectionFactory.CreateConnection()) { var result = (await connection.QueryAsync <DapperResult>( Query, new { UserName = username.Value })).ToList(); if (result.Count > 0) { if (result.Select(v => v.Id).Distinct().Count() != 1) { throw new InvalidOperationException("Multiple user IDs returned."); } if (result.Select(v => v.PasswordHash).Distinct().Count() != 1) { throw new InvalidOperationException("Multiple hashed passwords returned."); } if (this.userManager.PasswordHasher.VerifyHashedPassword(result[0].PasswordHash, password.Value) != PasswordVerificationResult.Failed) { var userId = result[0].Id; var roles = result.Select(v => v.Name).Where(v => v != null).ToList(); return(new UserIdAndRoles(userId, roles)); } } return(null); } }