public async Task CreateFileMonitor(FileMonitorDto fileMonitorDto)
        {
            if (fileMonitorDto == null)
            {
                throw new ArgumentNullException(nameof(fileMonitorDto));
            }

            var server = await _legacyContext.GameServers.SingleOrDefaultAsync(s => s.ServerId == fileMonitorDto.ServerId);

            if (server == null)
            {
                throw new NullReferenceException(nameof(server));
            }

            var fileMonitor = new FileMonitors
            {
                FileMonitorId = Guid.NewGuid(),
                FilePath      = fileMonitorDto.FilePath,
                BytesRead     = fileMonitorDto.BytesRead,
                LastRead      = DateTime.UtcNow.AddHours(-4),
                //LastError = string.Empty;
                GameServerServer = server
            };

            _legacyContext.FileMonitors.Add(fileMonitor);
            await _legacyContext.SaveChangesAsync();
        }
        public async Task <IActionResult> Edit(FileMonitorDto model)
        {
            var fileMonitorDto = await _fileMonitorsRepository.GetFileMonitor(model.FileMonitorId);

            if (fileMonitorDto == null)
            {
                return(NotFound());
            }

            if (!ModelState.IsValid)
            {
                await AddGameServersViewData(model.ServerId);

                return(View(fileMonitorDto));
            }

            var canEditFileMonitor = await _authorizationService.AuthorizeAsync(User, fileMonitorDto, AuthPolicies.EditFileMonitor);

            if (!canEditFileMonitor.Succeeded)
            {
                return(Unauthorized());
            }

            fileMonitorDto.FilePath = model.FilePath;

            await _fileMonitorsRepository.UpdateFileMonitor(fileMonitorDto);

            _logger.LogInformation(EventIds.Management, "User {User} has updated {FileMonitorId} against {ServerId}", User.Username(), fileMonitorDto.FileMonitorId, fileMonitorDto.ServerId);
            this.AddAlertSuccess($"The file monitor has been created for {fileMonitorDto.GameServer.Title}");

            return(RedirectToAction(nameof(Index)));
        }
        public async Task <IActionResult> Create(FileMonitorDto model)
        {
            var gameServerDto = await _gameServersRepository.GetGameServer(model.ServerId);

            if (gameServerDto == null)
            {
                return(NotFound());
            }

            if (!ModelState.IsValid)
            {
                await AddGameServersViewData(model.ServerId);

                return(View(model));
            }

            var fileMonitorDto       = new FileMonitorDto().WithServerDto(gameServerDto);
            var canCreateFileMonitor = await _authorizationService.AuthorizeAsync(User, fileMonitorDto, AuthPolicies.CreateFileMonitor);

            if (!canCreateFileMonitor.Succeeded)
            {
                return(Unauthorized());
            }

            fileMonitorDto.FilePath = model.FilePath;

            await _fileMonitorsRepository.CreateFileMonitor(fileMonitorDto);

            _logger.LogInformation(EventIds.Management, "User {User} has created a new file monitor with Id {Id}", User.Username(), fileMonitorDto.FileMonitorId);
            this.AddAlertSuccess($"The file monitor has been created for {gameServerDto.Title}");

            return(RedirectToAction(nameof(Index)));
        }
        public static FileMonitorDto WithServerDto(this FileMonitorDto fileMonitorDto, GameServerDto gameServerDto)
        {
            fileMonitorDto.GameServer = gameServerDto;
            fileMonitorDto.ServerId   = gameServerDto.ServerId;

            return(fileMonitorDto);
        }
Esempio n. 5
0
        private void CheckFolder(string path, FileMonitorDto dto)
        {
            CheckFiles(Directory.GetFiles(path), dto);
            var dirs = Directory.GetDirectories(path);

            foreach (string dir in dirs)
            {
                CheckFolders(dir, dto);
            }
        }
Esempio n. 6
0
        public static FileMonitorDto ToDto(this FileMonitors fileMonitor)
        {
            var fileMonitorDto = new FileMonitorDto
            {
                FileMonitorId = fileMonitor.FileMonitorId,
                FilePath      = fileMonitor.FilePath,
                BytesRead     = fileMonitor.BytesRead,
                LastRead      = fileMonitor.LastRead,
                ServerId      = fileMonitor.GameServerServer.ServerId,
                GameServer    = fileMonitor.GameServerServer.ToDto()
            };

            return(fileMonitorDto);
        }
        public async Task UpdateFileMonitor(FileMonitorDto fileMonitorDto)
        {
            if (fileMonitorDto == null)
            {
                throw new ArgumentNullException(nameof(fileMonitorDto));
            }

            var fileMonitor = await _legacyContext.FileMonitors.SingleOrDefaultAsync(fm => fm.FileMonitorId == fileMonitorDto.FileMonitorId);

            if (fileMonitor == null)
            {
                throw new NullReferenceException(nameof(fileMonitor));
            }

            fileMonitor.FilePath = fileMonitorDto.FilePath;

            await _legacyContext.SaveChangesAsync();
        }
Esempio n. 8
0
        private void CheckFolders(string path, FileMonitorDto dto)
        {
            var pathTypeDir = path.IsPathDirOrFile();

            if (pathTypeDir == null)
            {
                _msgs.Add($"FileMonitoring => Directory or file not found or accessible {path}");
                return;
            }
            if (!pathTypeDir.Value)
            {
                CheckFiles(new[] { path }, dto);
                return;
            }

            if (dto.ScanSubdirectories)
            {
                CheckFolder(path, dto);
            }
        }
Esempio n. 9
0
        private void CheckFiles(string[] files, FileMonitorDto dto)
        {
            var regex    = new Regex(dto.Filter, RegexOptions.IgnoreCase);
            var negRegex = new Regex(dto.NegativeFilter, RegexOptions.IgnoreCase);

            foreach (var file in files)
            {
                if (_msgs.Count >= _maxNrOfErrMsgs)
                {
                    return;
                }
                var fileName = Path.GetFileName(file) + "";
                if (regex.IsMatch(fileName))
                {
                    if (!negRegex.IsMatch(file))
                    {
                        _msgs.AddRange(ValidateFileAge(file, TimeSpan.FromHours(dto.FileOverdueInHours)));
                    }
                }
            }
        }