示例#1
0
        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}");
        }
示例#2
0
        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);
        }
示例#3
0
        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)));
        }
示例#4
0
 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);
 }
示例#5
0
        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);
            }
        }