public async Task <string> CreateLinkWithToken(Project project, string emailAddress) { var token = new EmailInvite(2, emailAddress); project.InviteTokens.Add(token); await _projRepo.Update(project.Id, project); return($"/invite/{project.Id}/{token.Token}?email={emailAddress}"); }
public void InviteUser(EmailInvite invite) { var serverAddress = Configuration.GetServerAddress(); var body = $"<p>You have been invited to use Paco. Use this link to setup account.</p><a href=\"{serverAddress}/Identity/Account/Invite?invite={invite.Id}\">Click here</a>"; var subject = $"Paco invite"; using var db = DbContextFactory.CreateDbContext(); var inviteWithUser = db.EmailInvites.Where(x => x == invite).Include(x => x.Inviter).Include(x => x.Target).First(); QueueEmail(subject, body, inviteWithUser.Target); }
public async Task <IActionResult> ValidateToken(string projectId, string token) { var project = await _projRepo.GetProject(projectId); if (project is null) { return(NotFound(projectId)); } var isTokenValid = false; var tokenObj = new EmailInvite(); foreach (var tok in project.InviteTokens) { if (tok.Token == token && DateTime.Now < tok.ExpireTime) { isTokenValid = true; tokenObj = tok; break; } } var users = await _userRepo.GetAllUsers(); var currentUser = new User(); var isUserRegistered = false; foreach (var user in users) { if (user.Email == tokenObj.Email) { currentUser = user; isUserRegistered = true; break; } } var status = new EmailInviteStatus(isTokenValid, isUserRegistered); if (isTokenValid && !isUserRegistered) { return(Ok(status)); } if (isTokenValid && isUserRegistered && !currentUser.ProjectRoles.ContainsKey(projectId) && await _inviteService.RemoveTokenAndCreateUserRole(project, currentUser, tokenObj)) { return(Ok(status)); } return(Ok(new EmailInviteStatus(false, false))); }
public async void SendEmail(string emailInvited, string nameInvited, string nameUser, string cpf, string telephone, string cep, string emailInviter) { EmailInvite.Enviar(emailInvited, nameInvited, nameUser, cpf, telephone, cep, emailInviter); }
public async Task <bool> RemoveTokenAndCreateUserRole(Project project, User user, EmailInvite emailInvite) { try { var userRole = new UserRole { Permissions = new List <Permission> { Permission.MergeAndCharSet, Permission.Unused, Permission.WordEntry }, ProjectId = project.Id }; userRole = await _userRoleRepo.Create(userRole); // Generate the userRoles and update the user user.ProjectRoles.Add(project.Id, userRole.Id); await _userRepo.Update(user.Id, user); // Generate the JWT based on those new userRoles var updatedUser = await _permissionService.MakeJwt(user); if (updatedUser is null) { throw new PermissionService.InvalidJwtTokenError( "Unable to generate JWT."); } await _userRepo.Update(updatedUser.Id, updatedUser); // Removes token and updates user project.InviteTokens.Remove(emailInvite); await _projRepo.Update(project.Id, project); return(true); } catch (PermissionService.InvalidJwtTokenError) { return(false); } }