Example #1
0
 public static RFMonitoredFile ReadFromConfig(RFEnum fileKey, IRFUserConfig config, Func <string, string> nameTransform = null, bool throwIfFail = true)
 {
     try
     {
         var m = new RFMonitoredFile
         {
             FileKey          = fileKey,
             FileNameWildcard = config.GetString(CONFIG_SECTION, fileKey, false, "FileNameWildcard"),
             FileNameRegex    = config.GetString(CONFIG_SECTION, fileKey, false, "FileNameRegex"),
             GetSubDirectory  = config.GetString(CONFIG_SECTION, fileKey, false, "GetSubDirectory") ?? config.GetString(CONFIG_SECTION, fileKey, false, "SubDirectory"),
             PutSubDirectory  = config.GetString(CONFIG_SECTION, fileKey, false, "PutSubDirectory"),
             NameTransform    = nameTransform,
             Recursive        = config.GetBool(CONFIG_SECTION, fileKey, false, false, "RecursiveSearch"),
             RemoveExpired    = config.GetBool(CONFIG_SECTION, fileKey, false, false, "RemoveExpired"),
             LatestOnly       = config.GetBool(CONFIG_SECTION, fileKey, false, false, "LatestOnly"),
             ContentPasswords = config.GetString(CONFIG_SECTION, fileKey, false, "ContentPasswords"),
         };
         if (string.IsNullOrWhiteSpace(m.FileNameWildcard) && string.IsNullOrWhiteSpace(m.FileNameRegex) && throwIfFail)
         {
             throw new RFSystemException(typeof(RFMonitoredFile), "Invalid monitored file {0} configuration: missing file name.", fileKey.ToString());
         }
         return(m);
     }
     catch (Exception)
     {
         if (throwIfFail)
         {
             throw;
         }
     }
     return(null);
 }
Example #2
0
        public override void PutFile(RFFileAvailableEvent file, RFMonitoredFile fileConfig, byte[] data)
        {
            var directory = Path.Combine(RootDirectory, fileConfig.PutSubDirectory ?? String.Empty);

            Directory.CreateDirectory(directory);
            var path = Path.Combine(directory, file.FileAttributes.FileName); // file name could have subdirectories

            Directory.CreateDirectory(Path.GetDirectoryName(path));
            InternalPutFile(path, file, data);
        }
Example #3
0
 protected RFFileAvailableEvent ProcessCandidate(RFMonitoredFile file, RFFileTrackedAttributes candidate, ref List <RFFileAvailableEvent> foundFiles)
 {
     if (!IsStillWrittenTo(candidate))
     {
         var fae = new RFFileAvailableEvent
         {
             FileKey        = file.FileKey,
             FileAttributes = candidate,
             SourceSite     = SiteKey
         };
         foundFiles.Add(fae);
         return(fae);
     }
     return(null);
 }
        public override void PutFile(RFFileAvailableEvent file, RFMonitoredFile fileConfig, byte[] data)
        {
            var uniqueKey = GenerateUniqueKey(file);
            var fileEntry = new RFFile
            {
                Attributes = file.FileAttributes,
                FileKey    = file.FileKey,
                Data       = data,
                UniqueKey  = uniqueKey
            };

            mContext.SaveEntry(RFDocument.Create(
                                   RFFileKey.Create(mKeyDomain, file.FileKey, uniqueKey),
                                   fileEntry));
        }
Example #5
0
        public override void PutFile(RFFileAvailableEvent file, RFMonitoredFile fileConfig, byte[] data)
        {
            var directory = GetUnixDirectory(fileConfig.PutSubDirectory);

            if (UseTemporaryName)
            {
                var tmpFileName = file.FileAttributes.FileName + ".tmp";
                _connection.PutFile(directory, tmpFileName, data);
                _connection.MoveFile(
                    RFFileHelpers.GetUnixPath(directory, tmpFileName),
                    RFFileHelpers.GetUnixPath(directory, file.FileAttributes.FileName));
            }
            else
            {
                _connection.PutFile(directory, file.FileAttributes.FileName, data);
            }
        }
