예제 #1
0
        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));
        }