Exemplo n.º 1
0
        private IEnumerable <object> OrganizationAndFolderFilter(OrganizationIdentifier organizationIdentifier, FolderIdentifier folderIdentifier)
        {
            if (organizationIdentifier?.IsValid ?? false)
            {
                yield return new
                       {
                           term = new
                           {
                               organizationKey = new
                               {
                                   value = organizationIdentifier.OrganizationKey
                               }
                           }
                       }
            }
            ;

            if (folderIdentifier?.IsValid ?? false)
            {
                yield return new
                       {
                           term = new
                           {
                               folderKey = new
                               {
                                   value = folderIdentifier.FolderKey
                               }
                           }
                       }
            }
            ;
        }
        public async Task <Organization> GetBy(OrganizationIdentifier organizationIdentifier)
        {
            var organizationDto =
                await _context.Organizations.FirstAsync(x => x.OrganizationId == organizationIdentifier.Id);

            return(new Organization(organizationDto.OrganizationId, organizationDto.OrganizationName, organizationDto.IsEnabled));
        }
Exemplo n.º 3
0
 public User(string username, string email, string password, Guid organizationId)
 {
     Identifier             = new UserIdentifier();
     Credentials            = new Credentials(username, email);
     Password               = new Password(password);
     OrganizationIdentifier = new OrganizationIdentifier(organizationId);
 }
Exemplo n.º 4
0
 private async Task <bool> OrganizationPrivilegeCheck(OrganizationIdentifier identifier, string privilegeName)
 {
     return((
                await GetStore <IOrganizationStore>()
                .GetOneAsync(identifier)
                )
            .PrivilegeCheck(privilegeName, SecurityContext));
 }
Exemplo n.º 5
0
        public void Constructor_sets_new_id()
        {
            // Arrange / Act

            var result = new OrganizationIdentifier();

            // Assert

            result.Id.ShouldNotBe(Guid.Empty);
        }
Exemplo n.º 6
0
        public async Task <IEnumerable <ManagerFolderModel> > QueryAllAsync(OrganizationIdentifier organizationIdentifier, CancellationToken cancellationToken = default(CancellationToken))
        {
            // todo: should be push an organization identifier into here to make these canonical?
            var organization = await Connection.Organization.GetAsync(organizationIdentifier,
                                                                      new List <PopulationDirective>
            {
                { new PopulationDirective(nameof(OrganizationModel.Folders)) }
            },
                                                                      cancellationToken : cancellationToken);

            return(organization.Folders.Rows.Select(ModelConvert).ToList());
        }
Exemplo n.º 7
0
        private async Task <BackendConfiguration> LoadConfigurationAsync(OrganizationIdentifier organizationIdentifier)
        {
            var privateFolder = await OrganizationPrivateMetadata.PrivateFolderLoadAsync(organizationIdentifier);

            var configuration = privateFolder.Read <BackendConfiguration>(MetadataKeyConstants.BACKEND_CONFIGURATION);

            if (configuration == null)
            {
                throw new ConfigurationException($"{organizationIdentifier} does not have backend configuration");
            }

            return(configuration);
        }
Exemplo n.º 8
0
        public void Constructor_sets_id()
        {
            // Arrange

            var id = Guid.NewGuid();

            // Act

            var result = new OrganizationIdentifier(id);

            // Assert

            result.Id.ShouldBe(id);
        }
Exemplo n.º 9
0
        private async Task IndexOrganization(ISearch driver, OrganizationIdentifier organizationIdentifier)
        {
            var pageIndex = 0;
            var done      = false;

            await driver.DeleteOrganizationAsync(API.UserAccessIdentifiers, organizationIdentifier);

            while (!done)
            {
                var organization = await API.Organization.GetAsync(organizationIdentifier, new List <PopulationDirective>
                {
                    new PopulationDirective
                    {
                        Name   = nameof(OrganizationModel.Folders),
                        Paging = new PagingArguments
                        {
                            PageSize  = QUERY_PAGE_SIZE,
                            PageIndex = pageIndex
                        }
                    }
                });

                if (organization != null)
                {
                    foreach (var batch in organization.Folders.Rows.Batch(ENQUEUE_BATCH_SIZE))
                    {
                        await API.Queue.EnqueueAsync(batch.Select(folder => new QueuePair
                        {
                            QueueName = "Index",
                            Message   = JsonConvert.SerializeObject(new IndexMessage
                            {
                                Action = IndexMessage.IndexActions.IndexFolder,

                                // queue expects a null in the FileKey to indicated a FolderIdentifier
                                // todo: weak typing
                                Identifier = new FileIdentifier(folder.Identifier, null)
                            })
                        }));
                    }

                    pageIndex++;
                    done = organization.Folders.Rows.Count() < QUERY_PAGE_SIZE;
                }
                else
                {
                    done = true;
                }
            }
        }
