public async Task <ActionResult <string> > Register([FromBody] RegisterDTO model)
        {
            if (ModelState.IsValid)
            {
                var appUser = new AppUser
                {
                    UserName = model.Email, Email = model.Email, FirstName = model.FirstName, LastName = model.LastName,
                    Address  = model.Address
                };
                var result = await _userManager.CreateAsync(appUser, model.Password);

                if (result.Succeeded)
                {
                    _logger.LogInformation("New user created.");

                    // create claims based user
                    var claimsPrincipal = await _signInManager.CreateUserPrincipalAsync(appUser);

                    // get the Json Web Token
                    var jwt = IdentityExtensions.GenerateJWT(claimsPrincipal.Claims,
                                                             _configuration["JWT:SigningKey"],
                                                             _configuration["JWT:Issuer"],
                                                             _configuration.GetValue <int>("JWT:ExpirationInDays")
                                                             );

                    await _bll.SaveChangesAsync();

                    _logger.LogInformation("Token generated for user");
                    return(Ok(new { token = jwt, status = "Account created for " + model.Email, email = model.Email }));
                }

                return(StatusCode(406)); //406 Not Acceptable
            }

            return(StatusCode(400)); //400 Bad Request
        }
Beispiel #2
0
        public async Task <ActionResult <string> > Register([FromBody] RegisterDTO dto)
        {
            var appUser = await _userManager.FindByEmailAsync(dto.Email);

            if (appUser != null)
            {
                _logger.LogInformation($"WebApi register. User {dto.Email} already registered!");
                return(NotFound(new MessageDTO("User already registered!")));
            }

            appUser = new AppUser()
            {
                Email     = dto.Email,
                UserName  = dto.Email,
                FirstName = dto.FirstName,
                LastName  = dto.LastName,
            };

            var role = dto.IsHost ? "host" : "guest";

            if (!await _roleManager.RoleExistsAsync(role))
            {
                await _roleManager.CreateAsync(new AppRole()
                {
                    Name = role
                });
            }

            var result = await _userManager.CreateAsync(appUser, dto.Password);

            if (result.Succeeded)
            {
                _logger.LogInformation($"User {appUser.Email} created a new account as {role}.");
                await _userManager.AddToRoleAsync(appUser, role);

                var user = await _userManager.FindByEmailAsync(appUser.Email);

                if (user != null)
                {
                    var claimsPrincipal = await _signInManager.CreateUserPrincipalAsync(user);

                    var jwt = IdentityExtensions.GenerateJWT(
                        claimsPrincipal.Claims
                        .Append(new Claim(ClaimTypes.GivenName, appUser.FirstName))
                        .Append(new Claim(ClaimTypes.Surname, appUser.LastName)),
                        _configuration["JWT:SigningKey"],
                        _configuration["JWT:Issuer"],
                        _configuration.GetValue <int>("JWT:ExpirationInDays")
                        );
                    _logger.LogInformation($"WebApi register. User {user.Email} logged in.");
                    return(Ok(new JwtResponseDTO()
                    {
                        Token = jwt, Status = $"User {user.Email} created and logged in.",
                        FirstName = appUser.FirstName, LastName = appUser.LastName
                    }));
                }

                _logger.LogInformation($"User {appUser.Email} not found after creation!");
                return(BadRequest(new MessageDTO("User not found after creation!")));
            }

            var errors = result.Errors.Select(error => error.Description).ToList();

            return(BadRequest(new MessageDTO()
            {
                Messages = errors
            }));
        }
Beispiel #3
0
        public async Task <IActionResult> Register([FromBody] RegisterDTO registerDTO)
        {
            // User already exists
            var existingUser = await _userManager.FindByEmailAsync(registerDTO.Email);

            if (existingUser != null)
            {
                _logger.LogInformation($"WebApi register. User {registerDTO.Email} already registered!");
                return(BadRequest(new MessageDTO("User already registered!")));
            }

            // Create new user
            var newUser = new DomainIdentity.AppUser
            {
                Email     = registerDTO.Email,
                UserName  = registerDTO.Email.ToLower().Split('@')[0],
                FirstName = registerDTO.FirstName,
                LastName  = registerDTO.LastName
            };
            var result = await _userManager.CreateAsync(newUser, registerDTO.Password);

            // Check creation
            if (!result.Succeeded)
            {
                _logger.LogInformation($"Web-Api register. Could not register user {registerDTO.Email}!");
                var errors = result.Errors.Select(error => error.Description).ToList();
                return(BadRequest(new MessageDTO()
                {
                    Messages = errors
                }));
            }

            _logger.LogInformation($"Web-Api register. User {registerDTO.Email} registered!");

            // Find newly created user
            var newRegisteredUser = await _userManager.FindByEmailAsync(newUser.Email);

            if (newRegisteredUser == null)
            {
                _logger.LogInformation($"User {newUser.Email} not found after creation!");
                return(NotFound(new MessageDTO("User not found after creation!")));
            }

            // Create default profile with an empty wishlist
            try
            {
                _bll.Profiles.CreateDefaultProfile(newRegisteredUser.Id);
                await _bll.SaveChangesAsync();
            }
            catch (ArgumentNullException e)
            {
                _logger.LogError($"Could not create default profile for new registered user {registerDTO.Email} - userId not provided", e);
            }

            // Check if user was invited by existing user
            var invitedUsers = (await _bll.InvitedUsers.GetAllAsync())
                               .Where(i => i.Email == newRegisteredUser.Email)
                               .ToList();

            if (invitedUsers != null && invitedUsers.Any())
            {
                foreach (var invitedUser in invitedUsers)
                {
                    // Update invitedUser to mark they have joined
                    invitedUser.HasJoined = true;
                    await _bll.InvitedUsers.UpdateAsync(invitedUser);

                    await _bll.SaveChangesAsync();

                    // Send notification to the invitor about their friend joining
                    var invitor = await _userManager.FindByIdAsync(invitedUser.InvitorUserId.ToString());

                    // TODO
                }
            }
            // Save user activity
            newRegisteredUser.LastActive = DateTime.Now;
            await _userManager.UpdateAsync(newRegisteredUser);

            await _bll.SaveChangesAsync();

            // Log new user in
            return(await LogUserIn(newRegisteredUser));
        }