Пример #1
0
        protected override Clue MakeClueImpl(FileSystemItem <FileInfo> input, Guid accountId)
        {
            if (input == null)
            {
                throw new ArgumentNullException(nameof(input));
            }

            var value      = input.Item;
            var uriBuilder = new FileSystemInfoUriBuilder();
//            var indexer = new FileInfoBlobIndexer();

            var clue = _factory.Create(EntityType.Files.File, uriBuilder.GetUri(value).AbsoluteUri, accountId);

            var uri = uriBuilder.GetUri(value);

            var data = clue.Data;

            data.EntityData.Name        = value.Name; // + crawl.FileSystemInfo.Extension;
            data.EntityData.DisplayName = value.Name;
            data.EntityData.Uri         = uri;
            data.EntityData.Culture     = CultureInfo.InvariantCulture;

            var attributes = value.Attributes;

            var isReadOnly = (attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly;
            var isHidden   = (attributes & FileAttributes.Hidden) == FileAttributes.Hidden;
            var isArchive  = (attributes & FileAttributes.Archive) == FileAttributes.Archive;
            var isSystem   = (attributes & FileAttributes.System) == FileAttributes.System;

            var vocab         = new FileInfoVocabulary();
            var securityVocab = new FileSecurityVocabulary();

            data.EntityData.Properties[vocab.IsReadOnly] = isReadOnly.ToString();
            data.EntityData.Properties[vocab.IsHidden]   = isHidden.ToString();
            data.EntityData.Properties[vocab.IsArchive]  = isArchive.ToString();
            data.EntityData.Properties[vocab.IsSystem]   = isSystem.ToString();

            data.EntityData.Properties[securityVocab.OwnerSID]         = input.Owner.PrintIfAvailable(v => v.Sid.ToString());
            data.EntityData.Properties[securityVocab.OwnerNTAccount]   = input.Owner.PrintIfAvailable(v => v.Account?.ToString());
            data.EntityData.Properties[securityVocab.OwnerDisplayName] = input.Owner.PrintIfAvailable(v => v.Principal?.DisplayName);

            data.EntityData.Properties[vocab.CreationTimeUtc]  = value.CreationTimeUtc.ToString("o");
            data.EntityData.Properties[vocab.LastWriteTimeUtc] = value.LastWriteTimeUtc.ToString("o");

            try
            {
                var parentUri = uriBuilder.GetUri(value.Directory);

                _factory.CreateOutgoingEntityReference(clue, EntityType.Files.Directory, EntityEdgeType.Parent, parentUri, p => p.AbsoluteUri, p => value.Directory.Name);
            }
            catch (PathTooLongException)
            {
            }

            if (input.Owner != null && input.Owner.Sid != null)
            {
                _factory.CreateOutgoingEntityReference(clue, EntityType.Infrastructure.User, EntityEdgeType.OwnedBy, input.Owner, p => p.Sid.ToString(), p => p?.Principal?.DisplayName ?? p?.Principal?.Name ?? p?.Principal?.SamAccountName ?? p?.Account?.ToString());
            }

//            indexer.Index(value, clue, state);

            return(clue);
        }
Пример #2
0
        protected override Clue MakeClueImpl(FileSystemItem <DirectoryInfo> input, Guid accountId)
        {
            if (input == null)
            {
                throw new ArgumentNullException(nameof(input));
            }

            var value      = input.Item;
            var uriBuilder = new FileSystemInfoUriBuilder();

            var clue = _factory.Create(EntityType.Files.Directory, uriBuilder.GetUri(value).AbsoluteUri, accountId);

            var data = clue.Data.EntityData;

            var uri = uriBuilder.GetUri(value);

            data.Name        = value.Name; // + crawl.FileSystemInfo.Extension;
            data.DisplayName = value.Name;
            data.Uri         = uri;
            data.Culture     = CultureInfo.InvariantCulture;

            var attributes = value.Attributes;

            var isReadOnly = (attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly;
            var isHidden   = (attributes & FileAttributes.Hidden) == FileAttributes.Hidden;
            var isArchive  = (attributes & FileAttributes.Archive) == FileAttributes.Archive;
            var isSystem   = (attributes & FileAttributes.System) == FileAttributes.System;

            var vocab         = new DirectoryInfoVocabulary();
            var securityVocab = new FileSecurityVocabulary();

            data.Properties[vocab.IsReadOnly] = isReadOnly.ToString();
            data.Properties[vocab.IsHidden]   = isHidden.ToString();
            data.Properties[vocab.IsArchive]  = isArchive.ToString();
            data.Properties[vocab.IsSystem]   = isSystem.ToString();

            data.Properties[securityVocab.OwnerSID]         = input.Owner.PrintIfAvailable(v => v.Sid.ToString());
            data.Properties[securityVocab.OwnerNTAccount]   = input.Owner.PrintIfAvailable(v => v.Account?.ToString());
            data.Properties[securityVocab.OwnerDisplayName] = input.Owner.PrintIfAvailable(v => v.Principal?.DisplayName);

            data.Properties[vocab.CreationTimeUtc]  = value.CreationTimeUtc.ToString("o");
            data.Properties[vocab.LastWriteTimeUtc] = value.LastWriteTimeUtc.ToString("o");


            clue.ValidationRuleSuppressions.AddRange(new[]
            {
                RuleConstants.METADATA_002_Uri_MustBeSet
            });

            try
            {
                if (IsDirectoryInfoEntry(input, value.FullName))
                {
                    _factory.CreateOutgoingEntityReference(clue, EntityType.Infrastructure.Host.Computer, EntityEdgeType.Parent, Environment.MachineName, p => p);
                }
                else if (value.Parent != null)
                {
                    var parentUri = uriBuilder.GetUri(value.Parent);
                    _factory.CreateOutgoingEntityReference(clue, EntityType.Files.Directory, EntityEdgeType.Parent, parentUri, p => p.AbsoluteUri, p => value.Parent.Name);
                }
            }
            catch (PathTooLongException)
            {
            }

            if (input.Owner != null && input.Owner.Sid != null)
            {
                _factory.CreateOutgoingEntityReference(clue, EntityType.Infrastructure.User, EntityEdgeType.OwnedBy, input.Owner, p => p.Sid.ToString(), p => p?.Principal?.DisplayName ?? p?.Principal?.Name ?? p?.Principal?.SamAccountName ?? p?.Account?.ToString());
            }

            return(clue);
        }