public async Task <OrganizationUser> InviteUserAsync(Guid organizationId, Guid invitingUserId, string email,
                                                             Enums.OrganizationUserType type, IEnumerable <SubvaultUser> subvaults)
        {
            if (!(await OrganizationUserHasAdminRightsAsync(organizationId, invitingUserId)))
            {
                throw new BadRequestException("Cannot invite users.");
            }

            // TODO: make sure user is not already invited

            // TODO: validate subvaults?

            var orgUser = new OrganizationUser
            {
                OrganizationId = organizationId,
                UserId         = null,
                Email          = email,
                Key            = null,
                Type           = type,
                Status         = Enums.OrganizationUserStatusType.Invited,
                CreationDate   = DateTime.UtcNow,
                RevisionDate   = DateTime.UtcNow
            };

            await _organizationUserRepository.CreateAsync(orgUser);

            await SaveUserSubvaultsAsync(orgUser, subvaults, true);
            await SendInviteAsync(organizationId, email);

            return(orgUser);
        }
Exemple #2
0
        public async Task <OrganizationUser> InviteUserAsync(Guid organizationId, Guid invitingUserId, string email,
                                                             Enums.OrganizationUserType type, IEnumerable <SubvaultUser> subvaults)
        {
            if (!(await OrganizationUserHasAdminRightsAsync(organizationId, invitingUserId)))
            {
                throw new BadRequestException("Cannot invite users.");
            }

            // Make sure user is not already invited
            var existingOrgUser = await _organizationUserRepository.GetByOrganizationAsync(organizationId, email);

            if (existingOrgUser != null)
            {
                throw new BadRequestException("User already invited.");
            }

            var orgSubvaults = await _subvaultRepository.GetManyByOrganizationIdAsync(organizationId);

            var filteredSubvaults = subvaults.Where(s => orgSubvaults.Any(os => os.Id == s.SubvaultId));

            var orgUser = new OrganizationUser
            {
                OrganizationId = organizationId,
                UserId         = null,
                Email          = email,
                Key            = null,
                Type           = type,
                Status         = Enums.OrganizationUserStatusType.Invited,
                CreationDate   = DateTime.UtcNow,
                RevisionDate   = DateTime.UtcNow
            };

            await _organizationUserRepository.CreateAsync(orgUser);

            await SaveUserSubvaultsAsync(orgUser, filteredSubvaults, true);
            await SendInviteAsync(orgUser);

            return(orgUser);
        }