Exemplo n.º 10
0
        // duplicated in User
        private async Task <long> OrganizationIDLookup(OrganizationIdentifier identifier)
        {
            var organizationEntity = await Database.Organization
                                     .Where(o => o.OrganizationKey == identifier.OrganizationKey)
                                     .FirstOrDefaultAsync();

            if (organizationEntity == null)
            {
                throw new StoreException("Organization does not exist");
            }
            else
            {
                return(organizationEntity.OrganizationID);
            }
        }
Exemplo n.º 11
0
        public void Equals_returns_false_for_different_values()
        {
            // Arrange

            var sut   = new OrganizationIdentifier(Guid.NewGuid());
            var other = new OrganizationIdentifier(Guid.NewGuid());

            // Act

            var result = sut.Equals(other);

            // Assert

            result.ShouldBeFalse();
        }
Exemplo n.º 12
0
        public void Equals_returns_true_for_same_value()
        {
            // Arrange

            var id    = Guid.NewGuid();
            var sut   = new OrganizationIdentifier(id);
            var other = new OrganizationIdentifier(id);

            // Act

            var result = sut.Equals(other);

            // Assert

            result.ShouldBeTrue();
        }
Exemplo n.º 13
0
 async Task ISearch.DeleteOrganizationAsync(
     string[] securityIdentifiers,
     OrganizationIdentifier organizationIdentifier
     )
 {
     Logger.LogInformation($"Delete {organizationIdentifier}");
     var response = await client.DeleteByQueryAsync <Document>(s => s
                                                               .Query(q => q
                                                                      .Bool(b => b
                                                                            .Filter(
                                                                                f => f.Term(d => d.OrganizationKey, organizationIdentifier.OrganizationKey),
                                                                                f => DoSecurity(f, securityIdentifiers)
                                                                                )
                                                                            )
                                                                      )
                                                               );
 }
        public void Constructor_reconstitutes_Organization()
        {
            // Arrange

            var organizationIdentifier = new OrganizationIdentifier();
            var organizationName       = new OrganizationName(Guid.NewGuid().ToString());
            var isEnabled = false;

            // Act

            var result = new Organization(organizationIdentifier.Id, organizationName.Name, isEnabled);

            // Assert

            result.Identifier.ShouldBe(organizationIdentifier);
            result.Name.ShouldBe(organizationName);
            result.IsEnabled.ShouldBe(isEnabled);
        }
        public async Task <FolderModel> PrivateFolderLoadAsync(OrganizationIdentifier organizationIdentifier)
        {
            var folderIdentifier = new FolderIdentifier(organizationIdentifier, PRIVATE_FOLDERKEY);

            FolderStore.PrivilegeRead = "gateway";

            var folder = await FolderStore.GetOneAsync(folderIdentifier);

            if (folder == null)
            {
                folder = await FolderStore.InsertAsync(new FolderModel
                {
                    Identifier = folderIdentifier
                });
            }

            return(folder);
        }
Exemplo n.º 16
0
        public async Task UpgradeFoldersAsync(OrganizationIdentifier organizationIdentifier)
        {
            await api.ConcurrencyRetryBlock(async() =>
            {
                var organization = await api.Organization.GetAsync(organizationIdentifier, new[]
                {
                    new PopulationDirective(nameof(OrganizationModel.Folders))
                });

                foreach (var folder in organization.Folders.Rows)
                {
                    var dirty = false;

                    bool isEDiscovery = folder.Read <object>("ediscovery[recipients]") != null ||
                                        folder.Read <object>("ediscovery[packagemap]") != null;

                    if (isEDiscovery)
                    {
                        if (!folder.Privilege("read")?.Any(a => a.OverrideKey == "edisc") ?? false)
                        {
                            folder.WriteACLs("read", new[] {
                                new ACLModel
                                {
                                    OverrideKey         = "edisc",
                                    RequiredIdentifiers = new List <string>
                                    {
                                        "u:system",
                                        "x:eDiscovery",
                                        $"r:eDiscovery{{{folder.Identifier.FolderKey}}}"
                                    }
                                }
                            });

                            dirty = true;
                        }
                    }

                    if (dirty)
                    {
                        await api.Folder.PutAsync(folder);
                    }
                }
            });
        }
        public IEnumerable <User> GetBy(OrganizationIdentifier organizationIdentifier)
        {
            var dtos = _context.Users.Where(x => x.OrganizationId.Equals(organizationIdentifier.Id));

            return(dtos.Select(x => new User(x.UserId, x.Username, x.Email, x.HashedPassword, x.OrganizationId)));
        }
Exemplo n.º 18
0
 private async Task DeleteOrganization(ISearch driver, OrganizationIdentifier organizationIdentifier)
 {
     await driver.DeleteOrganizationAsync(API.UserAccessIdentifiers, organizationIdentifier);
 }
Exemplo n.º 19
0
 public Task <int> GetUploadChunkSizeAsync(OrganizationIdentifier organizationIdentifier, CancellationToken cancellationToken = default(CancellationToken))
 => Connection.APICallAsync <int>(HttpMethod.Get, APIEndpoint.FileUploadChunkSize, queryStringContent: organizationIdentifier, cancellationToken: cancellationToken);
