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); }
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); }
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)); }
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); } }
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); }
public abstract void PutFile(RFFileAvailableEvent file, RFMonitoredFile fileConfig, byte[] data);
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); }