Example #6
0
        public override void PutFile(RFFileAvailableEvent file, RFMonitoredFile fileConfig, byte[] data)
        {
            var fileName = file.FileAttributes.FileName;

            if (fileName.Contains('.'))
            {
                fileName = fileName.Substring(0, fileName.LastIndexOf('.')) + file.FileAttributes.ModifiedDate.ToString("_HHmmss") + fileName.Substring(fileName.LastIndexOf('.'));
            }
            else
            {
                fileName += file.FileAttributes.ModifiedDate.ToString("_HHmmsss");
            }

            // mirror path is \modified-date\source-site\relative-location\<org_filename>_HHmmss.<ext>
            var mirrorDirectory = Path.Combine(file.FileAttributes.ModifiedDate.ToString("yyyy-MM-dd"), file.SourceSite.ToString(), fileConfig.PutSubDirectory ?? String.Empty);
            var mirrorPath      = Path.Combine(mirrorDirectory, fileName);

            PutMirroredFile(mirrorPath, file, data);
        }
        private bool ProcessFile(RFFileAvailableEvent availableFile, byte[] data, RFMonitoredFile monitoredFile, RFSeenFiles seenFiles)
        {
            string finalName = null;

            data      = DecryptFile(data, availableFile.FileAttributes, out finalName);
            finalName = monitoredFile.TransformName(finalName);

            var decryptedFile = new RFFileAvailableEvent
            {
                FileKey        = availableFile.FileKey,
                FileAttributes = new RFFileTrackedAttributes
                {
                    FileName     = finalName,
                    FileSize     = data.Length,
                    FullPath     = availableFile.FileAttributes.FullPath,
                    ModifiedDate = availableFile.FileAttributes.ModifiedDate
                },
                SourceSite = availableFile.SourceSite
            };

            Log.Info("Storing new file {0} to {1}", finalName, mConfig.DestinationSite);
            mConfig.DestinationSite.PutFile(decryptedFile, monitoredFile, data);

            // mark original encrypted version as seen
            MarkSeenFile(seenFiles, availableFile); // only if successful on both fronts

            if (mConfig.DestinationSite is RFDocumentFileSite || mConfig.DestinationSite is RFLocalFileSite)
            {
                Log.Action("Download", "File Transfer", RFDate.NullDate, "Downloaded file {0} from {1}", availableFile.FileAttributes.FileName, mConfig.SourceSite);
            }
            else if (mConfig.SourceSite is RFDocumentFileSite || mConfig.SourceSite is RFLocalFileSite)
            {
                Log.Action("Upload", "File Transfer", RFDate.NullDate, "Uploaded file {0} to {1}", availableFile.FileAttributes.FileName, mConfig.DestinationSite);
            }
            else
            {
                Log.Action("Copy", "File Transfer", RFDate.NullDate, "Copied file {0} from {1} to {2}", availableFile.FileAttributes.FileName, mConfig.SourceSite, mConfig.DestinationSite);
            }

            return(true);
        }
Example #8
0
 public abstract void PutFile(RFFileAvailableEvent file, RFMonitoredFile fileConfig, byte[] data);
Example #9
0
        private IEnumerable <FileInfo> FilterForFile(IEnumerable <FileInfo> allFiles, RFMonitoredFile file)
        {
            var expectedDirectory = (file.GetSubDirectory ?? "").ToLower().Trim('/', '\\', '.');

            var candidates = new List <FileInfo>();

            foreach (var candidateFile in allFiles)
            {
                if (FitsMask(candidateFile.Name, file.FileNameWildcard))
                {
                    // is it in required subdirectory?
                    var relativePath = TrimRelativePath(GetRelativePath(RootDirectory, candidateFile.DirectoryName).ToLower());

                    if (relativePath == expectedDirectory || (file.Recursive && relativePath.StartsWith(expectedDirectory, StringComparison.OrdinalIgnoreCase)))
                    {
                        candidates.Add(candidateFile);
                    }
                }
            }
            return(candidates);
        }