Exemplo n.º 20
0
        public static AuditLogEntryModel ToModel(this AuditLogEntry entity)
        {
            if (entity != null)
            {
                var model = new AuditLogEntryModel
                {
                    Identifier = new AuditLogEntryIdentifier
                    {
                        OrganizationKey = entity.OrganizationKey,
                        AuditLogID      = entity.AuditLogEntryID
                    },
                    ActionType = entity.ActionType,
                    Generated  = entity.Generated,
                    UserAgent  = entity.UserAgent,
                    InitiatorUserIdentifier = new UserIdentifier
                    {
                        OrganizationKey = entity.InitiatorOrganizationKey,
                        UserKey         = entity.InitiatorUserKey
                    },
                    Details     = entity.Details,
                    Description = entity.Description,
                };

                var fileIdentifier = new FileIdentifier
                {
                    OrganizationKey = entity.OrganizationKey,
                    FolderKey       = entity.FolderKey,
                    FileKey         = entity.FileKey
                };
                model.FileIdentifier = fileIdentifier.IsValid
                    ? fileIdentifier
                    : null;

                var folderIdentifier = new FolderIdentifier
                {
                    OrganizationKey = entity.OrganizationKey,
                    FolderKey       = entity.FolderKey,
                };
                model.FolderIdentifier = folderIdentifier.IsValid
                    ? folderIdentifier
                    : null;

                var organizationIdentifier = new OrganizationIdentifier
                {
                    OrganizationKey = entity.OrganizationKey,
                };
                model.OrganizationIdentifier = organizationIdentifier.IsValid
                    ? organizationIdentifier
                    : null;

                var userIdentifier = new UserIdentifier
                {
                    OrganizationKey = entity.OrganizationKey,
                    UserKey         = entity.UserKey,
                };
                model.UserIdentifier = userIdentifier.IsValid
                    ? userIdentifier
                    : null;



                return(model);
            }
            else
            {
                return(null);
            }
        }
Exemplo n.º 21
0
 public Task <IEnumerable <ManagerFolderModel> > List(OrganizationIdentifier organizationIdentifier, CancellationToken cancellationToken)
 {
     return(Service.QueryAllAsync(organizationIdentifier, cancellationToken));
 }
Exemplo n.º 22
0
        public async Task UpgradeUsersAsync(OrganizationIdentifier organizationIdentifier)
        {
            await api.ConcurrencyRetryBlock(async() =>
            {
                var organization = await api.Organization.GetAsync(organizationIdentifier, new[]
                {
                    new PopulationDirective(nameof(OrganizationModel.Users))
                });

                foreach (var user in organization.Users.Rows)
                {
                    var dirty       = false;
                    var identifiers = user.UserAccessIdentifiers.ToList();

                    if (user.Identifier.UserKey == $"{organizationIdentifier.OrganizationKey}:Bridge")
                    {
                        if (!user.UserAccessIdentifiers.Any(i => i == "x:pcms"))
                        {
                            identifiers.Add(
                                "x:pcms"
                                );
                            dirty = true;
                        }
                    }

                    bool isEDiscoveryUser = identifiers.Any(u => u == "r:eDiscovery");
                    // if this is an eDiscovery recipient
                    if (isEDiscoveryUser)
                    {
                        var isFolderSpecific = identifiers.Any(u => u.StartsWith("r:eDiscovery{"));
                        if (!isFolderSpecific)
                        {
                            var matches   = Regex.Match(user.Identifier.UserKey, @"^(Defendant:\d*):");
                            var folderKey = matches.Groups[1].Value;

                            identifiers.Add(
                                $"r:eDiscovery{{{folderKey}}}" // yields r:eDiscovery{value}
                                );

                            dirty = true;
                        }

                        // exempt this ediscovery recipient from pcms rules
                        if (!user.UserAccessIdentifiers.Any(i => i == "x:pcms"))
                        {
                            identifiers.Add(
                                "x:pcms"
                                );
                            dirty = true;
                        }
                    }
                    else
                    {
                        // exempt this pcms user from ediscovery rules
                        if (!user.UserAccessIdentifiers.Any(i => i == "x:eDiscovery"))
                        {
                            identifiers.Add(
                                "x:eDiscovery"
                                );
                            dirty = true;
                        }
                    }

                    bool isLEOUser = identifiers.Any(u => u == "r:leoUpload");
                    if (!isLEOUser)
                    {
                        if (!identifiers.Any(u => u == "x:leo"))
                        {
                            identifiers.Add(
                                "x:leo"
                                );
                            dirty = true;
                        }
                    }

                    if (dirty)
                    {
                        await api.User.PutAsync(user);
                        var updatedUser = await api.User.AccessIdentifiersPutAsync(user.Identifier, identifiers);
                    }
                }
            });
        }
Exemplo n.º 23
0
 public Task <int> GetChunkSize(OrganizationIdentifier identifier, CancellationToken cancellationToken)
 {
     return(FileContentsService.UploadChunkSizeGetAsync());
 }