public async Task <IActionResult> Invite([FromBody] InviteCreateDto invite) { var userByEmail = await _db.Users.SingleOrDefaultAsync(u => u.Email == invite.Email); if (userByEmail != null) { throw new Exception("User with provided email is already registered"); } var existingToken = await _db.InviteTokens.SingleOrDefaultAsync(t => t.Email == invite.Email); if (existingToken != null) { existingToken.TimeCreated = DateTime.UtcNow; await _db.SaveChangesAsync(); return(Ok(existingToken)); } var inviteToken = new InviteTokens { Token = _passwordHasher.HashPassword(new Users { Email = invite.Email }, Guid.NewGuid().ToString()).Replace("+", string.Empty).Replace("=", string.Empty).Replace("/", string.Empty), Email = invite.Email, TimeCreated = DateTime.UtcNow }; _db.InviteTokens.Add(inviteToken); await _db.SaveChangesAsync(); string currentUrl = Request.Scheme + "://" + Request.Host.Host + "/signup/" + inviteToken.Token; await _mail.SendAsync(invite.Email, "Signup KMS", "<a href='" + @currentUrl + "'>Signup link</a>"); return(Ok(inviteToken)); }