示例#1
0
        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();
            }
        }
示例#2
0
        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);
            }
        }