/// <summary> /// Saves the dictionary according to its filename /// </summary> public void Save() { Util.DontNotify(() => { if (Watcher != null) { Watcher.StopWatching(); } Updater updater = new Updater(true); updater.visit(this); VersionedWriter writer = new VersionedWriter(FilePath); unParse(writer, false); writer.Close(); updater = new Updater(false); updater.visit(this); if (Watcher != null) { Watcher.StartWatching(); } foreach (DeleteFilesHandler file in FilesToDelete) { file.DeleteFile(); } FilesToDelete.Clear(); }); }
public static void RegisterFilesToDelete(this IUnitOfWork unitOfWork, FilesToDelete filesToDelete) { unitOfWork.OnCommit += delegate() { try { filesToDelete.KeepNewFiles(); filesToDelete.Dispose(); } catch { } }; unitOfWork.OnRollback += delegate() { try { filesToDelete.Dispose(); } catch { } }; }
public override void OnBeforeSave(ISaveRequestHandler handler) { var field = (StringField)(handler.Row.FindField(this.filesField) ?? handler.Row.FindFieldByPropertyName(filesField)); if (!handler.Row.IsAssigned(field)) { return; } var oldFilesJSON = (handler.IsCreate ? null : field[handler.Old]).TrimToNull(); var newFilesJSON = field[handler.Row] = field[handler.Row].TrimToNull(); if (oldFilesJSON.IsTrimmedSame(newFilesJSON)) { field[handler.Row] = oldFilesJSON; return; } var oldFileList = ParseAndValidate(oldFilesJSON, "oldFiles"); var newFileList = ParseAndValidate(newFilesJSON, "newFiles"); var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete); handler.StateBag[this.GetType().FullName + "_FilesToDelete"] = filesToDelete; foreach (var file in oldFileList) { var filename = file.Filename.Trim(); if (newFileList.Any(x => String.Compare(x.Filename.Trim(), filename, StringComparison.OrdinalIgnoreCase) == 0)) { continue; } var actualOldFile = ((subFolder != null && !storeSubFolderInDB) ? (subFolder + "/") : "") + filename; filesToDelete.RegisterOldFile(actualOldFile); if (copyFilesToHistory) { var oldFilePath = UploadHelper.ToPath(actualOldFile); string date = DateTime.UtcNow.ToString("yyyyMM", Invariants.DateTimeFormat); string historyFile = "history/" + date + "/" + Path.GetFileName(oldFilePath); if (File.Exists(UploadHelper.DbFilePath(oldFilePath))) { UploadHelper.CopyFileAndRelated(UploadHelper.DbFilePath(oldFilePath), UploadHelper.DbFilePath(historyFile), overwrite: true); } } } if (newFileList.IsEmptyOrNull()) { field[handler.Row] = null; return; } if (handler.IsUpdate) { field[handler.Row] = CopyTemporaryFiles(handler, oldFileList, newFileList, filesToDelete); } }
private static List <Entities.MailAttachmentsRow> AttachFiles(BodyBuilder builder, string attachments, FilesToDelete filesToDelete, string fileNameFormat) { var result = new List <Entities.MailAttachmentsRow>(); if (string.IsNullOrEmpty(attachments)) { return(result); } var list = JSON.Parse <UploadedFile[]>(attachments); foreach (var att in list) { if (!att.Filename.ToLowerInvariant().StartsWith("temporary/")) { throw new InvalidOperationException("Only temporary files can be used for upload!"); } UploadHelper.CheckFileNameSecurity(att.Filename); var path = UploadHelper.DbFilePath(att.Filename); string originalName; var origFile = System.IO.Path.ChangeExtension(path, ".orig"); if (System.IO.File.Exists(origFile)) { using (var sr = new System.IO.StreamReader(System.IO.File.OpenRead(origFile))) originalName = sr.ReadLine(); } else { originalName = "att" + (builder.Attachments.Count + 1) + System.IO.Path.GetExtension(path); } var bytes = System.IO.File.ReadAllBytes(path); var attachment = builder.Attachments.Add(originalName, bytes); MimeKit.Parameter param; if (attachment.ContentDisposition.Parameters.TryGetValue("filename", out param)) { param.EncodingMethod = ParameterEncodingMethod.Rfc2047; } var copyResult = new UploadHelper(fileNameFormat).CopyTemporaryFile( att.Filename, -1, filesToDelete); result.Add(new Entities.MailAttachmentsRow { MimeType = attachment.ContentType.MimeType, Size = bytes.Length, OriginalFileName = originalName, FilePath = copyResult.DbFileName }); } return(result); }
public override void OnBeforeSave(ISaveRequestHandler handler) { var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete); handler.StateBag[this.GetType().FullName + "_FilesToDelete"] = filesToDelete; var filename = (StringField)(handler.Row.FindField(this.fileNameField) ?? handler.Row.FindFieldByPropertyName(fileNameField)); var oldFilename = handler.IsCreate ? null : filename[handler.Old]; var newFilename = filename[handler.Row] = filename[handler.Row].TrimToNull(); if (oldFilename.IsTrimmedSame(newFilename)) { filename[handler.Row] = oldFilename; return; } if (!oldFilename.IsEmptyOrNull()) { var actualOldFile = ((subFolder != null && !storeSubFolderInDB) ? (subFolder + "/") : "") + oldFilename; filesToDelete.RegisterOldFile(actualOldFile); if (copyFileToHistory) { var oldFilePath = UploadHelper.ToPath(actualOldFile); string date = DateTime.UtcNow.ToString("yyyyMM", Invariants.DateTimeFormat); string historyFile = "history/" + date + "/" + Path.GetFileName(oldFilePath); if (File.Exists(UploadHelper.DbFilePath(oldFilePath))) { UploadHelper.CopyFileAndRelated(UploadHelper.DbFilePath(oldFilePath), UploadHelper.DbFilePath(historyFile), overwrite: true); } } } if (newFilename == null) { if (oldFilename.IsTrimmedEmpty()) { return; } filename[handler.Row] = null; return; } if (!newFilename.ToLowerInvariant().StartsWith("temporary/")) { throw new InvalidOperationException("For security reasons, only temporary files can be used in uploads!"); } if (handler.IsUpdate) { var copyResult = CopyTemporaryFile(handler, filesToDelete); filename[handler.Row] = copyResult.DbFileName; } }
public void SetOutputFilePath(string path) { _outputFilePath = path; FilesToDelete.Add(path); if (OutputFilePath != null && File.Exists(OutputFilePath)) { FileSize = new FileInfo(OutputFilePath).Length; } }
public DGIIndexJob(string input, string output, int demuxType, List <AudioTrackInfo> audioTracks, bool loadSources, bool demuxVideo) { Input = input; Output = output; DemuxMode = demuxType; AudioTracks = audioTracks; LoadSources = loadSources; DemuxVideo = demuxVideo; FilesToDelete.Add(System.IO.Path.Combine(System.IO.Path.GetDirectoryName(input), System.IO.Path.GetFileNameWithoutExtension(input) + ".log")); }
public override void OnBeforeSave(ISaveRequestHandler handler) { var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete); handler.StateBag[this.GetType().FullName + "_" + Target.Name + "_FilesToDelete"] = filesToDelete; var filename = (StringField)(Target); var oldFilename = handler.IsCreate ? null : filename[handler.Old]; var newFilename = filename[handler.Row] = filename[handler.Row].TrimToNull(); if (oldFilename.IsTrimmedSame(newFilename)) { filename[handler.Row] = oldFilename; return; } DeleteOldFile(filesToDelete, oldFilename); if (newFilename == null) { if (oldFilename.IsTrimmedEmpty()) { return; } filename[handler.Row] = null; if (!ReferenceEquals(null, originalNameField)) { originalNameField[handler.Row] = null; } return; } if (!newFilename.ToLowerInvariant().StartsWith("temporary/")) { throw new InvalidOperationException("For security reasons, only temporary files can be used in uploads!"); } if (!ReferenceEquals(null, originalNameField)) { var originalName = File.ReadAllText(Path.ChangeExtension( UploadHelper.DbFilePath(newFilename), ".orig")).TrimToNull(); originalNameField[handler.Row] = originalName; } if (handler.IsUpdate) { var copyResult = CopyTemporaryFile(handler, filesToDelete); filename[handler.Row] = copyResult.DbFileName; } }
private CopyTemporaryFileResult CopyTemporaryFile(ISaveRequestHandler handler, FilesToDelete filesToDelete) { var filename = (StringField)(handler.Row.FindField(this.fileNameField) ?? handler.Row.FindFieldByPropertyName(fileNameField)); var newFilename = filename[handler.Row] = filename[handler.Row].TrimToNull(); var uploadHelper = new UploadHelper((subFolder.IsEmptyOrNull() ? "" : (subFolder + "/")) + fileNameFormat); var idField = (Field)(((IIdRow)handler.Row).IdField); var copyResult = uploadHelper.CopyTemporaryFile(newFilename, idField.AsObject(handler.Row), filesToDelete); if (subFolder != null && !this.storeSubFolderInDB) copyResult.DbFileName = copyResult.DbFileName.Substring(subFolder.Length + 1); return copyResult; }
public PgcDemuxJob(string strInput, string strOutputPath, int pgcNumber) : base(strInput, null) { this._strOutputPath = strOutputPath; this._pgcNumber = pgcNumber; if (!String.IsNullOrEmpty(strOutputPath)) { FilesToDelete.Add(System.IO.Path.Combine(strOutputPath, "LogFile.txt")); FilesToDelete.Add(System.IO.Path.Combine(strOutputPath, "Celltimes.txt")); } }
private void SafeAddFileToDelete(string path) { if (string.IsNullOrWhiteSpace(path)) { return; } if (!FilesToDelete.Contains(path) && path != FileContainer.OriginFilePath) { FilesToDelete.Add(path); } }
public D2VIndexJob(string input, string output, int demuxType, List <AudioTrackInfo> audioTracks, bool loadSources, bool demuxVideo) : base() { Input = input; Output = output; DemuxMode = demuxType; AudioTracks = audioTracks; LoadSources = loadSources; DemuxVideo = demuxVideo; FilesToDelete.Add(Path.Combine(Path.GetDirectoryName(input), Path.GetFileNameWithoutExtension(input) + ".log")); FilesToDelete.Add(output + ".bad"); FilesToDelete.Add(Path.ChangeExtension(output, ".fix.txt")); }
public override void OnBeforeSave(ISaveRequestHandler handler) { var field = (StringField)(handler.Row.FindField(this.filesField) ?? handler.Row.FindFieldByPropertyName(filesField)); if (!handler.Row.IsAssigned(field)) return; var oldFilesJSON = (handler.IsCreate ? null : field[handler.Old]).TrimToNull(); var newFilesJSON = field[handler.Row] = field[handler.Row].TrimToNull(); if (oldFilesJSON.IsTrimmedSame(newFilesJSON)) { field[handler.Row] = oldFilesJSON; return; } var oldFileList = ParseAndValidate(oldFilesJSON, "oldFiles"); var newFileList = ParseAndValidate(newFilesJSON, "newFiles"); var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete); handler.StateBag[this.GetType().FullName + "_FilesToDelete"] = filesToDelete; foreach (var file in oldFileList) { var filename = file.Filename.Trim(); if (newFileList.Any(x => String.Compare(x.Filename.Trim(), filename, StringComparison.OrdinalIgnoreCase) == 0)) continue; var actualOldFile = ((subFolder != null && !storeSubFolderInDB) ? (subFolder + "/") : "") + filename; filesToDelete.RegisterOldFile(actualOldFile); if (copyFilesToHistory) { var oldFilePath = UploadHelper.ToPath(actualOldFile); string date = DateTime.UtcNow.ToString("yyyyMM", Invariants.DateTimeFormat); string historyFile = "history/" + date + "/" + Path.GetFileName(oldFilePath); if (File.Exists(UploadHelper.DbFilePath(oldFilePath))) UploadHelper.CopyFileAndRelated(UploadHelper.DbFilePath(oldFilePath), UploadHelper.DbFilePath(historyFile), overwrite: true); } } if (newFileList.IsEmptyOrNull()) { field[handler.Row] = null; return; } if (handler.IsUpdate) field[handler.Row] = CopyTemporaryFiles(handler, oldFileList, newFileList, filesToDelete); }
public override void OnBeforeSave(ISaveRequestHandler handler) { var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete); handler.StateBag[this.GetType().FullName + "_FilesToDelete"] = filesToDelete; var filename = (StringField)(handler.Row.FindField(this.fileNameField) ?? handler.Row.FindFieldByPropertyName(fileNameField)); var oldFilename = handler.IsCreate ? null : filename[handler.Old]; var newFilename = filename[handler.Row] = filename[handler.Row].TrimToNull(); if (oldFilename.IsTrimmedSame(newFilename)) { filename[handler.Row] = oldFilename; return; } if (!oldFilename.IsEmptyOrNull()) { var actualOldFile = ((subFolder != null && !storeSubFolderInDB) ? (subFolder + "/") : "") + oldFilename; filesToDelete.RegisterOldFile(actualOldFile); if (copyFileToHistory) { var oldFilePath = UploadHelper.ToPath(actualOldFile); string date = DateTime.UtcNow.ToString("yyyyMM", Invariants.DateTimeFormat); string historyFile = "history/" + date + "/" + Path.GetFileName(oldFilePath); if (File.Exists(UploadHelper.DbFilePath(oldFilePath))) UploadHelper.CopyFileAndRelated(UploadHelper.DbFilePath(oldFilePath), UploadHelper.DbFilePath(historyFile), overwrite: true); } } if (newFilename == null) { if (oldFilename.IsTrimmedEmpty()) return; filename[handler.Row] = null; return; } if (!newFilename.ToLowerInvariant().StartsWith("temporary/")) throw new InvalidOperationException("For security reasons, only temporary files can be used in uploads!"); if (handler.IsUpdate) { var copyResult = CopyTemporaryFile(handler, filesToDelete); filename[handler.Row] = copyResult.DbFileName; } }
public override void OnBeforeSave(ISaveRequestHandler handler) { var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete); handler.StateBag[this.GetType().FullName + "_" + Target.Name + "_FilesToDelete"] = filesToDelete; var filename = (StringField)(Target); var oldFilename = handler.IsCreate ? null : filename[handler.Old]; var newFilename = filename[handler.Row] = filename[handler.Row].TrimToNull(); if (oldFilename.IsTrimmedSame(newFilename)) { filename[handler.Row] = oldFilename; return; } DeleteOldFile(filesToDelete, oldFilename); if (newFilename == null) { if (oldFilename.IsTrimmedEmpty()) return; filename[handler.Row] = null; if (!ReferenceEquals(null, originalNameField)) originalNameField[handler.Row] = null; return; } if (!newFilename.ToLowerInvariant().StartsWith("temporary/")) throw new InvalidOperationException("For security reasons, only temporary files can be used in uploads!"); if (!ReferenceEquals(null, originalNameField)) { var originalName = File.ReadAllText(Path.ChangeExtension( UploadHelper.DbFilePath(newFilename), ".orig")).TrimToNull(); originalNameField[handler.Row] = originalName; } if (handler.IsUpdate) { var copyResult = CopyTemporaryFile(handler, filesToDelete); filename[handler.Row] = copyResult.DbFileName; } }
public override void OnBeforeSave(ISaveRequestHandler handler) { var field = (StringField)Target; if (!handler.Row.IsAssigned(field)) { return; } var oldFilesJSON = (handler.IsCreate ? null : field[handler.Old]).TrimToNull(); var newFilesJSON = field[handler.Row] = field[handler.Row].TrimToNull(); if (oldFilesJSON.IsTrimmedSame(newFilesJSON)) { field[handler.Row] = oldFilesJSON; return; } var oldFileList = ParseAndValidate(oldFilesJSON, "oldFiles"); var newFileList = ParseAndValidate(newFilesJSON, "newFiles"); var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete); handler.StateBag[this.GetType().FullName + "_" + Target.Name + "_FilesToDelete"] = filesToDelete; foreach (var file in oldFileList) { var filename = file.Filename.Trim(); if (newFileList.Any(x => String.Compare(x.Filename.Trim(), filename, StringComparison.OrdinalIgnoreCase) == 0)) { continue; } DeleteOldFile(filesToDelete, filename); } if (newFileList.IsEmptyOrNull()) { field[handler.Row] = null; return; } if (handler.IsUpdate) { field[handler.Row] = CopyTemporaryFiles(handler, oldFileList, newFileList, filesToDelete); } }
public override void OnAfterDelete(IDeleteRequestHandler handler) { if (handler.Row is IIsActiveDeletedRow || handler.Row is IDeleteLogRow) { return; } var filename = (StringField)(Target); var oldFilename = filename[handler.Row]; var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete); DeleteOldFile(filesToDelete, oldFilename); }
public override void OnAfterDelete(IDeleteRequestHandler handler) { if (handler.Row is IIsActiveDeletedRow || handler.Row is IDeleteLogRow) return; var field = (StringField)Target; var oldFilesJSON = field[handler.Row].TrimToNull(); var oldFileList = ParseAndValidate(oldFilesJSON, "oldFiles"); var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete); foreach (var file in oldFileList) DeleteOldFile(filesToDelete, file.Filename); }
private void setTemporaryPath() { if (String.IsNullOrEmpty(this._strOutputFileName)) { return; } this._strTemporaryPath = Path.Combine(Path.GetDirectoryName(_strOutputFileName), Path.GetFileNameWithoutExtension(_strOutputFileName).Substring(0, Path.GetFileNameWithoutExtension(_strOutputFileName).Length - 2)); FilesToDelete.Add(Path.Combine(_strTemporaryPath, "LogFile.txt")); FilesToDelete.Add(Path.Combine(_strTemporaryPath, "Celltimes.txt")); for (int i = 1; i < 10; i++) { FilesToDelete.Add(Path.Combine(_strTemporaryPath, "VTS_01_" + i + ".VOB")); } FilesToDelete.Add(_strTemporaryPath); }
private void DeleteOldFile(FilesToDelete filesToDelete, string oldFilename) { if (!oldFilename.IsEmptyOrNull()) { var actualOldFile = (attr.SubFolder.IsEmptyOrNull() ? "" : (attr.SubFolder + "/")) + oldFilename; filesToDelete.RegisterOldFile(actualOldFile); if (attr.CopyToHistory) { var oldFilePath = UploadHelper.ToPath(actualOldFile); string date = DateTime.UtcNow.ToString("yyyyMM", Invariants.DateTimeFormat); string historyFile = "history/" + date + "/" + Path.GetFileName(oldFilePath); if (File.Exists(UploadHelper.DbFilePath(oldFilePath))) { UploadHelper.CopyFileAndRelated(UploadHelper.DbFilePath(oldFilePath), UploadHelper.DbFilePath(historyFile), overwrite: true); } } } }
public override void OnAfterDelete(IDeleteRequestHandler handler) { if (ServiceQueryHelper.UseSoftDelete(handler.Row)) { return; } var field = (StringField)Target; var oldFilesJSON = field[handler.Row].TrimToNull(); var oldFileList = ParseAndValidate(oldFilesJSON, "oldFiles"); var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete); foreach (var file in oldFileList) { DeleteOldFile(filesToDelete, file.Filename); } }
public static void CleanUp() { FilesToDelete.Each(file => { if (File.Exists(file)) { File.Delete(file); } }); Prepare(); ApiKeyCollection keys = ApiKey.LoadAll(); keys.Delete(); SecureSessionCollection sessions = SecureSession.LoadAll(); sessions.Delete(); ApplicationCollection all = Application.LoadAll(); all.Delete(); ClearAppsAndStopServers(); }
public string generateJoinCommandline(string tempFilename) { FilesToDelete.Add(tempFilename); return(string.Format("-core ( -input \"{0}\" -prefix \"{1}\" -type lst -join )", tempFilename, Output)); }
public override void OnBeforeSave(ISaveRequestHandler handler) { var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete); handler.StateBag[this.GetType().FullName + "_" + Target.Name + "_FilesToDelete"] = filesToDelete; var filename = (StringField)(Target); var oldFilename = handler.IsCreate ? null : filename[handler.Old]; var newFilename = filename[handler.Row] = filename[handler.Row].TrimToNull(); if (oldFilename.IsTrimmedSame(newFilename)) { filename[handler.Row] = oldFilename; return; } if (!oldFilename.IsEmptyOrNull()) { var actualOldFile = (attr.SubFolder.IsEmptyOrNull() ? "" : (attr.SubFolder + "/")) + oldFilename; filesToDelete.RegisterOldFile(actualOldFile); if (attr.CopyToHistory) { var oldFilePath = UploadHelper.ToPath(actualOldFile); string date = DateTime.UtcNow.ToString("yyyyMM", Invariants.DateTimeFormat); string historyFile = "history/" + date + "/" + Path.GetFileName(oldFilePath); if (File.Exists(UploadHelper.DbFilePath(oldFilePath))) { UploadHelper.CopyFileAndRelated(UploadHelper.DbFilePath(oldFilePath), UploadHelper.DbFilePath(historyFile), overwrite: true); } } } if (newFilename == null) { if (oldFilename.IsTrimmedEmpty()) { return; } filename[handler.Row] = null; if (!ReferenceEquals(null, originalNameField)) { originalNameField[handler.Row] = null; } return; } if (!newFilename.ToLowerInvariant().StartsWith("temporary/")) { throw new InvalidOperationException("For security reasons, only temporary files can be used in uploads!"); } if (!ReferenceEquals(null, originalNameField)) { var originalName = File.ReadAllText(Path.ChangeExtension( UploadHelper.DbFilePath(newFilename), ".orig")).TrimToNull(); originalNameField[handler.Row] = originalName; } if (handler.IsUpdate) { var copyResult = CopyTemporaryFile(handler, filesToDelete); filename[handler.Row] = copyResult.DbFileName; } }
private string CopyTemporaryFiles(ISaveRequestHandler handler, UploadedFile[] oldFileList, UploadedFile[] newFileList, FilesToDelete filesToDelete) { foreach (var file in newFileList) { var filename = file.Filename.Trim(); if (oldFileList.Any(x => String.Compare(x.Filename.Trim(), filename, StringComparison.OrdinalIgnoreCase) == 0)) { continue; } if (!filename.ToLowerInvariant().StartsWith("temporary/")) { throw new InvalidOperationException("For security reasons, only temporary files can be used in uploads!"); } var uploadHelper = new UploadHelper((subFolder.IsEmptyOrNull() ? "" : (subFolder + "/")) + fileNameFormat); var idField = (Field)(((IIdRow)handler.Row).IdField); var copyResult = uploadHelper.CopyTemporaryFile(filename, idField.AsObject(handler.Row), filesToDelete); if (subFolder != null && !this.storeSubFolderInDB) { copyResult.DbFileName = copyResult.DbFileName.Substring(subFolder.Length + 1); } file.Filename = copyResult.DbFileName; } return(JSON.Stringify(newFileList)); }
/// <summary> /// Adds a new file to delete /// </summary> /// <param name="element"></param> public void AddDeleteFilesElement(DeleteFilesHandler element) { FilesToDelete.Add(element); }
public static void RegisterFilesToDelete(IUnitOfWork unitOfWork, FilesToDelete filesToDelete) { unitOfWork.OnCommit += delegate() { try { filesToDelete.KeepNewFiles(); filesToDelete.Dispose(); } catch (Exception ex) { ex.Log(); } }; unitOfWork.OnRollback += delegate() { try { filesToDelete.Dispose(); } catch (Exception ex) { ex.Log(); } }; }
private string CopyTemporaryFiles(ISaveRequestHandler handler, UploadedFile[] oldFileList, UploadedFile[] newFileList, FilesToDelete filesToDelete) { foreach (var file in newFileList) { var filename = file.Filename.Trim(); if (oldFileList.Any(x => String.Compare(x.Filename.Trim(), filename, StringComparison.OrdinalIgnoreCase) == 0)) { continue; } if (!filename.ToLowerInvariant().StartsWith("temporary/")) { throw new InvalidOperationException("For security reasons, only temporary files can be used in uploads!"); } ImageUploadBehavior.CheckUploadedImageAndCreateThumbs(attr, ref filename); var idField = (Field)(((IIdRow)handler.Row).IdField); var copyResult = uploadHelper.CopyTemporaryFile(filename, idField.AsObject(handler.Row), filesToDelete, s => ImageUploadBehavior.ProcessReplaceFields(s, this.replaceFields, handler)); if (!attr.SubFolder.IsEmptyOrNull()) { copyResult.DbFileName = copyResult.DbFileName.Substring(attr.SubFolder.Length + 1); } file.Filename = copyResult.DbFileName; } return(JSON.Stringify(newFileList)); }
public override void OnBeforeSave(ISaveRequestHandler handler) { var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete); handler.StateBag[this.GetType().FullName + "_" + Target.Name + "_FilesToDelete"] = filesToDelete; var filename = (StringField)(Target); var oldFilename = handler.IsCreate ? null : filename[handler.Old]; var newFilename = filename[handler.Row] = filename[handler.Row].TrimToNull(); if (oldFilename.IsTrimmedSame(newFilename)) { filename[handler.Row] = oldFilename; return; } if (!oldFilename.IsEmptyOrNull()) { var actualOldFile = (attr.SubFolder.IsEmptyOrNull() ? "" : (attr.SubFolder + "/")) + oldFilename; filesToDelete.RegisterOldFile(actualOldFile); if (attr.CopyToHistory) { var oldFilePath = UploadHelper.ToPath(actualOldFile); string date = DateTime.UtcNow.ToString("yyyyMM", Invariants.DateTimeFormat); string historyFile = "history/" + date + "/" + Path.GetFileName(oldFilePath); if (File.Exists(UploadHelper.DbFilePath(oldFilePath))) UploadHelper.CopyFileAndRelated(UploadHelper.DbFilePath(oldFilePath), UploadHelper.DbFilePath(historyFile), overwrite: true); } } if (newFilename == null) { if (oldFilename.IsTrimmedEmpty()) return; filename[handler.Row] = null; if (!ReferenceEquals(null, originalNameField)) originalNameField[handler.Row] = null; return; } if (!newFilename.ToLowerInvariant().StartsWith("temporary/")) throw new InvalidOperationException("For security reasons, only temporary files can be used in uploads!"); if (!ReferenceEquals(null, originalNameField)) { var originalName = File.ReadAllText(Path.ChangeExtension( UploadHelper.DbFilePath(newFilename), ".orig")).TrimToNull(); originalNameField[handler.Row] = originalName; } if (handler.IsUpdate) { var copyResult = CopyTemporaryFile(handler, filesToDelete); filename[handler.Row] = copyResult.DbFileName; } }
private void DeleteOldFile(FilesToDelete filesToDelete, string oldFilename) { if (!oldFilename.IsEmptyOrNull()) { var actualOldFile = (attr.SubFolder.IsEmptyOrNull() ? "" : (attr.SubFolder + "/")) + oldFilename; filesToDelete.RegisterOldFile(actualOldFile); if (attr.CopyToHistory) { var oldFilePath = UploadHelper.ToPath(actualOldFile); string date = DateTime.UtcNow.ToString("yyyyMM", Invariants.DateTimeFormat); string historyFile = "history/" + date + "/" + Path.GetFileName(oldFilePath); if (File.Exists(UploadHelper.DbFilePath(oldFilePath))) UploadHelper.CopyFileAndRelated(UploadHelper.DbFilePath(oldFilePath), UploadHelper.DbFilePath(historyFile), overwrite: true); } } }
private string CopyTemporaryFiles(ISaveRequestHandler handler, UploadedFile[] oldFileList, UploadedFile[] newFileList, FilesToDelete filesToDelete) { foreach (var file in newFileList) { var filename = file.Filename.Trim(); if (oldFileList.Any(x => String.Compare(x.Filename.Trim(), filename, StringComparison.OrdinalIgnoreCase) == 0)) continue; if (!filename.ToLowerInvariant().StartsWith("temporary/")) throw new InvalidOperationException("For security reasons, only temporary files can be used in uploads!"); ImageUploadBehavior.CheckUploadedImageAndCreateThumbs(attr, ref filename); var idField = (Field)(((IIdRow)handler.Row).IdField); var copyResult = uploadHelper.CopyTemporaryFile(filename, idField.AsObject(handler.Row), filesToDelete, s => ImageUploadBehavior.ProcessReplaceFields(s, this.replaceFields, handler)); if (!attr.SubFolder.IsEmptyOrNull()) copyResult.DbFileName = copyResult.DbFileName.Substring(attr.SubFolder.Length + 1); file.Filename = copyResult.DbFileName; } return JSON.Stringify(newFileList); }
public void SetVideoAacTempFilePath(string path) { _videoAacTempFilePath = path; FilesToDelete.Add(path); }
public void SetTempFilePath(string path) { _tempFilePath = path; FilesToDelete.Add(path); }
public override void OnBeforeSave(ISaveRequestHandler handler) { var field = (StringField)Target; if (!handler.Row.IsAssigned(field)) return; var oldFilesJSON = (handler.IsCreate ? null : field[handler.Old]).TrimToNull(); var newFilesJSON = field[handler.Row] = field[handler.Row].TrimToNull(); if (oldFilesJSON.IsTrimmedSame(newFilesJSON)) { field[handler.Row] = oldFilesJSON; return; } var oldFileList = ParseAndValidate(oldFilesJSON, "oldFiles"); var newFileList = ParseAndValidate(newFilesJSON, "newFiles"); var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete); handler.StateBag[this.GetType().FullName + "_" + Target.Name + "_FilesToDelete"] = filesToDelete; foreach (var file in oldFileList) { var filename = file.Filename.Trim(); if (newFileList.Any(x => String.Compare(x.Filename.Trim(), filename, StringComparison.OrdinalIgnoreCase) == 0)) continue; DeleteOldFile(filesToDelete, filename); } if (newFileList.IsEmptyOrNull()) { field[handler.Row] = null; return; } if (handler.IsUpdate) field[handler.Row] = CopyTemporaryFiles(handler, oldFileList, newFileList, filesToDelete); }
private string CopyTemporaryFiles(ISaveRequestHandler handler, UploadedFile[] oldFileList, UploadedFile[] newFileList, FilesToDelete filesToDelete) { foreach (var file in newFileList) { var filename = file.Filename.Trim(); if (oldFileList.Any(x => String.Compare(x.Filename.Trim(), filename, StringComparison.OrdinalIgnoreCase) == 0)) continue; if (!filename.ToLowerInvariant().StartsWith("temporary/")) throw new InvalidOperationException("For security reasons, only temporary files can be used in uploads!"); var uploadHelper = new UploadHelper((subFolder.IsEmptyOrNull() ? "" : (subFolder + "/")) + fileNameFormat); var copyResult = uploadHelper.CopyTemporaryFile(filename, ((IIdRow)handler.Row).IdField[handler.Row].Value, filesToDelete); if (subFolder != null && !this.storeSubFolderInDB) copyResult.DbFileName = copyResult.DbFileName.Substring(subFolder.Length + 1); file.Filename = copyResult.DbFileName; } return JSON.Stringify(newFileList); }
private CopyTemporaryFileResult CopyTemporaryFile(ISaveRequestHandler handler, FilesToDelete filesToDelete) { var fileName = (StringField)Target; var newFilename = fileName[handler.Row] = fileName[handler.Row].TrimToNull(); CheckUploadedImageAndCreateThumbs(attr, ref newFilename); var copyResult = uploadHelper.CopyTemporaryFile(newFilename, ((IIdRow)handler.Row).IdField[handler.Row].Value, filesToDelete); if (!attr.SubFolder.IsEmptyOrNull()) copyResult.DbFileName = copyResult.DbFileName.Substring(attr.SubFolder.Length + 1); return copyResult; }
public static AttachmentList GetAttachmentList(MimeMessage message, bool forReply, FilesToDelete filesToDelete) { var uploadHelper = new UploadHelper("Nortwind/Mail/{3:yyyyMM}/{4}"); var result = new AttachmentList(); result.ByIndex = new Dictionary <int, AttachmentInfo>(); result.InOrder = new List <AttachmentInfo>(); var attachmentNumber = 0; var visitor = new EmailPreviewVisitor(message, (mime, embedUrl) => { var sameAttachment = result.InOrder.FirstOrDefault(x => x.Mime == mime); if (sameAttachment != null) { sameAttachment.IsEmbedded = sameAttachment.IsEmbedded || embedUrl != null; return(sameAttachment.Url); } ++attachmentNumber; string fileName; string downUrl = null; byte[] buffer; using (var output = new MemoryStream()) { (mime as MimePart).Content.DecodeTo(output); buffer = output.GetBuffer(); } if (mime is MessagePart) { fileName = mime.ContentDisposition?.FileName ?? (mime.ContentType.Name ?? "attached" + attachmentNumber + ".eml"); } else { fileName = ((MimePart)mime).FileName ?? "file" + attachmentNumber + ".dat"; } if (embedUrl != null) { downUrl = string.Format("data:{0};base64,{1}", mime.ContentType.MimeType, Convert.ToBase64String(buffer, 0, buffer.Length)); } else { var processor = new UploadProcessor { ThumbWidth = 128, ThumbHeight = 96 }; if (processor.ProcessStream(new MemoryStream(buffer), Path.GetExtension(fileName))) { var temporaryFile = "temporary/" + Path.GetFileName(processor.FilePath); using (var sw = new StreamWriter(Path.ChangeExtension(UploadHelper.DbFilePath(temporaryFile), ".orig"))) sw.WriteLine(fileName); var copyResult = uploadHelper.CopyTemporaryFile(temporaryFile, -1, filesToDelete); downUrl = "/upload/" + copyResult.DbFileName; } else { downUrl = "?"; } } var info = new AttachmentInfo { Key = attachmentNumber, Filename = fileName, Mime = mime, Url = downUrl, IsEmbedded = embedUrl != null, Size = buffer.Length }; result.ByIndex[attachmentNumber] = info; result.InOrder.Add(info); return(downUrl); }, forReply); message.Accept(visitor); result.HtmlBody = visitor.HtmlBody; return(result); }
public override void OnAfterDelete(IDeleteRequestHandler handler) { if (handler.Row is IIsActiveDeletedRow || handler.Row is IDeleteLogRow) return; var filename = (StringField)(Target); var oldFilename = filename[handler.Row]; var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(handler.UnitOfWork, filesToDelete); DeleteOldFile(filesToDelete, oldFilename); }
public static ServiceResponse ComposeMail(IUnitOfWork uow, MailComposeRequest request, string requestRootUrl, string overrideDisplayName = null) { request.CheckNotNull(); Check.NotNull(request.To, "to"); var config = Config.Get <MailSettings>(); var message = new MimeMessage(); var row = new Entities.MailRow(); row.Uid = Guid.NewGuid().ToString("N"); message.MessageId = row.Uid; var subject = "Mobility Matters | " + request.Subject ?? ""; string editLink = null; string editKind = null; row.Subject = subject; message.Subject = subject; if (config.SenderAddress.IsTrimmedEmpty()) { throw new ValidationError("Please set EmailSendAddress site setting!"); } var user = Authorization.UserDefinition as UserDefinition; var from = new MailboxAddress(overrideDisplayName ?? user.DisplayName, config.SenderAddress); row.From = from.ToString(); message.From.Add(from); var c = Entities.EmployeesRow.Fields; row.To = ""; foreach (var toId in request.To) { var toVolunteers = uow.Connection.ById <Entities.EmployeesRow>(toId, q => q .Select(c.FirstName) .Select(c.LastName) .Select(c.Email)); if (string.IsNullOrWhiteSpace(toVolunteers.Email)) { throw new ValidationError("To Volunteer " + toVolunteers.FirstName + " " + toVolunteers.LastName + " doesn't have an e-mail address, please set it!"); } var to = new MailboxAddress(toVolunteers.FirstName + " " + toVolunteers.LastName, toVolunteers.Email); row.To = row.To + ";" + to.ToString(); message.To.Add(to); } if (request.Cc != null) { var ccList = new List <string>(); foreach (var contactId in request.Cc) { var ccVolunteers = uow.Connection.ById <Entities.EmployeesRow>(contactId, q => q .Select(c.FirstName) .Select(c.LastName) .Select(c.Email)); if (ccVolunteers.Email.IsTrimmedEmpty()) { throw new ValidationError("CC Volunteer " + ccVolunteers.FirstName + " " + ccVolunteers.LastName + " doesn't have an e-mail address, please set it!"); } var cc = new MailboxAddress(ccVolunteers.FirstName + " " + ccVolunteers.LastName, ccVolunteers.Email); message.Cc.Add(cc); ccList.Add(cc.ToString()); } row.Cc = string.Join("; ", ccList); } var body = request.BodyHtml ?? ""; if (body.IndexOf("</html>") < 0) { body = "<html><title>" + HttpUtility.HtmlEncode(request.Subject) + "</title><body>" + body + "</body></html>"; } if (editLink != null) { var externalUrl = Config.Get <EnvironmentSettings>().SiteExternalUrl ?? requestRootUrl + VirtualPathUtility.ToAbsolute("~/"); editLink = HttpUtility.HtmlAttributeEncode(UriHelper.Combine(externalUrl, editLink)); var idx = body.IndexOf("</body>"); body = body.Insert(idx, "<p></p><p style=\"margin-top: 15px;\">Click link below to open related " + editKind + ":</p>" + "<p><a href=\"" + editLink + "\">" + HttpUtility.HtmlEncode(editLink) + "</a></p>"); } var bodyBuilder = new BodyBuilder(); body = AttachEmbeddedImages(bodyBuilder, body); var filesToDelete = new FilesToDelete(); UploadHelper.RegisterFilesToDelete(uow, filesToDelete); string fileNameFormat = "Northwind/Mail/{3:yyyyMM}/{4}"; var attachmentRows = AttachFiles(bodyBuilder, request.Attachments, filesToDelete, fileNameFormat); bodyBuilder.HtmlBody = body; row.Body = ConvertEmbeddedImagesToDataUris(bodyBuilder, body); message.Body = bodyBuilder.ToMessageBody(); row.Direction = "o"; row.SendDateTime = DateTime.UtcNow; row.CreatedBy = user?.UserId ?? user.UserId; row.CreatedOn = DateTime.UtcNow; var rowId = Convert.ToInt32(uow.Connection.InsertAndGetID(row)); foreach (var att in attachmentRows) { att.MailId = rowId; att.CreatedBy = row.CreatedBy; att.CreatedOn = DateTime.UtcNow; uow.Connection.Insert(att); } var response = new ServiceResponse(); uow.OnCommit += (() => { UsingSmtp(client => { try { client.Send(message); uow.Connection.UpdateById <Entities.MailRow>(new MyRow { MailId = rowId, IsSent = true }); } catch (Exception ex) { ex.Log(); uow.Connection.UpdateById <Entities.MailRow>(new MyRow { MailId = rowId, IsSent = false, ErrorMessage = ex.Message }); } }); UsingClient(client => { try { client.GetFolder(SpecialFolder.Sent).Append(message, MessageFlags.Seen); } catch (Exception ex) { ex.Log(); } }); }); return(response); }
private CopyTemporaryFileResult CopyTemporaryFile(ISaveRequestHandler handler, FilesToDelete filesToDelete) { var filename = (StringField)(handler.Row.FindField(this.fileNameField) ?? handler.Row.FindFieldByPropertyName(fileNameField)); var newFilename = filename[handler.Row] = filename[handler.Row].TrimToNull(); var uploadHelper = new UploadHelper((subFolder.IsEmptyOrNull() ? "" : (subFolder + "/")) + fileNameFormat); var idField = (Field)(((IIdRow)handler.Row).IdField); var copyResult = uploadHelper.CopyTemporaryFile(newFilename, idField.AsObject(handler.Row), filesToDelete); if (subFolder != null && !this.storeSubFolderInDB) { copyResult.DbFileName = copyResult.DbFileName.Substring(subFolder.Length + 1); } return(copyResult); }
public CopyTemporaryFileResult CopyTemporaryFile(string dbTemporaryFile, Int64 entityId, FilesToDelete filesToDelete) { var result = CopyTemporaryFile(dbTemporaryFile, entityId); filesToDelete.Register(result); return result; }
public CopyTemporaryFileResult CopyTemporaryFile(string dbTemporaryFile, object entityId, FilesToDelete filesToDelete, Func<string, string> fileNameReplacer = null) { var result = CopyTemporaryFile(dbTemporaryFile, entityId, fileNameReplacer); filesToDelete.Register(result); return result; }
public void SetSourceFilePath(string path) { _sourceFilePath = path; FilesToDelete.Add(path); }
private CopyTemporaryFileResult CopyTemporaryFile(ISaveRequestHandler handler, FilesToDelete filesToDelete) { var fileName = (StringField)Target; var newFilename = fileName[handler.Row] = fileName[handler.Row].TrimToNull(); CheckUploadedImageAndCreateThumbs(attr, ref newFilename); var copyResult = uploadHelper.CopyTemporaryFile(newFilename, ((IIdRow)handler.Row).IdField[handler.Row].Value, filesToDelete); if (!attr.SubFolder.IsEmptyOrNull()) { copyResult.DbFileName = copyResult.DbFileName.Substring(attr.SubFolder.Length + 1); } return(copyResult); }
private CopyTemporaryFileResult CopyTemporaryFile(ISaveRequestHandler handler, FilesToDelete filesToDelete) { var fileName = (StringField)Target; var newFilename = fileName[handler.Row] = fileName[handler.Row].TrimToNull(); CheckUploadedImageAndCreateThumbs(attr, ref newFilename); var idField = (Field)(((IIdRow)handler.Row).IdField); var copyResult = uploadHelper.CopyTemporaryFile(newFilename, idField.AsObject(handler.Row), filesToDelete, s => ImageUploadBehavior.ProcessReplaceFields(s, this.replaceFields, handler.Row)); if (!attr.SubFolder.IsEmptyOrNull()) { copyResult.DbFileName = copyResult.DbFileName.Substring(attr.SubFolder.Length + 1); } return(copyResult); }
private CopyTemporaryFileResult CopyTemporaryFile(ISaveRequestHandler handler, FilesToDelete filesToDelete) { var fileName = (StringField)Target; var newFilename = fileName[handler.Row] = fileName[handler.Row].TrimToNull(); CheckUploadedImageAndCreateThumbs(attr, ref newFilename); var idField = (Field)(((IIdRow)handler.Row).IdField); var copyResult = uploadHelper.CopyTemporaryFile(newFilename, idField.AsObject(handler.Row), filesToDelete, s => ImageUploadBehavior.ProcessReplaceFields(s, this.replaceFields, handler)); if (!attr.SubFolder.IsEmptyOrNull()) copyResult.DbFileName = copyResult.DbFileName.Substring(attr.SubFolder.Length + 1); return copyResult; }