Esempio n. 1
0
        public async Task <IActionResult> Register([FromBody] DTO.App.Register dto)
        {
            var appUser = await _userManager.FindByEmailAsync(dto.Email);

            if (appUser != null)
            {
                _logger.LogWarning(" User {User} already registered", dto.Email);
                return(BadRequest(new DTO.App.Message("User already registered")));
            }

            appUser = new Domain.App.Identity.AppUser()
            {
                Email     = dto.Email,
                UserName  = dto.Email,
                Firstname = dto.Firstname,
                Lastname  = dto.Lastname,
            };
            var result = await _userManager.CreateAsync(appUser, dto.Password);

            if (result.Succeeded)
            {
                _logger.LogInformation("User {Email} created a new account with password", appUser.Email);

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

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

                    var jwt = Extensions.Base.IdentityExtensions.GenerateJwt(
                        claimsPrincipal.Claims,
                        _configuration["JWT:Key"],
                        _configuration["JWT:Issuer"],
                        _configuration["JWT:Issuer"],
                        DateTime.Now.AddDays(_configuration.GetValue <int>("JWT:ExpireDays"))
                        );
                    _logger.LogInformation("WebApi login. User {User}", dto.Email);
                    return(Ok(new DTO.App.JwtResponse()
                    {
                        Token = jwt,
                        Firstname = appUser.Firstname,
                        Lastname = appUser.Lastname,
                    }));
                }
                else
                {
                    _logger.LogInformation("User {Email} not found after creation", appUser.Email);
                    return(BadRequest(new DTO.App.Message("User not found after creation!")));
                }
            }

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

            return(BadRequest(new DTO.App.Message()
            {
                Messages = errors
            }));
        }
Esempio n. 2
0
        public async Task <IActionResult> 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 Domain.App.Identity.AppUser()
            {
                Email     = dto.Email,
                UserName  = dto.Email,
                FirstName = dto.FirstName,
                LastName  = dto.LastName,
            };
            var result = await _userManager.CreateAsync(appUser, dto.Password);

            if (result.Succeeded)
            {
                _logger.LogInformation($"User {appUser.Email} created a new account with password.");

                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
            }));
        }
Esempio n. 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!")));
            }

            // Log new user in
            return(await LogIn(newRegisteredUser));
        }
Esempio n. 4
0
        private async Task <IActionResult> LogUserIn(DomainIdentity.AppUser appUser)
        {
            var claimsPrincipal = await _signInManager.CreateUserPrincipalAsync(appUser); // get the User analog

            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($"Web-Api login. Token generated for user {appUser.Email}");
            return(Ok(new JwtResponseDTO()
            {
                Token = jwt,
                Status = $"User {appUser.Email} logged in.",
                Id = appUser.Id,
                FirstName = appUser.FirstName,
                LastName = appUser.LastName
            }));
        }
Esempio n. 5
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));
        }