Esempio n. 1
0
        public async Task <ActionResult <RegisteredVM> > Register([FromBody] RegisterVM registerVM)
        {
            // Validation
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            RegisteredVM registeredVM = await this.bll.Register(registerVM);

            return(Ok(registeredVM));
        }
Esempio n. 2
0
        public async Task <RegisteredVM> Register(RegisterVM registerVM)
        {
            // Validation
            if (registerVM == null)
            {
                return(null);
            }

            // Result
            RegisteredVM registeredVM = new RegisteredVM();

            User user = new User()
            {
                UserName  = registerVM.Username,
                Email     = registerVM.Email,
                FirstName = registerVM.FirstName,
                LastName  = registerVM.LastName
            };

            IdentityResult result = await userManager.CreateAsync(user, registerVM.Password);

            if (result.Succeeded)
            {
                logger.LogInformation("User created a new account with password.");

                // Email confirmation
                if (configuration.GetSection("Authentication").GetValue <bool>("EmailConfirmation"))
                {
                    string code = await userManager.GenerateEmailConfirmationTokenAsync(user);

                    string callbackUrl = configuration.GetSection("Authentication").GetValue <string>("ConfirmEmailURL");
                    callbackUrl = callbackUrl.Replace("{{userId}}", user.Id.ToString().ToUpper());
                    callbackUrl = callbackUrl.Replace("{{userEmail}}", user.Email.ToString().ToLower());
                    callbackUrl = callbackUrl.Replace("{{code}}", Uri.EscapeDataString(code));

                    await emailService.SendEmailConfirmationAsync(registerVM.Email, callbackUrl);
                }
                else
                {
                    // Set claims of user
                    List <Claim> claims = new List <Claim>()
                    {
                        new Claim(JwtRegisteredClaimNames.NameId, user.Id.ToString().ToUpper()),
                        new Claim(JwtRegisteredClaimNames.UniqueName, user.UserName),
                        new Claim(JwtRegisteredClaimNames.Email, user.Email),
                        new Claim(JwtRegisteredClaimNames.Iat, DateTime.UtcNow.ToString(CultureInfo.CurrentCulture))
                    };

                    // TODO: Custom fields
                    if (!string.IsNullOrEmpty(user.FirstName))
                    {
                        claims.Add(new Claim(JwtRegisteredClaimNames.GivenName, user.FirstName));
                    }
                    if (!string.IsNullOrEmpty(user.LastName))
                    {
                        claims.Add(new Claim(JwtRegisteredClaimNames.FamilyName, user.LastName));
                    }

                    // Registration successful, no email confirmation required => Generate JWT token based on the user's claims
                    string token = this.GenerateJWT(claims);

                    registeredVM.Token = token;
                }

                registeredVM.User = mapper.Map <User, UserVM>(user);

                return(registeredVM);
            }

            logger.LogWarning("User registration is invalid", user);

            throw new RegistrationFailedException("invalid");
        }