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 <RefreshToken> ExecuteAsync(ClientId clientId, Username username) { clientId.AssertNotNull("clientId"); username.AssertNotNull("username"); using (var connection = this.connectionFactory.CreateConnection()) { var results = await connection.QueryAsync <RefreshToken>( Sql, new { ClientId = clientId.Value, Username = username.Value }); return(results.SingleOrDefault()); } }
public async Task <GetLandingPageDbResult> ExecuteAsync(Username username) { username.AssertNotNull("username"); List <Blog> blogs; List <Channel> channels; List <FifthweekUser> users; using (var connection = this.connectionFactory.CreateConnection()) { using (var multi = await connection.QueryMultipleAsync(Query, new { Username = username.Value })) { blogs = multi.Read <Blog>().ToList(); channels = multi.Read <Channel>().ToList(); users = multi.Read <FifthweekUser>().ToList(); } } var user = users.SingleOrDefault(); if (user == null) { return(null); } var blog = blogs.SingleOrDefault(); if (blog == null) { return(null); } var blogResult = GetBlogChannelsAndQueuesDbStatement.GetBlogDbResult(blog, new List <QueueResult>()); var channelsResult = channels.Select(v => new ChannelResult( new ChannelId(v.Id), v.Name, v.Price, v.IsVisibleToNonSubscribers)).ToList(); return(new GetLandingPageDbResult( new UserId(user.Id), user.ProfileImageFileId.HasValue ? new FileId(user.ProfileImageFileId.Value) : null, blogResult, channelsResult)); }
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); } }