Exemplo n.º 1
0
        public async Task <OrganizationUser> SaveUserAsync(OrganizationUser user, IEnumerable <SubvaultUser> subvaults)
        {
            if (user.Id.Equals(default(Guid)))
            {
                throw new BadRequestException("Invite the user first.");
            }

            await _organizationUserRepository.ReplaceAsync(user);

            var orgSubvaults = await _subvaultRepository.GetManyByOrganizationIdAsync(user.OrganizationId);

            var currentUserSubvaults = await _subvaultUserRepository.GetManyByOrganizationUserIdAsync(user.Id);

            // Let's make sure all these belong to this user and organization.
            var filteredSubvaults = subvaults.Where(s =>
                                                    orgSubvaults.Any(os => os.Id == s.SubvaultId) &&
                                                    (s.Id == default(Guid) || currentUserSubvaults.Any(cs => cs.Id == s.Id)));

            var subvaultsToDelete = currentUserSubvaults.Where(cs => !subvaults.Any(s => s.Id == cs.Id));

            foreach (var subvault in filteredSubvaults)
            {
                await _subvaultUserRepository.UpsertAsync(subvault);
            }

            foreach (var subvault in subvaultsToDelete)
            {
                await _subvaultUserRepository.DeleteAsync(subvault);
            }

            return(user);
        }
Exemplo n.º 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);
        }
Exemplo n.º 3
0
        public async Task <ListResponseModel <SubvaultResponseModel> > Get(string orgId)
        {
            var orgIdGuid = new Guid(orgId);

            if (!_currentContext.OrganizationAdmin(orgIdGuid))
            {
                throw new NotFoundException();
            }

            var subvaults = await _subvaultRepository.GetManyByOrganizationIdAsync(orgIdGuid);

            var responses = subvaults.Select(s => new SubvaultResponseModel(s));

            return(new ListResponseModel <SubvaultResponseModel>(responses));
        }
Exemplo n.º 4
0
        private async Task SaveUserSubvaultsAsync(OrganizationUser user, IEnumerable <SubvaultUser> subvaults, bool newUser)
        {
            if (subvaults == null)
            {
                subvaults = new List <SubvaultUser>();
            }

            var orgSubvaults = await _subvaultRepository.GetManyByOrganizationIdAsync(user.OrganizationId);

            var currentUserSubvaults = newUser ? null : await _subvaultUserRepository.GetManyByOrganizationUserIdAsync(user.Id);

            // Let's make sure all these belong to this user and organization.
            var filteredSubvaults = subvaults.Where(s => orgSubvaults.Any(os => os.Id == s.SubvaultId));

            foreach (var subvault in filteredSubvaults)
            {
                var existingSubvaultUser = currentUserSubvaults?.FirstOrDefault(cs => cs.SubvaultId == subvault.SubvaultId);
                if (existingSubvaultUser != null)
                {
                    subvault.Id           = existingSubvaultUser.Id;
                    subvault.CreationDate = existingSubvaultUser.CreationDate;
                }

                subvault.OrganizationUserId = user.Id;
                await _subvaultUserRepository.UpsertAsync(subvault);
            }

            if (!newUser)
            {
                var subvaultsToDelete = currentUserSubvaults.Where(cs =>
                                                                   !filteredSubvaults.Any(s => s.SubvaultId == cs.SubvaultId));
                foreach (var subvault in subvaultsToDelete)
                {
                    await _subvaultUserRepository.DeleteAsync(subvault);
                }
            }
        }