Exemplo n.º 1
0
        public async Task <IUser> RegisterAsync(UserCreateRequest model)
        {
            var exists = await _userService.GetByEmail(model.EmailAddress);

            User user;
            var  userClaim = new UserClaim {
                ClaimToken = _encryptionUtil.GetUniqueKey(5),
                CreatedAt  = DateTime.UtcNow
            };

            if (exists != null)
            {
                if (exists.Active == false)
                {
                    foreach (var uc in exists.UserClaims)
                    {
                        uc.IsClaimed = true;
                    }
                    userClaim.ClaimType = "UpdateUser".ToLower();
                    exists.UserClaims.Add(userClaim);
                    exists.Password = _encryptionUtil.Encrypt(model.Password);
                    user            = await _userService.Update(exists);
                }
                else
                {
                    // TODO: send email to existing user
                    return(null);
                }
            }
            else
            {
                var toSave = _mapper.Map <User>(model);
                toSave.Password          = _encryptionUtil.Encrypt(model.Password);
                toSave.Role              = "user";
                toSave.CreatedAt         = DateTime.UtcNow;
                toSave.PasswordChangedAt = DateTime.UtcNow;
                toSave.UpdatedAt         = DateTime.UtcNow;
                toSave.EmailAddress      = toSave.EmailAddress.ToLower();
                toSave.EmailVerified     = false;
                toSave.Active            = true;
                userClaim.ClaimType      = "NewUser".ToLower();
                toSave.UserClaims.Add(userClaim);
                user = await _userService.Create(toSave);
            }
            user = await _userService.GetById(user.Id);

            var result = _mapper.Map <IUser>(user);
            await _notifyService.EmailVerification(result, user.UserClaims.Last());

            return(result);
        }