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); }