Example #1
0
        public async Task <ActionResult <Guid> > POST([FromBody] RegisterTeamViewModel registerTeamViewModel)
        {
            // Generate a unique playerID
            var player         = new Player(registerTeamViewModel.TeamName);
            var hashedPassword = _passwordHashing.HashPassword(registerTeamViewModel.Password);
            await _database.SavePlayer(player, hashedPassword);

            // Reload the player
            var reloadedPlayer = await _database.LoadPlayer(player.ID);

            if (reloadedPlayer == null)
            {
                var details = new ValidationProblemDetails {
                    Detail = $"No player with the ID {player.ID} exists"
                };
                return(ValidationProblem(details));
            }

            if (!_passwordHashing.CompareHashes(registerTeamViewModel.Password, reloadedPlayer.Password))
            {
                return(Forbid());
            }

            // Create them a game for them to develop against
            if (!reloadedPlayer.CurrentGameID.HasValue)
            {
                await _gameCreator.CreateInitialGame(reloadedPlayer.ID);
            }
            return(reloadedPlayer.ID);
        }
        public async Task <IHttpActionResult> Post(RegisterTeamViewModel viewModel)
        {
            try
            {
                var user = new ApplicationUser
                {
                    Email       = viewModel.Email,
                    UserName    = viewModel.Email,
                    PhoneNumber = viewModel.HomePhoneNumber
                };

                var response = await _userManager.CreateAsync(user, viewModel.Password);

                if (response.Succeeded)
                {
                    var roleResponse = await _userManager.AddToRoleAsync(user.Id, Roles.TeamSponsor);

                    if (!roleResponse.Succeeded)
                    {
                        ThrowIdentityResponseError(response, user.Email);
                    }

                    await SendTeamSponsorEmailAsync(user.Id, viewModel.Name);

                    var team = _mapper.Map <RegisterTeamViewModel, Team>(viewModel);
                    team.AspNetUser_Id = user.Id;

                    _dbContext.Teams.Add(team);
                    _dbContext.SaveChanges();
                }
                else
                {
                    ThrowIdentityResponseError(response, user.Email);
                }


                return(Ok());
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }