private void DeleteFiles(List <object> fileIds) { if (fileIds.Count == 0) { return; } foreach (var fileId in fileIds) { if (Canceled) { return; } var file = FileDao.GetFile(fileId); if (file == null) { Error = FilesCommonResource.ErrorMassage_FileNotFound; } else if (!ignoreException && EntryManager.FileLockedForMe(file.ID)) { Error = FilesCommonResource.ErrorMassage_LockedFile; } else if (!ignoreException && FileTracker.IsEditing(file.ID)) { Error = FilesCommonResource.ErrorMassage_SecurityException_DeleteEditingFile; } else if (!ignoreException && !FilesSecurity.CanDelete(file)) { Error = FilesCommonResource.ErrorMassage_SecurityException_DeleteFile; } else { FileMarker.RemoveMarkAsNewForAll(file); if (FileDao.UseTrashForRemove(file)) { FileDao.MoveFile(file.ID, _trashId); FilesMessageService.Send(file, httpRequestHeaders, MessageAction.FileMovedToTrash, file.Title); ResultedFile(fileId); } else { try { FileDao.DeleteFile(file.ID); FileDao.DeleteFolder(file.ID); } catch (Exception ex) { Error = ex.Message; Logger.Error(Error, ex); } } ProcessedFile(fileId); } ProgressStep(); } }
private bool WithError(IServiceScope scope, IEnumerable <File> files, bool folder, out string error) { var entryManager = scope.ServiceProvider.GetService <EntryManager>(); error = null; foreach (var file in files) { if (!FilesSecurity.CanDelete(file)) { error = FilesCommonResource.ErrorMassage_SecurityException_DeleteFile; return(true); } if (entryManager.FileLockedForMe(file.ID)) { error = FilesCommonResource.ErrorMassage_LockedFile; return(true); } if (FileTracker.IsEditing(file.ID)) { error = folder ? FilesCommonResource.ErrorMassage_SecurityException_DeleteEditingFolder : FilesCommonResource.ErrorMassage_SecurityException_DeleteEditingFile; return(true); } } return(false); }
public static bool RenameFile(File file) { if (!FileTracker.IsEditing(file.ID)) { return(true); } var docKeyForTrack = GetDocKey(file); var meta = new Web.Core.Files.DocumentService.MetaData { Title = file.Title }; return(DocumentServiceConnector.Command(Web.Core.Files.DocumentService.CommandMethod.Meta, docKeyForTrack, file.ID, meta: meta)); }
private void DeleteFiles(List <object> fileIds) { foreach (var fileId in fileIds) { CancellationToken.ThrowIfCancellationRequested(); var file = FileDao.GetFile(fileId); if (file == null) { Error = FilesCommonResource.ErrorMassage_FileNotFound; } else if (!ignoreException && EntryManager.FileLockedForMe(file.ID)) { Error = FilesCommonResource.ErrorMassage_LockedFile; } else if (!ignoreException && FileTracker.IsEditing(file.ID)) { Error = FilesCommonResource.ErrorMassage_SecurityException_DeleteEditingFile; } else if (!ignoreException && !FilesSecurity.CanDelete(file)) { Error = FilesCommonResource.ErrorMassage_SecurityException_DeleteFile; } else { FileMarker.RemoveMarkAsNewForAll(file); if (FileDao.UseTrashForRemove(file)) { FileDao.MoveFile(file.ID, trashId); FilesMessageService.Send(file, headers, MessageAction.FileMovedToTrash, file.Title); } else { try { FileDao.DeleteFile(file.ID); FileDao.DeleteFolder(file.ID); } catch (Exception ex) { Error = ex.Message; Logger.Error(Error, ex); } } ProcessedFile(fileId); } ProgressStep(fileId: FolderDao.CanCalculateSubitems(fileId) ? null : fileId); } }
internal FileStatus GetFileStatus <T>(File <T> file, ref FileStatus currentStatus) { if (FileTracker.IsEditing(file.ID)) { currentStatus |= FileStatus.IsEditing; } if (FileTracker.IsEditingAlone(file.ID)) { currentStatus |= FileStatus.IsEditingAlone; } if (FileConverter.IsConverting(file)) { currentStatus |= FileStatus.IsConverting; } return(currentStatus); }
private bool WithError(IEnumerable <File> files, out string error) { error = null; foreach (var file in files) { if (!FilesSecurity.CanDelete(file)) { error = FilesCommonResource.ErrorMassage_SecurityException_MoveFile; return(true); } if (EntryManager.FileLockedForMe(file.ID)) { error = FilesCommonResource.ErrorMassage_LockedFile; return(true); } if (FileTracker.IsEditing(file.ID)) { error = FilesCommonResource.ErrorMassage_SecurityException_UpdateEditingFile; return(true); } } return(false); }
public File <T> GetParams <T>(File <T> file, bool lastVersion, FileShare linkRight, bool rightToRename, bool rightToEdit, bool editPossible, bool tryEdit, bool tryCoauth, out Configuration <T> configuration) { if (file == null) { throw new FileNotFoundException(FilesCommonResource.ErrorMassage_FileNotFound); } if (!string.IsNullOrEmpty(file.Error)) { throw new Exception(file.Error); } var rightToReview = rightToEdit; var reviewPossible = editPossible; var rightToFillForms = rightToEdit; var fillFormsPossible = editPossible; var rightToComment = rightToEdit; var commentPossible = editPossible; var rightModifyFilter = rightToEdit; if (linkRight == FileShare.Restrict && UserManager.GetUsers(AuthContext.CurrentAccount.ID).IsVisitor(UserManager)) { rightToEdit = false; rightToReview = false; rightToFillForms = false; rightToComment = false; } var fileSecurity = FileSecurity; rightToEdit = rightToEdit && (linkRight == FileShare.ReadWrite || linkRight == FileShare.CustomFilter || fileSecurity.CanEdit(file) || fileSecurity.CanCustomFilterEdit(file)); if (editPossible && !rightToEdit) { editPossible = false; } rightModifyFilter = rightModifyFilter && (linkRight == FileShare.ReadWrite || fileSecurity.CanEdit(file)); rightToRename = rightToRename && rightToEdit && fileSecurity.CanEdit(file); rightToReview = rightToReview && (linkRight == FileShare.Review || linkRight == FileShare.ReadWrite || fileSecurity.CanReview(file)); if (reviewPossible && !rightToReview) { reviewPossible = false; } rightToFillForms = rightToFillForms && (linkRight == FileShare.FillForms || linkRight == FileShare.Review || linkRight == FileShare.ReadWrite || fileSecurity.CanFillForms(file)); if (fillFormsPossible && !rightToFillForms) { fillFormsPossible = false; } rightToComment = rightToComment && (linkRight == FileShare.Comment || linkRight == FileShare.Review || linkRight == FileShare.ReadWrite || fileSecurity.CanComment(file)); if (commentPossible && !rightToComment) { commentPossible = false; } if (linkRight == FileShare.Restrict && !(editPossible || reviewPossible || fillFormsPossible || commentPossible) && !fileSecurity.CanRead(file)) { throw new SecurityException(FilesCommonResource.ErrorMassage_SecurityException_ReadFile); } if (file.RootFolderType == FolderType.TRASH) { throw new Exception(FilesCommonResource.ErrorMassage_ViewTrashItem); } if (file.ContentLength > SetupInfo.AvailableFileSize) { throw new Exception(string.Format(FilesCommonResource.ErrorMassage_FileSizeEdit, FileSizeComment.FilesSizeToString(SetupInfo.AvailableFileSize))); } string strError = null; if ((editPossible || reviewPossible || fillFormsPossible || commentPossible) && LockerManager.FileLockedForMe(file.ID)) { if (tryEdit) { strError = FilesCommonResource.ErrorMassage_LockedFile; } rightToRename = false; rightToEdit = editPossible = false; rightToReview = reviewPossible = false; rightToFillForms = fillFormsPossible = false; rightToComment = commentPossible = false; } if (editPossible && !FileUtility.CanWebEdit(file.Title)) { rightToEdit = editPossible = false; } if (file.Encrypted && file.RootFolderType != FolderType.Privacy) { rightToEdit = editPossible = false; rightToReview = reviewPossible = false; rightToFillForms = fillFormsPossible = false; rightToComment = commentPossible = false; } if (!editPossible && !FileUtility.CanWebView(file.Title)) { throw new Exception(string.Format("{0} ({1})", FilesCommonResource.ErrorMassage_NotSupportedFormat, FileUtility.GetFileExtension(file.Title))); } if (reviewPossible && !FileUtility.CanWebReview(file.Title)) { rightToReview = reviewPossible = false; } if (fillFormsPossible && !FileUtility.CanWebRestrictedEditing(file.Title)) { rightToFillForms = fillFormsPossible = false; } if (commentPossible && !FileUtility.CanWebComment(file.Title)) { rightToComment = commentPossible = false; } var rightChangeHistory = rightToEdit && !file.Encrypted; if (FileTracker.IsEditing(file.ID)) { rightChangeHistory = false; bool coauth; if ((editPossible || reviewPossible || fillFormsPossible || commentPossible) && tryCoauth && (!(coauth = FileUtility.CanCoAuhtoring(file.Title)) || FileTracker.IsEditingAlone(file.ID))) { if (tryEdit) { var editingBy = FileTracker.GetEditingBy(file.ID).FirstOrDefault(); strError = string.Format(!coauth ? FilesCommonResource.ErrorMassage_EditingCoauth : FilesCommonResource.ErrorMassage_EditingMobile, Global.GetUserName(editingBy, true)); } rightToEdit = editPossible = reviewPossible = fillFormsPossible = commentPossible = false; } } var fileStable = file; if (lastVersion && file.Forcesave != ForcesaveType.None && tryEdit) { var fileDao = DaoFactory.GetFileDao <T>(); fileStable = fileDao.GetFileStable(file.ID, file.Version); } var docKey = GetDocKey(fileStable); var modeWrite = (editPossible || reviewPossible || fillFormsPossible || commentPossible) && tryEdit; configuration = new Configuration <T>(file, ServiceProvider) { Document = { Key = docKey, Permissions = { Edit = rightToEdit && lastVersion, Rename = rightToRename && lastVersion && !file.ProviderEntry, Review = rightToReview && lastVersion, FillForms = rightToFillForms && lastVersion, Comment = rightToComment && lastVersion, ChangeHistory = rightChangeHistory, ModifyFilter = rightModifyFilter } }, EditorConfig = { ModeWrite = modeWrite, }, ErrorMessage = strError, }; if (!lastVersion) { configuration.Document.Title += string.Format(" ({0})", file.CreateOnString); } return(file); }
private void MoveOrCopyFiles(ICollection fileIds, Folder toFolder, bool copy) { if (fileIds.Count == 0) { return; } var toFolderId = toFolder.ID; foreach (var fileId in fileIds) { CancellationToken.ThrowIfCancellationRequested(); var file = FileDao.GetFile(fileId); if (file == null) { Error = FilesCommonResource.ErrorMassage_FileNotFound; } else if (!FilesSecurity.CanRead(file)) { Error = FilesCommonResource.ErrorMassage_SecurityException_ReadFile; } else if (Global.EnableUploadFilter && !FileUtility.ExtsUploadable.Contains(FileUtility.GetFileExtension(file.Title))) { Error = FilesCommonResource.ErrorMassage_NotSupportedFormat; } else if (file.ContentLength > SetupInfo.AvailableFileSize && file.ProviderId != toFolder.ProviderId) { Error = string.Format(copy ? FilesCommonResource.ErrorMassage_FileSizeCopy : FilesCommonResource.ErrorMassage_FileSizeMove, FileSizeComment.FilesSizeToString(SetupInfo.AvailableFileSize)); } else { var parentFolder = FolderDao.GetFolder(file.FolderID); try { var conflict = resolveType == FileConflictResolveType.Duplicate ? null : FileDao.GetFile(toFolderId, file.Title); if (conflict != null && !FilesSecurity.CanEdit(conflict)) { Error = FilesCommonResource.ErrorMassage_SecurityException; } else if (conflict != null && EntryManager.FileLockedForMe(conflict.ID)) { Error = FilesCommonResource.ErrorMassage_LockedFile; } else if (conflict == null) { if (copy) { File newFile = null; try { newFile = FileDao.CopyFile(file.ID, toFolderId); //Stream copy will occur inside dao FilesMessageService.Send(file, toFolder, headers, MessageAction.FileCopied, file.Title, parentFolder.Title, toFolder.Title); if (Equals(newFile.FolderID.ToString(), this.toFolderId)) { needToMark.Add(newFile); } if (ProcessedFile(fileId)) { Status += string.Format("file_{0}{1}", newFile.ID, SPLIT_CHAR); } } catch { if (newFile != null) { FileDao.DeleteFile(newFile.ID); } throw; } } else { if (EntryManager.FileLockedForMe(file.ID)) { Error = FilesCommonResource.ErrorMassage_LockedFile; } else if (FileTracker.IsEditing(file.ID)) { Error = FilesCommonResource.ErrorMassage_SecurityException_UpdateEditingFile; } else if (FilesSecurity.CanDelete(file)) { FileMarker.RemoveMarkAsNewForAll(file); var newFileId = FileDao.MoveFile(file.ID, toFolderId); FilesMessageService.Send(file, toFolder, headers, MessageAction.FileMoved, file.Title, parentFolder.Title, toFolder.Title); if (Equals(toFolderId.ToString(), this.toFolderId)) { needToMark.Add(FileDao.GetFile(newFileId)); } if (ProcessedFile(fileId)) { Status += string.Format("file_{0}{1}", newFileId, SPLIT_CHAR); } } else { Error = FilesCommonResource.ErrorMassage_SecurityException_DeleteFile; } } } else { if (resolveType == FileConflictResolveType.Overwrite) { if (EntryManager.FileLockedForMe(conflict.ID)) { Error = FilesCommonResource.ErrorMassage_LockedFile; } else if (FileTracker.IsEditing(conflict.ID)) { Error = FilesCommonResource.ErrorMassage_SecurityException_UpdateEditingFile; } else { var newFile = conflict; newFile.Version++; newFile.ContentLength = conflict.ContentLength; using (var stream = FileDao.GetFileStream(file)) { newFile = FileDao.SaveFile(newFile, stream); } needToMark.Add(newFile); if (copy) { FilesMessageService.Send(file, toFolder, headers, MessageAction.FileCopiedWithOverwriting, file.Title, parentFolder.Title, toFolder.Title); if (ProcessedFile(fileId)) { Status += string.Format("file_{0}{1}", newFile.ID, SPLIT_CHAR); } } else { if (Equals(file.FolderID.ToString(), toFolderId.ToString())) { if (ProcessedFile(fileId)) { Status += string.Format("file_{0}{1}", newFile.ID, SPLIT_CHAR); } } else { if (EntryManager.FileLockedForMe(file.ID)) { Error = FilesCommonResource.ErrorMassage_LockedFile; } else if (FileTracker.IsEditing(file.ID)) { Error = FilesCommonResource.ErrorMassage_SecurityException_UpdateEditingFile; } else if (FilesSecurity.CanDelete(file)) { FileDao.DeleteFile(file.ID); FileDao.DeleteFolder(file.ID); FilesMessageService.Send(file, toFolder, headers, MessageAction.FileMovedWithOverwriting, file.Title, parentFolder.Title, toFolder.Title); if (ProcessedFile(fileId)) { Status += string.Format("file_{0}{1}", newFile.ID, SPLIT_CHAR); } } else { Error = FilesCommonResource.ErrorMassage_SecurityException_DeleteFile; } } } } } else if (resolveType == FileConflictResolveType.Skip) { //nothing } } } catch (Exception ex) { Error = ex.Message; Logger.Error(Error, ex); } } ProgressStep(fileId: FolderDao.CanCalculateSubitems(fileId) ? null : fileId); } }
private void MoveOrCopyFiles(ICollection fileIds, Folder toFolder, bool copy) { if (fileIds.Count == 0) { return; } var toFolderId = toFolder.ID; foreach (var fileId in fileIds) { if (Canceled) { return; } var file = FileDao.GetFile(fileId); if (file == null) { Error = FilesCommonResource.ErrorMassage_FileNotFound; } else if (!FilesSecurity.CanRead(file)) { Error = FilesCommonResource.ErrorMassage_SecurityException_ReadFile; } else if (Global.EnableUploadFilter && !FileUtility.ExtsUploadable.Contains(FileUtility.GetFileExtension(file.Title))) { Error = FilesCommonResource.ErrorMassage_NotSupportedFormat; } else // if (!Equals(file.FolderID.ToString(), toFolderId.ToString()) || _resolveType == FileConflictResolveType.Duplicate) { var parentFolder = FolderDao.GetFolder(file.FolderID); try { var conflict = _resolveType == FileConflictResolveType.Duplicate ? null : FileDao.GetFile(toFolderId, file.Title); if (conflict != null && !FilesSecurity.CanEdit(conflict)) { Error = FilesCommonResource.ErrorMassage_SecurityException; } else if (conflict != null && EntryManager.FileLockedForMe(conflict.ID)) { Error = FilesCommonResource.ErrorMassage_LockedFile; } else if (conflict == null) { if (copy) { File newFile = null; try { newFile = FileDao.CopyFile(file.ID, toFolderId); //Stream copy will occur inside dao FilesMessageService.Send(file, toFolder, httpRequestHeaders, MessageAction.FileCopied, file.Title, parentFolder.Title, toFolder.Title); if (Equals(newFile.FolderID.ToString(), _toFolderId)) { _needToMarkAsNew.Add(newFile); } if (ProcessedFile(fileId)) { Status += string.Format("file_{0}{1}", newFile.ID, SplitCharacter); ResultedFile(newFile.ID); } } catch { if (newFile != null) { FileDao.DeleteFile(newFile.ID); } throw; } } else { if (EntryManager.FileLockedForMe(file.ID)) { Error = FilesCommonResource.ErrorMassage_LockedFile; } else if (FileTracker.IsEditing(file.ID)) { Error = FilesCommonResource.ErrorMassage_SecurityException_UpdateEditingFile; } else if (FilesSecurity.CanDelete(file)) { FileMarker.RemoveMarkAsNewForAll(file); var newFileId = FileDao.MoveFile(file.ID, toFolderId); FilesMessageService.Send(file, toFolder, httpRequestHeaders, MessageAction.FileMoved, file.Title, parentFolder.Title, toFolder.Title); if (Equals(toFolderId.ToString(), _toFolderId)) { _needToMarkAsNew.Add(FileDao.GetFile(newFileId)); } if (ProcessedFile(fileId)) { Status += string.Format("file_{0}{1}", newFileId, SplitCharacter); ResultedFile(newFileId); } } else { Error = FilesCommonResource.ErrorMassage_SecurityException_DeleteFile; } } } else { if (_resolveType == FileConflictResolveType.Overwrite) { if (EntryManager.FileLockedForMe(conflict.ID)) { Error = FilesCommonResource.ErrorMassage_LockedFile; } else if (FileTracker.IsEditing(conflict.ID)) { Error = FilesCommonResource.ErrorMassage_SecurityException_UpdateEditingFile; } else { conflict.Version++; using (var stream = FileDao.GetFileStream(file)) { conflict.ContentLength = stream.Length; conflict.Comment = string.Empty; conflict = FileDao.SaveFile(conflict, stream); _needToMarkAsNew.Add(conflict); } if (copy) { FilesMessageService.Send(file, toFolder, httpRequestHeaders, MessageAction.FileCopiedWithOverwriting, file.Title, parentFolder.Title, toFolder.Title); if (ProcessedFile(fileId)) { Status += string.Format("file_{0}{1}", conflict.ID, SplitCharacter); ResultedFile(conflict.ID); } } else { if (Equals(file.FolderID.ToString(), toFolderId.ToString())) { if (ProcessedFile(fileId)) { Status += string.Format("file_{0}{1}", conflict.ID, SplitCharacter); ResultedFile(conflict.ID); } } else { if (EntryManager.FileLockedForMe(file.ID)) { Error = FilesCommonResource.ErrorMassage_LockedFile; } else if (FileTracker.IsEditing(file.ID)) { Error = FilesCommonResource.ErrorMassage_SecurityException_UpdateEditingFile; } else if (FilesSecurity.CanDelete(file)) { FileDao.DeleteFile(file.ID); FileDao.DeleteFolder(file.ID); FilesMessageService.Send(file, toFolder, httpRequestHeaders, MessageAction.FileMovedWithOverwriting, file.Title, parentFolder.Title, toFolder.Title); if (ProcessedFile(fileId)) { Status += string.Format("file_{0}{1}", conflict.ID, SplitCharacter); ResultedFile(conflict.ID); } } else { Error = FilesCommonResource.ErrorMassage_SecurityException_DeleteFile; } } } } } else if (_resolveType == FileConflictResolveType.Skip) { //nothing } } } catch (Exception ex) { Error = ex.Message; Logger.Error(Error, ex); } } ProgressStep(); } }
public static File GetParams(File file, bool lastVersion, bool checkLink, bool itsNew, bool editPossible, bool rightToEdit, bool tryEdit, out DocumentServiceParams docServiceParams) { if (!TenantExtra.GetTenantQuota().DocsEdition) { throw new Exception(FilesCommonResource.ErrorMassage_PayTariffDocsEdition); } if (!checkLink && CoreContext.UserManager.GetUsers(SecurityContext.CurrentAccount.ID).IsVisitor()) { rightToEdit = false; } if (file == null) { throw new FileNotFoundException(FilesCommonResource.ErrorMassage_FileNotFound); } if (!string.IsNullOrEmpty(file.Error)) { throw new Exception(file.Error); } if (!checkLink) { rightToEdit = rightToEdit && Global.GetFilesSecurity().CanEdit(file); if (editPossible && !rightToEdit) { editPossible = false; } if (!editPossible && !Global.GetFilesSecurity().CanRead(file)) { throw new SecurityException(FilesCommonResource.ErrorMassage_SecurityException_ReadFile); } } if (file.RootFolderType == FolderType.TRASH) { throw new Exception(FilesCommonResource.ErrorMassage_ViewTrashItem); } rightToEdit = rightToEdit && !EntryManager.FileLockedForMe(file.ID); if (editPossible && !rightToEdit) { editPossible = false; } rightToEdit = rightToEdit && (!FileTracker.IsEditing(file.ID) || FileUtility.CanCoAuhtoring(file.Title) && !FileTracker.IsEditingAlone(file.ID)); if (editPossible && !rightToEdit) { editPossible = false; } rightToEdit = rightToEdit && FileUtility.CanWebEdit(file.Title); if (editPossible && !rightToEdit) { editPossible = false; } if (!editPossible && !FileUtility.CanWebView(file.Title)) { throw new Exception(FilesCommonResource.ErrorMassage_NotSupportedFormat); } var versionForKey = file.Version; if (!FileTracker.FixedVersion(file.ID)) { versionForKey++; } //CreateNewDoc if (itsNew && file.Version == 1 && file.ConvertedType != null && file.CreateOn == file.ModifiedOn) { versionForKey = 1; } var docKey = GetDocKey(file.ID, versionForKey, file.ProviderEntry ? file.ModifiedOn : file.CreateOn); var modeWrite = editPossible && tryEdit; docServiceParams = new DocumentServiceParams { File = file, Key = docKey, CanEdit = rightToEdit && lastVersion, ModeWrite = modeWrite, }; return(file); }
private void MoveOrCopyFiles(ICollection fileIds, Folder toFolder, bool copy) { if (fileIds.Count == 0) { return; } var toFolderId = toFolder.ID; foreach (var fileId in fileIds) { CancellationToken.ThrowIfCancellationRequested(); var file = FileDao.GetFile(fileId); if (file == null) { Error = FilesCommonResource.ErrorMassage_FileNotFound; } else if (!FilesSecurity.CanRead(file)) { Error = FilesCommonResource.ErrorMassage_SecurityException_ReadFile; } else if (file.RootFolderType == FolderType.Privacy && (copy || toFolder.RootFolderType != FolderType.Privacy)) { Error = FilesCommonResource.ErrorMassage_SecurityException_MoveFile; } else if (Global.EnableUploadFilter && !FileUtility.ExtsUploadable.Contains(FileUtility.GetFileExtension(file.Title))) { Error = FilesCommonResource.ErrorMassage_NotSupportedFormat; } else { var parentFolder = FolderDao.GetFolder(file.FolderID); try { var conflict = _resolveType == FileConflictResolveType.Duplicate || file.RootFolderType == FolderType.Privacy ? null : FileDao.GetFile(toFolderId, file.Title); if (conflict == null) { File newFile = null; if (copy) { try { newFile = FileDao.CopyFile(file.ID, toFolderId); //Stream copy will occur inside dao FilesMessageService.Send(newFile, toFolder, _headers, MessageAction.FileCopied, newFile.Title, parentFolder.Title, toFolder.Title); if (Equals(newFile.FolderID.ToString(), _toFolderId)) { _needToMark.Add(newFile); } if (ProcessedFile(fileId)) { Status += string.Format("file_{0}{1}", newFile.ID, SPLIT_CHAR); } } catch { if (newFile != null) { FileDao.DeleteFile(newFile.ID); } throw; } } else { string tmpError; if (WithError(new[] { file }, out tmpError)) { Error = tmpError; } else { FileMarker.RemoveMarkAsNewForAll(file); var newFileId = FileDao.MoveFile(file.ID, toFolderId); newFile = FileDao.GetFile(newFileId); FilesMessageService.Send(file.RootFolderType != FolderType.USER ? file : newFile, toFolder, _headers, MessageAction.FileMoved, file.Title, parentFolder.Title, toFolder.Title); if (Equals(toFolderId.ToString(), _toFolderId)) { _needToMark.Add(newFile); } if (ProcessedFile(fileId)) { Status += string.Format("file_{0}{1}", newFileId, SPLIT_CHAR); } } } } else { if (_resolveType == FileConflictResolveType.Overwrite) { if (!FilesSecurity.CanEdit(conflict)) { Error = FilesCommonResource.ErrorMassage_SecurityException; } else if (EntryManager.FileLockedForMe(conflict.ID)) { Error = FilesCommonResource.ErrorMassage_LockedFile; } else if (FileTracker.IsEditing(conflict.ID)) { Error = FilesCommonResource.ErrorMassage_SecurityException_UpdateEditingFile; } else { var newFile = conflict; newFile.Version++; newFile.VersionGroup++; newFile.PureTitle = file.PureTitle; newFile.ConvertedType = file.ConvertedType; newFile.Comment = FilesCommonResource.CommentOverwrite; newFile.Encrypted = file.Encrypted; using (var stream = FileDao.GetFileStream(file)) { newFile.ContentLength = stream.CanSeek ? stream.Length : file.ContentLength; newFile = FileDao.SaveFile(newFile, stream); } _needToMark.Add(newFile); if (copy) { FilesMessageService.Send(newFile, toFolder, _headers, MessageAction.FileCopiedWithOverwriting, newFile.Title, parentFolder.Title, toFolder.Title); if (ProcessedFile(fileId)) { Status += string.Format("file_{0}{1}", newFile.ID, SPLIT_CHAR); } } else { if (Equals(file.FolderID.ToString(), toFolderId.ToString())) { if (ProcessedFile(fileId)) { Status += string.Format("file_{0}{1}", newFile.ID, SPLIT_CHAR); } } else { string tmpError; if (WithError(new[] { file }, out tmpError)) { Error = tmpError; } else { FileDao.DeleteFile(file.ID); FilesMessageService.Send(file.RootFolderType != FolderType.USER ? file : newFile, toFolder, _headers, MessageAction.FileMovedWithOverwriting, file.Title, parentFolder.Title, toFolder.Title); if (ProcessedFile(fileId)) { Status += string.Format("file_{0}{1}", newFile.ID, SPLIT_CHAR); } } } } } } else if (_resolveType == FileConflictResolveType.Skip) { //nothing } } } catch (Exception ex) { Error = ex.Message; Logger.Error(Error, ex); } } ProgressStep(fileId: FolderDao.CanCalculateSubitems(fileId) ? null : fileId); } }
public static File GetParams(File file, bool lastVersion, FileShare linkRight, bool rightToRename, bool rightToEdit, bool editPossible, bool tryEdit, bool tryCoauth, out Configuration configuration) { if (file == null) { throw new FileNotFoundException(FilesCommonResource.ErrorMassage_FileNotFound); } if (!string.IsNullOrEmpty(file.Error)) { throw new Exception(file.Error); } var rightToReview = rightToEdit; var reviewPossible = editPossible; if (linkRight == FileShare.Restrict && CoreContext.UserManager.GetUsers(SecurityContext.CurrentAccount.ID).IsVisitor()) { rightToEdit = false; rightToReview = false; } var fileSecurity = Global.GetFilesSecurity(); rightToEdit = rightToEdit && (linkRight == FileShare.ReadWrite || fileSecurity.CanEdit(file)); if (editPossible && !rightToEdit) { editPossible = false; } rightToRename = rightToRename && rightToEdit && fileSecurity.CanEdit(file); rightToReview = rightToReview && (linkRight == FileShare.Review || linkRight == FileShare.ReadWrite || fileSecurity.CanReview(file)); if (reviewPossible && !rightToReview) { reviewPossible = false; } if (linkRight == FileShare.Restrict && !(editPossible || reviewPossible) && !fileSecurity.CanRead(file)) { throw new SecurityException(FilesCommonResource.ErrorMassage_SecurityException_ReadFile); } if (file.RootFolderType == FolderType.TRASH) { throw new Exception(FilesCommonResource.ErrorMassage_ViewTrashItem); } if (file.ContentLength > SetupInfo.AvailableFileSize) { throw new Exception(string.Format(FilesCommonResource.ErrorMassage_FileSizeEdit, FileSizeComment.FilesSizeToString(SetupInfo.AvailableFileSize))); } string strError = null; if ((editPossible || reviewPossible) && EntryManager.FileLockedForMe(file.ID)) { strError = FilesCommonResource.ErrorMassage_LockedFile; rightToRename = false; rightToEdit = false; editPossible = false; reviewPossible = false; } if (editPossible && !FileUtility.CanWebEdit(file.Title)) { rightToEdit = editPossible = false; } if (!editPossible && !FileUtility.CanWebView(file.Title)) { throw new Exception(string.Format("{0} ({1})", FilesCommonResource.ErrorMassage_NotSupportedFormat, FileUtility.GetFileExtension(file.Title))); } if (reviewPossible && !FileUtility.CanWebReview(file.Title)) { rightToReview = reviewPossible = false; } var rightChangeHistory = rightToEdit; if (FileTracker.IsEditing(file.ID)) { rightChangeHistory = false; bool coauth; if ((editPossible || reviewPossible) && tryCoauth && (!(coauth = FileUtility.CanCoAuhtoring(file.Title)) || FileTracker.IsEditingAlone(file.ID))) { if (tryEdit) { var editingBy = FileTracker.GetEditingBy(file.ID).FirstOrDefault(); strError = string.Format(!coauth ? FilesCommonResource.ErrorMassage_EditingCoauth : FilesCommonResource.ErrorMassage_EditingMobile, Global.GetUserName(editingBy)); } rightToEdit = editPossible = reviewPossible = false; } } var docKey = GetDocKey(file); var modeWrite = (editPossible || reviewPossible) && tryEdit; configuration = new Configuration(file) { Document = { Key = docKey, Permissions = { Edit = rightToEdit && lastVersion, Rename = rightToRename && lastVersion && !file.ProviderEntry, Review = rightToReview && lastVersion, ChangeHistory = rightChangeHistory, } }, EditorConfig = { ModeWrite = modeWrite, }, ErrorMessage = strError, }; return(file); }
public static File GetParams(File file, bool lastVersion, bool checkLink, bool itsNew, bool editPossible, bool rightToEdit, bool rightToReview, bool tryEdit, out DocumentServiceParams docServiceParams) { if (!checkLink && CoreContext.UserManager.GetUsers(SecurityContext.CurrentAccount.ID).IsVisitor()) { rightToEdit = false; rightToReview = false; } if (file == null) { throw new FileNotFoundException(FilesCommonResource.ErrorMassage_FileNotFound); } if (!string.IsNullOrEmpty(file.Error)) { throw new Exception(file.Error); } var fileSecurity = Global.GetFilesSecurity(); var reviewPossible = editPossible; if (!checkLink) { rightToEdit = rightToEdit && fileSecurity.CanEdit(file); if (editPossible && !rightToEdit) { editPossible = false; } rightToReview = rightToReview && fileSecurity.CanReview(file); if (reviewPossible && !rightToReview) { reviewPossible = false; } if (!(editPossible || reviewPossible) && !fileSecurity.CanRead(file)) { throw new SecurityException(FilesCommonResource.ErrorMassage_SecurityException_ReadFile); } } if (file.RootFolderType == FolderType.TRASH) { throw new Exception(FilesCommonResource.ErrorMassage_ViewTrashItem); } if (file.ContentLength > SetupInfo.AvailableFileSize) { throw new Exception(string.Format(FilesCommonResource.ErrorMassage_FileSizeEdit, FileSizeComment.FilesSizeToString(SetupInfo.AvailableFileSize))); } if ((editPossible || reviewPossible) && EntryManager.FileLockedForMe(file.ID)) { rightToEdit = editPossible = reviewPossible = false; } if ((editPossible || reviewPossible) && FileTracker.IsEditing(file.ID) && (!FileUtility.CanCoAuhtoring(file.Title) || FileTracker.IsEditingAlone(file.ID))) { rightToEdit = editPossible = reviewPossible = false; } if (editPossible && !FileUtility.CanWebEdit(file.Title)) { rightToEdit = editPossible = false; } if (!editPossible && !FileUtility.CanWebView(file.Title)) { throw new Exception(FilesCommonResource.ErrorMassage_NotSupportedFormat); } rightToReview = rightToReview && reviewPossible && FileUtility.CanWebReview(file.Title); var versionForKey = file.Version; //CreateNewDoc if ((itsNew || FileTracker.FixedVersion(file.ID)) && file.Version == 1 && file.CreateOn == file.ModifiedOn) { versionForKey = 0; } var docKey = GetDocKey(file.ID, versionForKey, file.ProviderEntry ? file.ModifiedOn : file.CreateOn); var modeWrite = (editPossible || reviewPossible) && tryEdit; docServiceParams = new DocumentServiceParams { File = file, Key = docKey, CanEdit = rightToEdit && lastVersion, ModeWrite = modeWrite, CanReview = rightToReview && lastVersion, }; return(file); }