示例#1
0
 internal LockService(IDiskService disk, CacheService cache, TimeSpan timeout, Logger log)
 {
     _disk    = disk;
     _cache   = cache;
     _log     = log;
     _timeout = timeout;
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="FileSystemType"/> class.
        /// </summary>
        /// <param name="fileSystemService">The application layer DiskService.</param>
        /// <param name="logger">The NLog logger instance.</param>
        public FileSystemType(IDiskService fileSystemService, ILogger logger)
        {
            this.Field(x => x.Name);
            this.Field(x => x.Type);
            this.Field(x => x.Total);

            this.Field <FileSystemStatusType>()
            .Name("Status")
            .ResolveAsync(async context =>
            {
                logger.Debug("File System status field");

                return(await fileSystemService.GetLastFileSystemStatusAsync(context.Source.Name));
            });

            this.Connection <FileSystemStatusType>()
            .Name("Statuses")
            .Bidirectional()
            .ResolveAsync(async context =>
            {
                logger.Debug("File System statuses connection");

                var pagingInput = context.GetPagingInput();
                var statuses    = await fileSystemService.GetFileSystemStatusesAsync(context.Source.Name, pagingInput);

                return(statuses.ToConnection());
            });
        }
示例#3
0
 /// <summary>
 /// Starts LiteDB database using full parameters
 /// </summary>
 public LiteDatabase(IDiskService diskService)
 {
     this.InitializeMapper();
     _engine = new Lazy <DbEngine>(
         () => new DbEngine(diskService, _log),
         false);
 }
示例#4
0
 /// <summary>
 /// Starts LiteDB database using full parameters
 /// </summary>
 public LiteDatabase(IDiskService diskService, ushort version = 0)
 {
     _engine = new LazyLoad <DbEngine>(
         () => new DbEngine(diskService, _log),
         () => this.InitializeMapper(),
         () => this.UpdateDbVersion(version));
 }
示例#5
0
 /// <summary>
 /// Starts LiteDB database using full parameters
 /// </summary>
 public LiteDatabase(IDiskService diskService)
 {
     this.InitializeMapper();
     _engine = new Lazy<DbEngine>(
         () => new DbEngine(diskService, _log),
         false);
 }
示例#6
0
        /// <summary>
        /// Starts LiteDB database using a custom IDiskService
        /// </summary>
        public LiteDatabase(IDiskService diskService, BsonMapper mapper = null)
        {
            LitePlatform.ThrowIfNotInitialized();

            _mapper = mapper ?? BsonMapper.Global;
            _engine = new LazyLoad <DbEngine>(() => new DbEngine(diskService, _log));
        }
示例#7
0
 public LockService(IDiskService disk, TimeSpan timeout, Logger log)
 {
     _disk    = disk;
     _log     = log;
     _timeout = timeout;
     _state   = LockState.Unlocked;
 }
示例#8
0
 /// <summary>
 /// Starts LiteDB database using full parameters
 /// </summary>
 public LiteDatabase(IDiskService diskService, ushort version = 0)
 {
     _engine = new LazyLoad<DbEngine>(
         () => new DbEngine(diskService, _log),
         () => this.InitializeMapper(),
         () => this.UpdateDbVersion(version));
 }
示例#9
0
        //private Logger _log;

        public PageService(IDiskService disk, AesEncryption crypto, CacheService cache, Logger log)
        {
            _disk   = disk;
            _crypto = crypto;
            _cache  = cache;
            //_log = log;
        }
示例#10
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DiskWorker"/> class.
 /// </summary>
 /// <param name="diskService">The application layer DiskService.</param>
 /// <param name="configuration">The IConfiguration instance.</param>
 /// <param name="logger">The NLog logger instance.</param>
 public DiskWorker(
     IDiskService diskService,
     IConfiguration configuration,
     ILogger logger)
     : base(diskService, configuration, logger)
 {
 }
示例#11
0
        /// <summary>
        /// Initialize LiteEngine using custom disk service implementation and full engine options
        /// </summary>
        public LiteEngine(IDiskService disk, string password = null, TimeSpan?timeout = null, int cacheSize = 5000, Logger log = null, bool utcDate = false)
        {
            if (disk == null)
            {
                throw new ArgumentNullException("disk");
            }

            _timeout    = timeout ?? TimeSpan.FromMinutes(1);
            _cacheSize  = cacheSize;
            _disk       = disk;
            _log        = log ?? new Logger();
            _bsonReader = new BsonReader(utcDate);

            try
            {
                // initialize datafile (create) and set log instance
                _disk.Initialize(_log, password);

                // lock disk (read mode) before read header
                var position = _disk.Lock(LockState.Read, _timeout);

                var buffer = _disk.ReadPage(0);

                _disk.Unlock(LockState.Read, position);

                // create header instance from array bytes
                var header = BasePage.ReadPage(buffer) as HeaderPage;

                // hash password with sha1 or keep as empty byte[20]
                var sha1 = password == null ? new byte[20] : AesEncryption.HashSHA1(password);

                // compare header password with user password even if not passed password (datafile can have password)
                if (sha1.BinaryCompareTo(header.Password) != 0)
                {
                    throw LiteException.DatabaseWrongPassword();
                }

                // initialize AES encryptor
                if (password != null)
                {
                    _crypto = new AesEncryption(password, header.Salt);
                }

                // initialize all services
                this.InitializeServices();

                // if header are marked with recovery, do it now
                if (header.Recovery)
                {
                    _trans.Recovery();
                }
            }
            catch (Exception)
            {
                // explicit dispose
                this.Dispose();
                throw;
            }
        }
示例#12
0
 public RepositoryContext(string repositoryDirectory, string remoteRepositoryUrl, Credentials credentials, IGitService gitService, IDiskService diskService)
 {
     this.RepositoryDirectory = repositoryDirectory;
     this.RemoteRepositoryUrl = remoteRepositoryUrl;
     this.credentials         = credentials;
     this.gitService          = gitService;
     this.diskService         = diskService;
 }
 internal TransactionService(IDiskService disk, PageService pager, CacheService cache)
 {
     _disk  = disk;
     _pager = pager;
     _cache = cache;
     _cache.MarkAsDirtyAction  = page => _disk.WriteJournal(page.PageID, page.DiskData);
     _cache.DirtyRecicleAction = () => Save();
 }
示例#14
0
 internal TransactionService(IDiskService disk, AesEncryption crypto, PageService pager, int cacheSize, Logger log)
 {
     _disk = disk;
     _crypto = crypto;
     _pager = pager;
     _cacheSize = cacheSize;
     _log = log;
 }
示例#15
0
 internal LockService(IDiskService disk, CacheService cache, TimeSpan timeout, LoggerWrap log)
 {
     _disk    = disk;
     _cache   = cache;
     _log     = log;
     _timeout = timeout;
     _state   = LockState.Unlocked;
 }
 internal TransactionService(IDiskService disk, PageService pager, CacheService cache)
 {
     _disk = disk;
     _pager = pager;
     _cache = cache;
     _cache.MarkAsDirtyAction = (page) => _disk.WriteJournal(page.PageID, page.DiskData);
     _cache.DirtyRecicleAction = () => this.Save();
 }
示例#17
0
 internal TransactionService(IDiskService disk, AesEncryption crypto, PageService pager, int cacheSize, Logger log)
 {
     _disk      = disk;
     _crypto    = crypto;
     _pager     = pager;
     _cacheSize = cacheSize;
     _log       = log;
 }
 protected SynchronizationService(IFileSystem fileSystem, UserDto user, SynchronizationCallbacks callbacks, IDiskService diskServiceClient)
 {
     _fileSystem = fileSystem;
     _user = user;
     _callbacks = callbacks;
     _lock = _fileSystem.GetReadWriteLock();
     _diskService = diskServiceClient;
 }
示例#19
0
 /// <summary>
 /// Starts LiteDB database using full parameters
 /// </summary>
 public LiteDatabase(IDiskService diskService)
 {
     this.InitializeMapper();
     _engine = new LazyLoad <DbEngine>(
         () => new DbEngine(diskService, _log),
         () => this.InitializeMapper(),
         () => this.InitializeDbVersion());
 }
 public ConfigurationReader(
     IDiskService diskService,
     IFileValidator fileValidator,
     IStringValidator stringValidator)
 {
     _diskService     = diskService;
     _fileValidator   = fileValidator;
     _stringValidator = stringValidator;
 }
示例#21
0
 public EnvWriter(
     IDiskService diskService,
     IStringValidator stringValidator,
     IObjectValidator objectValidator)
 {
     _diskService     = diskService;
     _stringValidator = stringValidator;
     _objectValidator = objectValidator;
 }
        public DiskBrowserViewModel(IDiskService diskService, UserDto user)
        {
            if (diskService == null) throw new ArgumentNullException("diskService");
            if (user == null) throw new ArgumentNullException("user");

            _disks = new ObservableCollection<DiskDto>(diskService.Disks(user));

            SelectItemCommand = new Command(SelectItem, o => SelectedDisk != null);
        }
示例#23
0
        public MasterRepository(IGitHubService gitHubService, IGitService gitService, IDiskService diskService, string dataPath)
        {
            this.RepositoryDataDirectory       = Path.Combine(dataPath, "repositories");
            this.TaskRepositoriesDataDirectory = Path.Combine(RepositoryDataDirectory, "tasks");
            this.MasterRepositoryDirectory     = Path.Combine(this.RepositoryDataDirectory, "master");

            this.gitHubService = gitHubService;
            this.gitService    = gitService;
            this.diskService   = diskService;
        }
示例#24
0
        public ProductService(IProductRepository productRepository, IDiskService diskServices, IUnitOfWork unitOfWork, ILogServices logService, IOptions <AppSettings> appSettings)
        {
            _productRepository = productRepository;

            _diskServices = diskServices;


            _unitOfWork  = unitOfWork;
            _logService  = logService;
            _appSettings = appSettings;
        }
示例#25
0
        /// <summary>
        /// Starts LiteDB database using a custom IDiskService with all parameters available
        /// </summary>
        /// <param name="diskService">Custom implementation of persist data layer</param>
        /// <param name="mapper">Instance of BsonMapper that map poco classes to document</param>
        /// <param name="password">Password to encrypt you datafile</param>
        /// <param name="timeout">Locker timeout for concurrent access</param>
        /// <param name="cacheSize">Max memory pages used before flush data in Journal file (when available)</param>
        /// <param name="log">Custom log implementation</param>
        public LiteDatabase(IDiskService diskService, BsonMapper mapper = null, string password = null, TimeSpan?timeout = null, int cacheSize = 5000, Logger log = null)
        {
            if (diskService == null)
            {
                throw new ArgumentNullException("diskService");
            }

            _mapper = mapper ?? BsonMapper.Global;

            _engine = new LazyLoad <LiteEngine>(() => new LiteEngine(diskService, password: password, timeout: timeout, cacheSize: cacheSize, log: _log));
        }
 public ProfileReader(
     IDiskService diskService,
     IFileValidator fileValidator,
     IStringValidator stringValidator,
     IObjectValidator objectValidator)
 {
     _diskService     = diskService;
     _fileValidator   = fileValidator;
     _stringValidator = stringValidator;
     _objectValidator = objectValidator;
 }
示例#27
0
        public void Init()
        {
            _validatorsMock = new Mock <IValidators>();
            _fileSystemMock = new MockFileSystem(new Dictionary <string, MockFileData>
            {
                { ValidFilePath, new MockFileData(FileContent) },
            });

            _sut = new Environmentalist.Services.DiskService.DiskService(
                _fileSystemMock,
                _validatorsMock.Object);
        }
示例#28
0
        /// <summary>
        /// Reduce disk size re-arranging unused spaces. Can change password. If temporary disk was not provided, use MemoryStream temp disk
        /// </summary>
        public long Shrink(string password = null, IDiskService temp = null)
        {
            var originalSize = _disk.FileLength;

            // if temp disk are not passed, use memory stream disk
            temp = temp ?? new StreamDiskService(new MemoryStream());

            using (_locker.Reserved())
                using (_locker.Exclusive())
                    using (var engine = new LiteEngine(temp, password))
                    {
                        // read all collection
                        foreach (var collectionName in this.GetCollectionNames())
                        {
                            // first create all user indexes (exclude _id index)
                            foreach (var index in this.GetIndexes(collectionName).Where(x => x.Field != "_id"))
                            {
                                engine.EnsureIndex(collectionName, index.Field, index.Unique);
                            }

                            // now copy documents
                            var docs = this.Find(collectionName, Query.All());

                            engine.InsertBulk(collectionName, docs);
                        }

                        // copy user version
                        engine.UserVersion = this.UserVersion;

                        // set current disk size to exact new disk usage
                        _disk.SetLength(temp.FileLength);

                        // read new header page to start copy
                        var header = BasePage.ReadPage(temp.ReadPage(0)) as HeaderPage;

                        // copy (as is) all pages from temp disk to original disk
                        for (uint i = 0; i <= header.LastPageID; i++)
                        {
                            var page = temp.ReadPage(i);

                            _disk.WritePage(i, page);
                        }

                        // create/destroy crypto class
                        _crypto = password == null ? null : new AesEncryption(password, header.Salt);

                        // initialize all services again (crypto can be changed)
                        this.InitializeServices();

                        // return how many bytes are reduced
                        return(originalSize - temp.FileLength);
                    }
        }
示例#29
0
文件: Shrink.cs 项目: apkd/LiteDB
        /// <summary>
        /// Reduce disk size re-arranging unused spaces. Can change password. If temporary disk was not provided, use MemoryStream temp disk
        /// </summary>
        public long Shrink(string password = null, IDiskService temp = null)
        {
            var originalSize = _disk.FileLength;

            // if temp disk are not passed, use memory stream disk
            temp = temp ?? new StreamDiskService(new MemoryStream());

            using(_locker.Write())
            using (var engine = new LiteEngine(temp, password))
            {
                // read all collection
                foreach (var collectionName in this.GetCollectionNames())
                {
                    // first create all user indexes (exclude _id index)
                    foreach (var index in this.GetIndexes(collectionName).Where(x => x.Field != "_id"))
                    {
                        engine.EnsureIndex(collectionName, index.Field, index.Unique);
                    }

                    // copy all docs
                    engine.Insert(collectionName, this.Find(collectionName, Query.All()));
                }

                // copy user version
                engine.UserVersion = this.UserVersion;

                // set current disk size to exact new disk usage
                _disk.SetLength(temp.FileLength);

                // read new header page to start copy
                var header = BasePage.ReadPage(temp.ReadPage(0)) as HeaderPage;

                // copy (as is) all pages from temp disk to original disk
                for (uint i = 0; i <= header.LastPageID; i++)
                {
                    var page = temp.ReadPage(i);

                    _disk.WritePage(i, page);
                }

                // create/destroy crypto class
                _crypto = password == null ? null : new AesEncryption(password, header.Salt);

                // initialize all services again (crypto can be changed)
                this.InitializeServices();
            }

            // return how many bytes are reduced
            return originalSize - temp.FileLength;
        }
示例#30
0
        /// <summary>
        /// Initialize LiteEngine using custom disk service implementation and full engine options
        /// </summary>
        public LiteEngine(IDiskService disk, string password = null, TimeSpan?timeout = null, int cacheSize = 5000, Logger log = null)
        {
            if (disk == null)
            {
                throw new ArgumentNullException("disk");
            }

            _timeout   = timeout ?? TimeSpan.FromMinutes(1);
            _cacheSize = cacheSize;
            _disk      = disk;
            _log       = log ?? new Logger();

            try
            {
                // initialize datafile (create) and set log instance
                _disk.Initialize(_log, password);

                // read header page
                var header = BasePage.ReadPage(_disk.ReadPage(0)) as HeaderPage;

                // hash password with sha1 or keep as empty byte[20]
                var sha1 = password == null ? new byte[20] : AesEncryption.HashSHA1(password);

                // compare header password with user password even if not passed password (datafile can have password)
                if (sha1.BinaryCompareTo(header.Password) != 0)
                {
                    throw LiteException.DatabaseWrongPassword();
                }

                // initialize AES encryptor
                if (password != null)
                {
                    _crypto = new AesEncryption(password, header.Salt);
                }

                // initialize all services
                this.InitializeServices();

                // try recovery if has journal file
                _trans.Recovery();
            }
            catch (Exception)
            {
                // explicit dispose
                this.Dispose();
                throw;
            }
        }
示例#31
0
        protected Database(IDiskService service, string password = null, BsonMapper mapper = null)
        {
            if (mapper == null)
            {
                mapper = new BsonMapper {
                    SerializeNullValues = true
                };
                mapper.UseCamelCase();
            }

            this.DiskService  = service;
            this.LiteDatabase = new LiteDatabase(this.DiskService, mapper, password);

            // ReSharper disable once VirtualMemberCallInConstructor
            this.Initialize();
        }
 public Pbkdf2Repository(
     IPbkdf2Service pbkdF2Service,
     IEnvironmentVariableReader environmentVariableReader,
     IFileSystem fileSystem,
     IDiskService diskService,
     IFileValidator fileValidator,
     IStringValidator stringValidator,
     IObjectValidator objectValidator)
 {
     _pbkdF2Service             = pbkdF2Service;
     _environmentVariableReader = environmentVariableReader;
     _fileSystem      = fileSystem;
     _diskService     = diskService;
     _fileValidator   = fileValidator;
     _stringValidator = stringValidator;
     _objectValidator = objectValidator;
 }
示例#33
0
文件: LiteEngine.cs 项目: apkd/LiteDB
        /// <summary>
        /// Initialize LiteEngine using custom disk service implementation and full engine options
        /// </summary>
        public LiteEngine(IDiskService disk, string password = null, TimeSpan? timeout = null, bool autocommit = true, int cacheSize = 5000, Logger log = null)
        {
            _timeout = timeout ?? TimeSpan.FromMinutes(1);
            _cacheSize = cacheSize;
            _autocommit = autocommit;
            _disk = disk;
            _log = log ?? new Logger();
            _locker = new Locker(_timeout);

            // initialize datafile (create) and set log instance
            _disk.Initialize(_log, password);

            // read header page
            var header = BasePage.ReadPage(_disk.ReadPage(0)) as HeaderPage;

            // hash password with sha1 or keep as empty byte[20]
            var sha1 = password == null ? new byte[20] : AesEncryption.HashSHA1(password);

            // compare header password with user password even if not passed password (datafile can have password)
            if (sha1.BinaryCompareTo(header.Password) != 0)
            {
                // explicit dispose
                _disk.Dispose();
                throw LiteException.DatabaseWrongPassword();
            }

            // initialize AES encryptor
            if (password != null)
            {
                _crypto = new AesEncryption(password, header.Salt);
            }

            // initialize all services
            this.InitializeServices();

            if (_disk.IsJournalEnabled)
            {
                // try recovery if has journal file
                _trans.Recovery();
            }
        }
示例#34
0
文件: DbEngine.cs 项目: WongKyle/xoff
        public DbEngine(IDiskService disk, Logger log)
        {
            // initialize disk service and check if database exists
            var isNew = disk.Initialize();

            // new database? create new datafile
            if (isNew)
            {
                disk.CreateNew();
            }

            _log  = log;
            _disk = disk;

            // initialize all services
            _cache       = new CacheService();
            _pager       = new PageService(_disk, _cache);
            _indexer     = new IndexService(_pager);
            _data        = new DataService(_pager);
            _collections = new CollectionService(_pager, _indexer, _data);
            _transaction = new TransactionService(_disk, _pager, _cache);
        }
示例#35
0
        public DbEngine(IDiskService disk, Logger log)
        {
            // initialize disk service and check if database exists
            var isNew = disk.Initialize();

            // new database? just create header page and save it
            if (isNew)
            {
                disk.WritePage(0, new HeaderPage().WritePage());
            }

            _log  = log;
            _disk = disk;

            // initialize all services
            _cache       = new CacheService();
            _pager       = new PageService(_disk, _cache);
            _indexer     = new IndexService(_pager);
            _data        = new DataService(_pager);
            _collections = new CollectionService(_pager, _indexer, _data);
            _transaction = new TransactionService(_disk, _pager, _cache);

            // check user verion
        }
 public SynchronizationServiceMock(IFileSystem fileSystem, UserDto user, SynchronizationCallbacks callbacks, IDiskService diskService)
     : base(fileSystem, user, callbacks, diskService)
 {
 }
 public TorLiteDatabase(IDiskService diskService, BsonMapper mapper = null)
     : base(diskService, mapper)
 {
 }
        private void Dispose(bool disposing)
        {
            // If you need thread safety, use a lock around these
            // operations, as well as in your methods that use the resource.

            if (!disposing) return;

            // free managed resources

            if (_diskService != null)
            {
                var service = _diskService as DiskServiceClient;
                if (service != null) service.Close();

                _diskService = null;
            }
        }
示例#39
0
 public PageService(IDiskService disk, /*AesEncryption crypto,*/ Logger log)
 {
     _disk = disk;
     //_crypto = crypto;
     _log = log;
 }
示例#40
0
        public MainViewModel(IUnityContainer container)
        {
            _container = container;
            Items = new ObservableCollection<ListItem>();
            SearchOption = new SearchOption { CaseSensitive = false, Recursive = true, Keyword = "", Global = false };

            OpenVfsCommand = new Command(OpenVfs, p => _manipulator == null);
            NewVfsCommand = new Command(NewVfs, p => _manipulator == null);
            CloseVfsCommand = new Command(CloseVfs, p => _manipulator != null);
            NewFolderCommand = new Command(NewFolder, p => (_manipulator != null));
            OpenCommand = new Command(Open, p => (_manipulator != null && p != null));
            RenameCommand = new Command(Rename, IsItemSelected);
            ImportFileCommand = new Command(ImportFile, p => (_manipulator != null));
            ImportFolderCommand = new Command(ImportFolder, p => (_manipulator != null));
            ExportCommand = new Command(Export, IsItemSelected);
            DeleteCommand = new Command(Delete, IsItemSelected);
            MoveCommand = new Command(Move, IsItemSelected);
            CopyCommand = new Command(Copy, IsItemSelected);
            PasteCommand = new Command(Paste, p => (_manipulator != null && _clipboard.Count > 0));
            SearchCommand = new Command(Search, p => (_manipulator != null));
            CancelSearchCommand = new Command(CancelSearch, p => (_manipulator != null));
            DiskInfoCommand = new Command(DiskInfo, p => (_manipulator != null));
            SwitchToVersionCommand = new Command(SwitchToVersion, p => (_manipulator != null));
            RollBackToVersionCommand = new Command(RollBackToVersion, p => (_manipulator != null));
            SwitchToLatestVersionCommand = new Command(SwitchToLatestVersion, p => (_manipulator != null));

            LoginCommand = new Command(Login, p => (_user == null));
            LogoutCommand = new Command(Logout, p => (_user != null));
            RegisterCommand = new Command(Register, p => (_user == null));
            LinkDiskCommand = new Command(LinkDisk, p => (_manipulator == null && _user != null));
            SwitchToOnlineModeCommand = new Command(SwitchToOnlineMode, p => (_manipulator != null && _user != null && _synchronization == null));
            SwitchToOfflineModeCommand = new Command(SwitchToOfflineMode, p => (_manipulator != null && _user != null && _synchronization != null));

            DropCommand = new Command(Drop, null);

            _diskService = new DiskServiceClient();
        }
示例#41
0
 public LiteDbModel(IDiskService diskService, BsonMapper mapper = null, string password = null,
                    TimeSpan?timeout = null, int cacheSize = 5000, Logger log = null) : base(diskService, mapper, password,
                                                                                             timeout, cacheSize, log)
 {
     AddReferences();
 }
 public CacheService(IDiskService disk, Logger log)
 {
     _disk = disk;
     _log  = log;
 }