Пример #1
0
        /// <summary>
        /// Takes CreateUserDto from controller, creates a user, creates roles if they don't exists,
        /// adds user to Player role, sends a notification to an admin user to approve their originally requested role and
        /// returns a UserLoggedInDto
        /// </summary>
        /// <param name="cud"></param>
        /// <returns>UserLoggedInDto</returns>
        public async Task <AuthResponseDto> CreateUser(CreateUserDto cud)
        {
            // Try to seed data if AspNetUsers table is empty
            await _repo.SeedUsers();

            // Build IdentityRoles
            if (!await _roleManager.RoleExistsAsync(Roles.A))
            {
                await _roleManager.CreateAsync(new IdentityRole(Roles.A));

                await _roleManager.CreateAsync(new IdentityRole(Roles.LM));

                await _roleManager.CreateAsync(new IdentityRole(Roles.HC));

                await _roleManager.CreateAsync(new IdentityRole(Roles.AC));

                await _roleManager.CreateAsync(new IdentityRole(Roles.PT));

                await _roleManager.CreateAsync(new IdentityRole(Roles.PL));

                await _roleManager.CreateAsync(new IdentityRole(Roles.UU));
            }

            ApplicationUser user = new ApplicationUser
            {
                FullName      = cud.FullName,
                PhoneNumber   = cud.PhoneNumber,
                Email         = cud.Email,
                SecurityStamp = Guid.NewGuid().ToString(),
                UserName      = cud.UserName,
                RoleName      = cud.RoleName
            };

            if (cud.TeamID != null)
            {
                user.TeamID = (Guid)cud.TeamID;
            }
            // Create new User via UserManager
            var result = await _userManager.CreateAsync(user, cud.Password);

            if (!result.Succeeded)
            {
                return(new AuthResponseDto {
                    IsAuthSuccessful = false, ErrorMessage = result.ToString()
                });
            }
            // Send Email Confirmation token
            var token = await _userManager.GenerateEmailConfirmationTokenAsync(user);

            var param = new Dictionary <string, string>
            {
                { "token", token },
                { "email", user.Email }
            };
            var callback = QueryHelpers.AddQueryString(cud.ClientURI, param);
            var message  = new EmailMessage(new string[] { user.Email }, "Email Confirmation token", callback, null);

            using (var httpClient = new HttpClient())
            {
                var response = await httpClient.PostAsJsonAsync($"http://*****:*****@GMAIL.COM")
            {
                await _userManager.AddToRoleAsync(user, Roles.A);
            }

            // Notify Admin of new League Manager request - reject if role filled
            if (leagueManager == null && cud.RoleName == "League Manager")
            {
                var adminMessage = new EmailMessage(new string[] { admin.Email }, "New League Manager to confirm", $"User {user.UserName} has been created and has asked for permissions to {cud.RoleName}. Log in to apply the role.", null);
                using var httpClient = new HttpClient();
                var response = await httpClient.PostAsJsonAsync($"http://localhost:44348/api/Message/SendEmail", adminMessage);
            }
            else if (leagueManager != null)
            {
                return(new AuthResponseDto {
                    IsAuthSuccessful = false, ErrorMessage = "This League already has a League Manager"
                });
            }

            //Notify League Manager of Head Coach request - reject if role filled
            if (coach == null && cud.RoleName == "Head Coach")
            {
                var lmMessage = new EmailMessage(new string[] { leagueManager.Email }, "New Head Coach to confirm", $"User {user.UserName} has been created and has asked for permissions to {cud.RoleName}. Log in to apply the role.", null);
                using var httpClient = new HttpClient();
                var response = await httpClient.PostAsJsonAsync($"http://20.185.100.57:80/api/Message/SendEmail", lmMessage);
            }
            else if (coach != null)
            {
                return(new AuthResponseDto {
                    IsAuthSuccessful = false, ErrorMessage = "This team already has a Head Coach"
                });
            }

            //Notify Head Coach of user registration and set as role with no priveleges
            if (cud.RoleName == "Parent" || cud.RoleName == "Player" || cud.RoleName == "Assistant Coach")
            {
                var coachMessage = new EmailMessage(new string[] { coach.Email }, "New user to confirm", $"User {user.UserName} has been created and has asked for permissions to {cud.RoleName}. Log in to apply a role.", null);
                using var httpClient = new HttpClient();
                var response = await httpClient.PostAsJsonAsync($"http://20.185.100.57:80/api/Message/SendEmail", coachMessage);
            }
            await _userManager.AddToRoleAsync(user, Roles.UU);

            return(new AuthResponseDto {
                IsAuthSuccessful = true
            });
        }