From 645749fbc78dd197ec2883b79a6ce38720e79a5b Mon Sep 17 00:00:00 2001 From: pavelbannov Date: Mon, 30 Nov 2020 16:47:26 +0300 Subject: [PATCH 1/5] Files: rename ParentFolderID to FolderId. Optimization --- .../Core/Core/Dao/TeamlabDao/FolderDao.cs | 12 +-- products/ASC.Files/Core/Core/Entries/File.cs | 16 ---- .../ASC.Files/Core/Core/Entries/FileEntry.cs | 17 +++- .../ASC.Files/Core/Core/Entries/Folder.cs | 15 ---- .../ASC.Files/Core/Core/FileStorageService.cs | 10 +-- .../Core/Core/Security/FileSecurity.cs | 5 ++ .../Core/Core/Thirdparty/Box/BoxDaoBase.cs | 2 +- .../Core/Core/Thirdparty/Box/BoxFolderDao.cs | 4 +- .../Core/Core/Thirdparty/CrossDao.cs | 2 +- .../Core/Thirdparty/Dropbox/DropboxDaoBase.cs | 2 +- .../Thirdparty/Dropbox/DropboxFolderDao.cs | 4 +- .../GoogleDrive/GoogleDriveDaoBase.cs | 2 +- .../GoogleDrive/GoogleDriveFolderDao.cs | 4 +- .../Core/Thirdparty/IThirdPartyProviderDao.cs | 2 +- .../Thirdparty/OneDrive/OneDriveDaoBase.cs | 2 +- .../Thirdparty/OneDrive/OneDriveFolderDao.cs | 4 +- .../ProviderDao/ProviderFolderDao.cs | 10 +-- .../SharePoint/SharePointFolderDao.cs | 4 +- .../SharePoint/SharePointProviderInfo.cs | 4 +- .../Thirdparty/Sharpbox/SharpBoxDaoBase.cs | 2 +- .../Thirdparty/Sharpbox/SharpBoxFolderDao.cs | 6 +- products/ASC.Files/Core/Helpers/Global.cs | 2 +- .../Core/Model/FileOperationWraper.cs | 4 +- products/ASC.Files/Core/Model/FileWrapper.cs | 85 ++++++++++++------- .../Core/Model/FolderContentWrapper.cs | 36 ++++++-- .../ASC.Files/Core/Model/FolderWrapper.cs | 46 +++++++--- .../FileOperations/FileMoveCopyOperation.cs | 2 +- products/ASC.Files/Core/Utils/EntryManager.cs | 2 +- products/ASC.Files/Core/Utils/FileMarker.cs | 2 +- products/ASC.Files/Core/Utils/FileUploader.cs | 2 +- .../Server/Controllers/FilesController.cs | 2 +- .../Server/Helpers/FilesControllerHelper.cs | 4 +- .../ASC.Files/Service/Core/FoldersModule.cs | 12 +-- 33 files changed, 188 insertions(+), 140 deletions(-) diff --git a/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs b/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs index 85774565b2..6073c3efa3 100644 --- a/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs +++ b/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs @@ -325,7 +325,7 @@ namespace ASC.Files.Core.Data var newFolder = new DbFolder { Id = 0, - ParentId = folder.ParentFolderID, + ParentId = folder.FolderID, Title = folder.Title, CreateOn = TenantUtil.DateTimeToUtc(folder.CreateOn), CreateBy = folder.CreateBy, @@ -353,7 +353,7 @@ namespace ASC.Files.Core.Data //full path to root var oldTree = FilesDbContext.Tree - .Where(r => r.FolderId == folder.ParentFolderID); + .Where(r => r.FolderId == folder.FolderID); foreach (var o in oldTree) { @@ -569,7 +569,7 @@ namespace ASC.Files.Core.Data folder.FolderType = FolderType.DEFAULT; var copy = ServiceProvider.GetService>(); - copy.ParentFolderID = toFolderId; + copy.FolderID = toFolderId; copy.RootFolderId = toFolder.RootFolderId; copy.RootFolderCreator = toFolder.RootFolderCreator; copy.RootFolderType = toFolder.RootFolderType; @@ -912,7 +912,7 @@ namespace ASC.Files.Core.Data if (createIfNotExists) { var folder = ServiceProvider.GetService>(); - folder.ParentFolderID = 0; + folder.FolderID = 0; switch (bunch) { case my: @@ -1080,7 +1080,7 @@ namespace ASC.Files.Core.Data if (r == null) return null; var result = ServiceProvider.GetService>(); result.ID = r.Folder.Id; - result.ParentFolderID = r.Folder.ParentId; + result.FolderID = r.Folder.ParentId; result.Title = r.Folder.Title; result.CreateOn = TenantUtil.DateTimeFromUtc(r.Folder.CreateOn); result.CreateBy = r.Folder.CreateBy; @@ -1132,7 +1132,7 @@ namespace ASC.Files.Core.Data break; } - if (result.FolderType != FolderType.DEFAULT && 0.Equals(result.ParentFolderID)) result.RootFolderType = result.FolderType; + if (result.FolderType != FolderType.DEFAULT && 0.Equals(result.FolderID)) result.RootFolderType = result.FolderType; if (result.FolderType != FolderType.DEFAULT && result.RootFolderCreator == default) result.RootFolderCreator = result.CreateBy; if (result.FolderType != FolderType.DEFAULT && 0.Equals(result.RootFolderId)) result.RootFolderId = result.ID; diff --git a/products/ASC.Files/Core/Core/Entries/File.cs b/products/ASC.Files/Core/Core/Entries/File.cs index eec26b2c87..6b7e42fd3a 100644 --- a/products/ASC.Files/Core/Core/Entries/File.cs +++ b/products/ASC.Files/Core/Core/Entries/File.cs @@ -77,8 +77,6 @@ namespace ASC.Files.Core FileConverter = fileConverter; } - public T FolderID { get; set; } - public int Version { get; set; } [JsonPropertyName("version_group")] @@ -242,19 +240,5 @@ namespace ASC.Files.Core [NonSerialized] private readonly FileConverter FileConverter; - - private T _folderIdDisplay; - - [JsonPropertyName("folder_id")] - public override T FolderIdDisplay - { - get - { - if (_folderIdDisplay != null) return _folderIdDisplay; - - return FolderID; - } - set { _folderIdDisplay = value; } - } } } \ No newline at end of file diff --git a/products/ASC.Files/Core/Core/Entries/FileEntry.cs b/products/ASC.Files/Core/Core/Entries/FileEntry.cs index 0c260bd9c3..920af3968b 100644 --- a/products/ASC.Files/Core/Core/Entries/FileEntry.cs +++ b/products/ASC.Files/Core/Core/Entries/FileEntry.cs @@ -129,13 +129,22 @@ namespace ASC.Files.Core { } - public T ID { get; set; } + public T ID { get; set; } + + public T FolderID { get; set; } + + private T _folderIdDisplay; [JsonPropertyName("folder_id")] - public abstract T FolderIdDisplay + public T FolderIdDisplay { - get; - set; + get + { + if (_folderIdDisplay != null) return _folderIdDisplay; + + return FolderID; + } + set { _folderIdDisplay = value; } } public T RootFolderId { get; set; } diff --git a/products/ASC.Files/Core/Core/Entries/Folder.cs b/products/ASC.Files/Core/Core/Entries/Folder.cs index 542e31f511..5927a8a0d9 100644 --- a/products/ASC.Files/Core/Core/Entries/Folder.cs +++ b/products/ASC.Files/Core/Core/Entries/Folder.cs @@ -68,8 +68,6 @@ namespace ASC.Files.Core { public FolderType FolderType { get; set; } - public T ParentFolderID { get; set; } - public int TotalFiles { get; set; } public int TotalSubFolders { get; set; } @@ -86,19 +84,6 @@ namespace ASC.Files.Core set { NewForMe = Convert.ToInt32(value); } } - private T _folderIdDisplay; - - public override T FolderIdDisplay - { - get - { - if (_folderIdDisplay != null) return _folderIdDisplay; - - return ParentFolderID; - } - set { _folderIdDisplay = value; } - } - public Folder(Global global) : base(global) { diff --git a/products/ASC.Files/Core/Core/FileStorageService.cs b/products/ASC.Files/Core/Core/FileStorageService.cs index 334fc349c0..53857be65b 100644 --- a/products/ASC.Files/Core/Core/FileStorageService.cs +++ b/products/ASC.Files/Core/Core/FileStorageService.cs @@ -300,8 +300,8 @@ namespace ASC.Web.Files.Services.WCFService var prevVisible = breadCrumbs.ElementAtOrDefault(breadCrumbs.Count() - 2); if (prevVisible != null) { - if (prevVisible is Folder f1) parent.ParentFolderID = (T)Convert.ChangeType(f1.ID, typeof(T)); - if (prevVisible is Folder f2) parent.ParentFolderID = (T)Convert.ChangeType(f2.ID, typeof(T)); + if (prevVisible is Folder f1) parent.FolderID = (T)Convert.ChangeType(f1.ID, typeof(T)); + if (prevVisible is Folder f2) parent.FolderID = (T)Convert.ChangeType(f2.ID, typeof(T)); } parent.Shareable = FileSharing.CanSetAccess(parent) @@ -398,7 +398,7 @@ namespace ASC.Web.Files.Services.WCFService { var newFolder = ServiceProvider.GetService>(); newFolder.Title = title; - newFolder.ParentFolderID = parent.ID; + newFolder.FolderID = parent.ID; var folderId = folderDao.SaveFolder(newFolder); var folder = folderDao.GetFolder(folderId); @@ -446,7 +446,7 @@ namespace ASC.Web.Files.Services.WCFService if (folder.RootFolderType == FolderType.USER && !Equals(folder.RootFolderCreator, AuthContext.CurrentAccount.ID) - && !FileSecurity.CanRead(folderDao.GetFolder(folder.ParentFolderID))) + && !FileSecurity.CanRead(folderDao.GetFolder(folder.FolderID))) { folder.FolderIdDisplay = GlobalFolderHelper.GetFolderShare(); } @@ -1556,7 +1556,7 @@ namespace ASC.Web.Files.Services.WCFService var folderIdToMy = folderDao.GetFolderIDUser(true, userTo.ID); var newFolder = ServiceProvider.GetService>(); newFolder.Title = string.Format(CustomNamingPeople.Substitute("TitleDeletedUserFolder"), userFrom.DisplayUserName(false, DisplayUserSettingsHelper)); - newFolder.ParentFolderID = folderIdToMy; + newFolder.FolderID = folderIdToMy; var newFolderTo = folderDao.SaveFolder(newFolder); diff --git a/products/ASC.Files/Core/Core/Security/FileSecurity.cs b/products/ASC.Files/Core/Core/Security/FileSecurity.cs index eb8206c758..943bba80b4 100644 --- a/products/ASC.Files/Core/Core/Security/FileSecurity.cs +++ b/products/ASC.Files/Core/Core/Security/FileSecurity.cs @@ -110,6 +110,11 @@ namespace ASC.Files.Core.Security public List, bool>> CanRead(IEnumerable> entry, Guid userId) { return Can(entry, userId, FilesSecurityActions.Read); + } + + public List, bool>> CanRead(IEnumerable> entry) + { + return Can(entry, AuthContext.CurrentAccount.ID, FilesSecurityActions.Read); } public bool CanRead(FileEntry entry, Guid userId) diff --git a/products/ASC.Files/Core/Core/Thirdparty/Box/BoxDaoBase.cs b/products/ASC.Files/Core/Core/Thirdparty/Box/BoxDaoBase.cs index a0f6412895..d812b62f92 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/Box/BoxDaoBase.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/Box/BoxDaoBase.cs @@ -128,7 +128,7 @@ namespace ASC.Files.Thirdparty.Box var folder = GetFolder(); folder.ID = MakeId(boxFolder.Id); - folder.ParentFolderID = isRoot ? null : MakeId(GetParentFolderId(boxFolder)); + folder.FolderID = isRoot ? null : MakeId(GetParentFolderId(boxFolder)); folder.CreateOn = isRoot ? ProviderInfo.CreateOn : (boxFolder.CreatedAt ?? default); folder.ModifiedOn = isRoot ? ProviderInfo.CreateOn : (boxFolder.ModifiedAt ?? default); diff --git a/products/ASC.Files/Core/Core/Thirdparty/Box/BoxFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/Box/BoxFolderDao.cs index 5cc078257e..d62651270b 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/Box/BoxFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/Box/BoxFolderDao.cs @@ -184,9 +184,9 @@ namespace ASC.Files.Thirdparty.Box return RenameFolder(folder, folder.Title); } - if (folder.ParentFolderID != null) + if (folder.FolderID != null) { - var boxFolderId = MakeBoxId(folder.ParentFolderID); + var boxFolderId = MakeBoxId(folder.FolderID); folder.Title = GetAvailableTitle(folder.Title, boxFolderId, IsExist); diff --git a/products/ASC.Files/Core/Core/Thirdparty/CrossDao.cs b/products/ASC.Files/Core/Core/Thirdparty/CrossDao.cs index ba9db453b6..446ddf5f8a 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/CrossDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/CrossDao.cs @@ -111,7 +111,7 @@ namespace ASC.Files.Core.Thirdparty var toFolder1 = ServiceProvider.GetService>(); toFolder1.Title = fromFolder.Title; - toFolder1.ParentFolderID = toConverter(toRootFolderId); + toFolder1.FolderID = toConverter(toRootFolderId); var toFolder = toFolderDao.GetFolder(fromFolder.Title, toConverter(toRootFolderId)); var toFolderId = toFolder != null diff --git a/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxDaoBase.cs b/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxDaoBase.cs index e8f0b430ec..75734c7826 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxDaoBase.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxDaoBase.cs @@ -123,7 +123,7 @@ namespace ASC.Files.Thirdparty.Dropbox var folder = GetFolder(); folder.ID = MakeId(dropboxFolder); - folder.ParentFolderID = isRoot ? null : MakeId(GetParentFolderPath(dropboxFolder)); + folder.FolderID = isRoot ? null : MakeId(GetParentFolderPath(dropboxFolder)); folder.CreateOn = isRoot ? ProviderInfo.CreateOn : default; folder.ModifiedOn = isRoot ? ProviderInfo.CreateOn : default; folder.Title = MakeFolderTitle(dropboxFolder); diff --git a/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxFolderDao.cs index e3b50b8e72..a857d46032 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxFolderDao.cs @@ -185,9 +185,9 @@ namespace ASC.Files.Thirdparty.Dropbox return RenameFolder(folder, folder.Title); } - if (folder.ParentFolderID != null) + if (folder.FolderID != null) { - var dropboxFolderPath = MakeDropboxPath(folder.ParentFolderID); + var dropboxFolderPath = MakeDropboxPath(folder.FolderID); folder.Title = GetAvailableTitle(folder.Title, dropboxFolderPath, IsExist); diff --git a/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveDaoBase.cs b/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveDaoBase.cs index 0e75c4e9d7..49a45297d5 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveDaoBase.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveDaoBase.cs @@ -137,7 +137,7 @@ namespace ASC.Files.Thirdparty.GoogleDrive var folder = GetFolder(); folder.ID = MakeId(driveEntry); - folder.ParentFolderID = isRoot ? null : MakeId(GetParentDriveId(driveEntry)); + folder.FolderID = isRoot ? null : MakeId(GetParentDriveId(driveEntry)); folder.CreateOn = isRoot ? ProviderInfo.CreateOn : (driveEntry.CreatedTime ?? default); folder.ModifiedOn = isRoot ? ProviderInfo.CreateOn : (driveEntry.ModifiedTime ?? default); diff --git a/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveFolderDao.cs index 7fa83abcd2..a0ecd5341d 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveFolderDao.cs @@ -181,9 +181,9 @@ namespace ASC.Files.Thirdparty.GoogleDrive return RenameFolder(folder, folder.Title); } - if (folder.ParentFolderID != null) + if (folder.FolderID != null) { - var driveFolderId = MakeDriveId(folder.ParentFolderID); + var driveFolderId = MakeDriveId(folder.FolderID); var driveFolder = ProviderInfo.Storage.InsertEntry(null, folder.Title, driveFolderId, true); diff --git a/products/ASC.Files/Core/Core/Thirdparty/IThirdPartyProviderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/IThirdPartyProviderDao.cs index 942399e478..886a82f89f 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/IThirdPartyProviderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/IThirdPartyProviderDao.cs @@ -280,7 +280,7 @@ namespace ASC.Files.Thirdparty InitFileEntryError(folder, entry); - folder.ParentFolderID = null; + folder.FolderID = null; return folder; } diff --git a/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveDaoBase.cs b/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveDaoBase.cs index aefab62c21..c2384647a1 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveDaoBase.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveDaoBase.cs @@ -123,7 +123,7 @@ namespace ASC.Files.Thirdparty.OneDrive var folder = GetFolder(); folder.ID = MakeId(isRoot ? string.Empty : onedriveFolder.Id); - folder.ParentFolderID = isRoot ? null : MakeId(GetParentFolderId(onedriveFolder)); + folder.FolderID = isRoot ? null : MakeId(GetParentFolderId(onedriveFolder)); folder.CreateOn = isRoot ? ProviderInfo.CreateOn : (onedriveFolder.CreatedDateTime.HasValue ? TenantUtil.DateTimeFromUtc(onedriveFolder.CreatedDateTime.Value.DateTime) : default); folder.ModifiedOn = isRoot ? ProviderInfo.CreateOn : (onedriveFolder.LastModifiedDateTime.HasValue ? TenantUtil.DateTimeFromUtc(onedriveFolder.LastModifiedDateTime.Value.DateTime) : default); diff --git a/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveFolderDao.cs index 4a9ac2c480..f1889c6940 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveFolderDao.cs @@ -181,9 +181,9 @@ namespace ASC.Files.Thirdparty.OneDrive return RenameFolder(folder, folder.Title); } - if (folder.ParentFolderID != null) + if (folder.FolderID != null) { - var onedriveFolderId = MakeOneDriveId(folder.ParentFolderID); + var onedriveFolderId = MakeOneDriveId(folder.FolderID); folder.Title = GetAvailableTitle(folder.Title, onedriveFolderId, IsExist); diff --git a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFolderDao.cs index 665e53651d..5e62b58943 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFolderDao.cs @@ -156,14 +156,14 @@ filterType, subjectGroup, subjectID, searchText, searchSubfolders, checkShare); folder.ID = folderId; return newFolderId; } - if (folder.ParentFolderID != null) + if (folder.FolderID != null) { - var folderId = folder.ParentFolderID; + var folderId = folder.FolderID; var selector = GetSelector(folderId); - folder.ParentFolderID = selector.ConvertId(folderId); + folder.FolderID = selector.ConvertId(folderId); var folderDao = selector.GetFolderDao(folderId); var newFolderId = folderDao.SaveFolder(folder); - folder.ParentFolderID = folderId; + folder.FolderID = folderId; return newFolderId; } @@ -277,7 +277,7 @@ filterType, subjectGroup, subjectID, searchText, searchSubfolders, checkShare); var folderId = folder.ID; var selector = GetSelector(folderId); folder.ID = selector.ConvertId(folderId); - folder.ParentFolderID = selector.ConvertId(folder.ParentFolderID); + folder.FolderID = selector.ConvertId(folder.FolderID); var folderDao = selector.GetFolderDao(folderId); return folderDao.RenameFolder(folder, newTitle); } diff --git a/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointFolderDao.cs index aab9293251..353bf9c2a3 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointFolderDao.cs @@ -183,9 +183,9 @@ namespace ASC.Files.Thirdparty.SharePoint return ProviderInfo.ToFolder(savedfolder).ID; } - if (folder.ParentFolderID != null) + if (folder.FolderID != null) { - var parentFolder = ProviderInfo.GetFolderById(folder.ParentFolderID); + var parentFolder = ProviderInfo.GetFolderById(folder.FolderID); folder.Title = GetAvailableTitle(folder.Title, parentFolder, IsExist); diff --git a/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointProviderInfo.cs b/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointProviderInfo.cs index 3c2b072e16..2665cd06fd 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointProviderInfo.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointProviderInfo.cs @@ -500,7 +500,7 @@ namespace ASC.Files.Thirdparty.SharePoint if (folder is SharePointFolderErrorEntry errorFolder) { result.ID = MakeId(errorFolder.ID); - result.ParentFolderID = null; + result.FolderID = null; result.CreateBy = Owner; result.CreateOn = DateTime.UtcNow; result.FolderType = FolderType.DEFAULT; @@ -523,7 +523,7 @@ namespace ASC.Files.Thirdparty.SharePoint var isRoot = folder.ServerRelativeUrl == SpRootFolderId; result.ID = MakeId(isRoot ? "" : folder.ServerRelativeUrl); - result.ParentFolderID = isRoot ? null : MakeId(GetParentFolderId(folder.ServerRelativeUrl)); + result.FolderID = isRoot ? null : MakeId(GetParentFolderId(folder.ServerRelativeUrl)); result.CreateBy = Owner; result.CreateOn = CreateOn; result.FolderType = FolderType.DEFAULT; diff --git a/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxDaoBase.cs b/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxDaoBase.cs index dbb932b29d..4139bbc201 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxDaoBase.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxDaoBase.cs @@ -281,7 +281,7 @@ namespace ASC.Files.Thirdparty.Sharpbox var folder = GetFolder(); folder.ID = MakeId(fsEntry); - folder.ParentFolderID = isRoot ? null : MakeId(fsEntry.Parent); + folder.FolderID = isRoot ? null : MakeId(fsEntry.Parent); folder.CreateOn = isRoot ? ProviderInfo.CreateOn : fsEntry.Modified; folder.ModifiedOn = isRoot ? ProviderInfo.CreateOn : fsEntry.Modified; folder.RootFolderId = MakeId(RootFolder()); diff --git a/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxFolderDao.cs index fedc0ce2a2..b7bc204679 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxFolderDao.cs @@ -186,9 +186,9 @@ namespace ASC.Files.Thirdparty.Sharpbox var savedfolder = ProviderInfo.Storage.CreateFolder(MakePath(folder.ID)); return MakeId(savedfolder); } - if (folder.ParentFolderID != null) + if (folder.FolderID != null) { - var parentFolder = GetFolderById(folder.ParentFolderID); + var parentFolder = GetFolderById(folder.FolderID); folder.Title = GetAvailableTitle(folder.Title, parentFolder, IsExist); @@ -390,7 +390,7 @@ namespace ASC.Files.Thirdparty.Sharpbox } else { - var parentFolder = GetFolderById(folder.ParentFolderID); + var parentFolder = GetFolderById(folder.FolderID); newTitle = GetAvailableTitle(newTitle, parentFolder, IsExist); //rename folder diff --git a/products/ASC.Files/Core/Helpers/Global.cs b/products/ASC.Files/Core/Helpers/Global.cs index 47f3d64350..dc51782511 100644 --- a/products/ASC.Files/Core/Helpers/Global.cs +++ b/products/ASC.Files/Core/Helpers/Global.cs @@ -566,7 +566,7 @@ namespace ASC.Web.Files.Classes { var folder = ServiceProvider.GetService>(); folder.Title = folderName; - folder.ParentFolderID = folderId; + folder.FolderID = folderId; var subFolderId = folderDao.SaveFolder(folder); diff --git a/products/ASC.Files/Core/Model/FileOperationWraper.cs b/products/ASC.Files/Core/Model/FileOperationWraper.cs index a61fc76423..5114be0ff9 100644 --- a/products/ASC.Files/Core/Model/FileOperationWraper.cs +++ b/products/ASC.Files/Core/Model/FileOperationWraper.cs @@ -199,7 +199,7 @@ namespace ASC.Api.Documents { var folderDao = DaoFactory.GetFolderDao(); return folderDao.GetFolders(folders.ToArray()) - .Select(FolderWrapperHelper.Get) + .Select(r => FolderWrapperHelper.Get(r)) .Cast(); } @@ -207,7 +207,7 @@ namespace ASC.Api.Documents { var fileDao = DaoFactory.GetFileDao(); return fileDao.GetFiles(files.ToArray()) - .Select(FilesWrapperHelper.Get) + .Select(r => FilesWrapperHelper.Get(r)) .Cast(); } } diff --git a/products/ASC.Files/Core/Model/FileWrapper.cs b/products/ASC.Files/Core/Model/FileWrapper.cs index c159fe4768..51db2954a2 100644 --- a/products/ASC.Files/Core/Model/FileWrapper.cs +++ b/products/ASC.Files/Core/Model/FileWrapper.cs @@ -25,8 +25,10 @@ using System; +using System.Collections.Generic; using System.Globalization; - +using System.Linq; + using ASC.Api.Core; using ASC.Api.Utils; using ASC.Common; @@ -171,47 +173,68 @@ namespace ASC.Api.Documents FileUtility = fileUtility; } - public FileWrapper Get(File file) + public FileWrapper Get(File file, List, bool>> folders = null) { - var result = Get, T>(file); + var result = GetFileWrapper(file); + result.FolderId = file.FolderID; if (file.RootFolderType == FolderType.USER && !Equals(file.RootFolderCreator, AuthContext.CurrentAccount.ID)) { result.RootFolderType = FolderType.SHARE; - var folderDao = DaoFactory.GetFolderDao(); - var parentFolder = folderDao.GetFolder(file.FolderID); - if (!FileSecurity.CanRead(parentFolder)) - { - result.FolderId = GlobalFolderHelper.GetFolderShare(); + var folderDao = DaoFactory.GetFolderDao(); + FileEntry parentFolder; + + if(folders != null) + { + var folderWithRight = folders.FirstOrDefault(f => f.Item1.ID.Equals(file.FolderID)); + if (folderWithRight == null || !folderWithRight.Item2) + { + result.FolderId = GlobalFolderHelper.GetFolderShare(); + } + } + else + { + parentFolder = folderDao.GetFolder(file.FolderID); + if (!FileSecurity.CanRead(parentFolder)) + { + result.FolderId = GlobalFolderHelper.GetFolderShare(); + } } - } + } + - result.FileExst = FileUtility.GetFileExtension(file.Title); - result.FileType = FileUtility.GetFileTypeByExtention(result.FileExst); - - result.Version = file.Version; - result.VersionGroup = file.VersionGroup; - result.ContentLength = file.ContentLengthString; - result.FileStatus = file.FileStatus; - result.PureContentLength = file.ContentLength.NullIfDefault(); - result.Comment = file.Comment; + return result; + } + + private FileWrapper GetFileWrapper(File file) + { + var result = Get, T>(file); + + result.FileExst = FileUtility.GetFileExtension(file.Title); + result.FileType = FileUtility.GetFileTypeByExtention(result.FileExst); + result.Version = file.Version; + result.VersionGroup = file.VersionGroup; + result.ContentLength = file.ContentLengthString; + result.FileStatus = file.FileStatus; + result.PureContentLength = file.ContentLength.NullIfDefault(); + result.Comment = file.Comment; result.Encrypted = file.Encrypted.NullIfDefault(); result.Locked = file.Locked.NullIfDefault(); result.LockedBy = file.LockedBy; - - try - { - result.ViewUrl = CommonLinkUtility.GetFullAbsolutePath(file.DownloadUrl); - - result.WebUrl = CommonLinkUtility.GetFullAbsolutePath(FilesLinkUtility.GetFileWebPreviewUrl(FileUtility, file.Title, file.ID)); - } - catch (Exception) - { - //Don't catch anything here because of httpcontext - } - - return result; + + try + { + result.ViewUrl = CommonLinkUtility.GetFullAbsolutePath(file.DownloadUrl); + + result.WebUrl = CommonLinkUtility.GetFullAbsolutePath(FilesLinkUtility.GetFileWebPreviewUrl(FileUtility, file.Title, file.ID)); + } + catch (Exception) + { + //Don't catch anything here because of httpcontext + } + + return result; } } } \ No newline at end of file diff --git a/products/ASC.Files/Core/Model/FolderContentWrapper.cs b/products/ASC.Files/Core/Model/FolderContentWrapper.cs index 8ee26e9bb1..3b24b77f6b 100644 --- a/products/ASC.Files/Core/Model/FolderContentWrapper.cs +++ b/products/ASC.Files/Core/Model/FolderContentWrapper.cs @@ -32,6 +32,7 @@ using System.Text.Json.Serialization; using ASC.Common; using ASC.Files.Core; +using ASC.Files.Core.Security; using ASC.Web.Files.Services.WCFService; namespace ASC.Api.Documents @@ -104,20 +105,29 @@ namespace ASC.Api.Documents [Scope] public class FolderContentWrapperHelper - { + { + private FileSecurity FileSecurity { get; } + private IDaoFactory DaoFactory { get; } private FileWrapperHelper FileWrapperHelper { get; } private FolderWrapperHelper FolderWrapperHelper { get; } - public FolderContentWrapperHelper( + public FolderContentWrapperHelper( + FileSecurity fileSecurity, + IDaoFactory daoFactory, FileWrapperHelper fileWrapperHelper, FolderWrapperHelper folderWrapperHelper) - { + { + FileSecurity = fileSecurity; + DaoFactory = daoFactory; FileWrapperHelper = fileWrapperHelper; FolderWrapperHelper = folderWrapperHelper; } public FolderContentWrapper Get(DataWrapper folderItems, int startIndex) - { + { + var foldersIntWithRights = GetFoldersIntWithRights(); + var foldersStringWithRights = GetFoldersIntWithRights(); + var result = new FolderContentWrapper { Files = folderItems.Entries @@ -127,11 +137,11 @@ namespace ASC.Api.Documents FileEntryWrapper wrapper = null; if (r is File fol1) { - wrapper = FileWrapperHelper.Get(fol1); + wrapper = FileWrapperHelper.Get(fol1, foldersIntWithRights); } if (r is File fol2) { - wrapper = FileWrapperHelper.Get(fol2); + wrapper = FileWrapperHelper.Get(fol2, foldersStringWithRights); } return wrapper; @@ -145,11 +155,11 @@ namespace ASC.Api.Documents FileEntryWrapper wrapper = null; if (r is Folder fol1) { - wrapper = FolderWrapperHelper.Get(fol1); + wrapper = FolderWrapperHelper.Get(fol1, foldersIntWithRights); } if (r is Folder fol2) { - wrapper = FolderWrapperHelper.Get(fol2); + wrapper = FolderWrapperHelper.Get(fol2, foldersStringWithRights); } return wrapper; @@ -164,7 +174,15 @@ namespace ASC.Api.Documents result.Total = folderItems.Total; result.New = folderItems.New; - return result; + return result; + + + List, bool>> GetFoldersIntWithRights() + { + var folderDao = DaoFactory.GetFolderDao(); + var folders = folderDao.GetFolders(folderItems.Entries.OfType>().Select(r => r.FolderID).ToArray()); + return FileSecurity.CanRead(folders); + } } } diff --git a/products/ASC.Files/Core/Model/FolderWrapper.cs b/products/ASC.Files/Core/Model/FolderWrapper.cs index c0080d17a8..dadcfc6656 100644 --- a/products/ASC.Files/Core/Model/FolderWrapper.cs +++ b/products/ASC.Files/Core/Model/FolderWrapper.cs @@ -25,7 +25,9 @@ using System; - +using System.Collections.Generic; +using System.Linq; + using ASC.Api.Core; using ASC.Api.Utils; using ASC.Common; @@ -113,27 +115,49 @@ namespace ASC.Api.Documents GlobalFolderHelper = globalFolderHelper; } - public FolderWrapper Get(Folder folder) + public FolderWrapper Get(Folder folder, List, bool>> folders = null) { - var result = Get, T>(folder); - result.ParentId = folder.ParentFolderID; + var result = GetFolderWrapper(folder); + + result.ParentId = folder.FolderID; + if (folder.RootFolderType == FolderType.USER && !Equals(folder.RootFolderCreator, AuthContext.CurrentAccount.ID)) { result.RootFolderType = FolderType.SHARE; - var folderDao = DaoFactory.GetFolderDao(); - var parentFolder = folderDao.GetFolder(folder.ParentFolderID); - if (!FileSecurity.CanRead(parentFolder)) - result.ParentId = GlobalFolderHelper.GetFolderShare(); + var folderDao = DaoFactory.GetFolderDao(); + FileEntry parentFolder; + + if (folders != null) + { + var folderWithRight = folders.FirstOrDefault(f => f.Item1.ID.Equals(folder.FolderID)); + if (folderWithRight == null || !folderWithRight.Item2) + { + result.ParentId = GlobalFolderHelper.GetFolderShare(); + } + } + else + { + parentFolder = folderDao.GetFolder(folder.FolderID); + if (!FileSecurity.CanRead(parentFolder)) + { + result.ParentId = GlobalFolderHelper.GetFolderShare(); + } + } } + return result; + } + + private FolderWrapper GetFolderWrapper(Folder folder) + { + var result = Get, T>(folder); result.FilesCount = folder.TotalFiles; result.FoldersCount = folder.TotalSubFolders; result.IsShareable = folder.Shareable.NullIfDefault(); - result.New = folder.NewForMe; - - return result; + result.New = folder.NewForMe; + return result; } } } \ No newline at end of file diff --git a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs index d6eab1308a..de1b85bc6a 100644 --- a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs +++ b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs @@ -199,7 +199,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations { Error = FilesCommonResource.ErrorMassage_SecurityException_MoveFolder; } - else if (!Equals((folder.ParentFolderID ?? default).ToString(), toFolderId.ToString()) || _resolveType == FileConflictResolveType.Duplicate) + else if (!Equals((folder.FolderID ?? default).ToString(), toFolderId.ToString()) || _resolveType == FileConflictResolveType.Duplicate) { try { diff --git a/products/ASC.Files/Core/Utils/EntryManager.cs b/products/ASC.Files/Core/Utils/EntryManager.cs index 36730f658e..8c242b479b 100644 --- a/products/ASC.Files/Core/Utils/EntryManager.cs +++ b/products/ASC.Files/Core/Utils/EntryManager.cs @@ -697,7 +697,7 @@ namespace ASC.Web.Files.Utils //Fake folder. Don't send request to third party var folder = ServiceProvider.GetService>(); - folder.ParentFolderID = parentFolderId; + folder.FolderID = parentFolderId; folder.ID = providerInfo.RootFolderId; folder.CreateBy = providerInfo.Owner; diff --git a/products/ASC.Files/Core/Utils/FileMarker.cs b/products/ASC.Files/Core/Utils/FileMarker.cs index d2507c1d6b..807a8c27e6 100644 --- a/products/ASC.Files/Core/Utils/FileMarker.cs +++ b/products/ASC.Files/Core/Utils/FileMarker.cs @@ -569,7 +569,7 @@ namespace ASC.Web.Files.Utils var parentId = entry.FileEntryType == FileEntryType.File ? ((File)entry).FolderID - : ((Folder)entry).ParentFolderID; + : ((Folder)entry).FolderID; var parentEntry = entryTags.Keys.FirstOrDefault(entryCountTag => Equals(entryCountTag.ID, parentId)); if (parentEntry != null) diff --git a/products/ASC.Files/Core/Utils/FileUploader.cs b/products/ASC.Files/Core/Utils/FileUploader.cs index d17df5883a..908cc13760 100644 --- a/products/ASC.Files/Core/Utils/FileUploader.cs +++ b/products/ASC.Files/Core/Utils/FileUploader.cs @@ -213,7 +213,7 @@ namespace ASC.Web.Files.Utils { var newFolder = ServiceProvider.GetService>(); newFolder.Title = subFolderTitle; - newFolder.ParentFolderID = folderId; + newFolder.FolderID = folderId; folderId = folderDao.SaveFolder(newFolder); diff --git a/products/ASC.Files/Server/Controllers/FilesController.cs b/products/ASC.Files/Server/Controllers/FilesController.cs index 9aea079d8e..631a2f9113 100644 --- a/products/ASC.Files/Server/Controllers/FilesController.cs +++ b/products/ASC.Files/Server/Controllers/FilesController.cs @@ -1799,7 +1799,7 @@ namespace ASC.Api.Documents public IEnumerable> GetCommonThirdPartyFolders() { var parent = FileStorageServiceInt.GetFolder(GlobalFolderHelper.FolderCommon); - return EntryManager.GetThirpartyFolders(parent).Select(FolderWrapperHelper.Get).ToList(); + return EntryManager.GetThirpartyFolders(parent).Select(r => FolderWrapperHelper.Get(r)).ToList(); } /// diff --git a/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs b/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs index 7bd47e0a7e..77f254a722 100644 --- a/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs +++ b/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs @@ -489,13 +489,13 @@ namespace ASC.Files.Helpers public IEnumerable> GetFileVersionInfo(T fileId) { var files = FileStorageService.GetFileHistory(fileId); - return files.Select(FileWrapperHelper.Get); + return files.Select(r=> FileWrapperHelper.Get(r)); } public IEnumerable> ChangeHistory(T fileId, int version, bool continueVersion) { var history = FileStorageService.CompleteVersion(fileId, version, continueVersion).Value; - return history.Select(FileWrapperHelper.Get); + return history.Select(r=> FileWrapperHelper.Get(r)); } public FileWrapper LockFile(T fileId, bool lockFile) diff --git a/products/ASC.Files/Service/Core/FoldersModule.cs b/products/ASC.Files/Service/Core/FoldersModule.cs index 3247b1b5cf..5a9612990a 100644 --- a/products/ASC.Files/Service/Core/FoldersModule.cs +++ b/products/ASC.Files/Service/Core/FoldersModule.cs @@ -87,10 +87,10 @@ namespace ASC.Files.Service.Core .Where(f => f.Item1.RootFolderType != FolderType.TRASH && f.Item1.RootFolderType != FolderType.BUNCH) .ToList(); - var parentFolderIDs = folders.Select(r => r.Item1.ParentFolderID).ToArray(); + var parentFolderIDs = folders.Select(r => r.Item1.FolderID).ToArray(); var parentFolders = FolderDao.GetFolders(parentFolderIDs, checkShare: false); - return folders.Select(f => new Tuple(ToFeed(f, parentFolders.FirstOrDefault(r => r.ID.Equals(f.Item1.ParentFolderID))), f)); + return folders.Select(f => new Tuple(ToFeed(f, parentFolders.FirstOrDefault(r => r.ID.Equals(f.Item1.FolderID))), f)); } private Feed.Aggregator.Feed ToFeed((Folder, SmallShareRecord) tuple, Folder rootFolder) @@ -109,12 +109,12 @@ namespace ASC.Files.Service.Core Module = Name, Title = folder.Title, ExtraLocation = rootFolder.FolderType == FolderType.DEFAULT ? rootFolder.Title : string.Empty, - ExtraLocationUrl = rootFolder.FolderType == FolderType.DEFAULT ? FilesLinkUtility.GetFileRedirectPreviewUrl(folder.ParentFolderID, false) : string.Empty, + ExtraLocationUrl = rootFolder.FolderType == FolderType.DEFAULT ? FilesLinkUtility.GetFileRedirectPreviewUrl(folder.FolderID, false) : string.Empty, Keywords = string.Format("{0}", folder.Title), HasPreview = false, CanComment = false, Target = shareRecord.ShareTo, - GroupId = GetGroupId(sharedFolderItem, shareRecord.ShareBy, folder.ParentFolderID.ToString()) + GroupId = GetGroupId(sharedFolderItem, shareRecord.ShareBy, folder.FolderID.ToString()) }; return feed; @@ -129,12 +129,12 @@ namespace ASC.Files.Service.Core Module = Name, Title = folder.Title, ExtraLocation = rootFolder.FolderType == FolderType.DEFAULT ? rootFolder.Title : string.Empty, - ExtraLocationUrl = rootFolder.FolderType == FolderType.DEFAULT ? FilesLinkUtility.GetFileRedirectPreviewUrl(folder.ParentFolderID, false) : string.Empty, + ExtraLocationUrl = rootFolder.FolderType == FolderType.DEFAULT ? FilesLinkUtility.GetFileRedirectPreviewUrl(folder.FolderID, false) : string.Empty, Keywords = string.Format("{0}", folder.Title), HasPreview = false, CanComment = false, Target = null, - GroupId = GetGroupId(folderItem, folder.CreateBy, folder.ParentFolderID.ToString()) + GroupId = GetGroupId(folderItem, folder.CreateBy, folder.FolderID.ToString()) }; } } From 6f76404eaa44668267b6dc2a0bbec612c8dd51cc Mon Sep 17 00:00:00 2001 From: pavelbannov Date: Mon, 30 Nov 2020 23:02:10 +0300 Subject: [PATCH 2/5] Files: optimization --- .../Core/Core/Dao/Interfaces/IFileDao.cs | 6 ++--- .../Core/Core/Dao/Interfaces/IFolderDao.cs | 2 +- .../Core/Core/Dao/TeamlabDao/FileDao.cs | 14 +++++----- .../Core/Core/Dao/TeamlabDao/FolderDao.cs | 4 +-- .../ASC.Files/Core/Core/FileStorageService.cs | 26 +++++++++---------- .../Core/Core/Security/FileSecurity.cs | 12 ++++----- .../Core/Core/Thirdparty/Box/BoxFileDao.cs | 8 +++--- .../Core/Core/Thirdparty/Box/BoxFolderDao.cs | 2 +- .../Core/Thirdparty/Dropbox/DropboxFileDao.cs | 8 +++--- .../Thirdparty/Dropbox/DropboxFolderDao.cs | 2 +- .../GoogleDrive/GoogleDriveFileDao.cs | 8 +++--- .../GoogleDrive/GoogleDriveFolderDao.cs | 2 +- .../Core/Thirdparty/IThirdPartyProviderDao.cs | 2 +- .../Thirdparty/OneDrive/OneDriveFileDao.cs | 8 +++--- .../Thirdparty/OneDrive/OneDriveFolderDao.cs | 2 +- .../Thirdparty/ProviderDao/ProviderFileDao.cs | 6 ++--- .../ProviderDao/ProviderFolderDao.cs | 4 +-- .../SharePoint/SharePointFileDao.cs | 6 ++--- .../SharePoint/SharePointFolderDao.cs | 2 +- .../Thirdparty/Sharpbox/SharpBoxFileDao.cs | 6 ++--- .../Thirdparty/Sharpbox/SharpBoxFolderDao.cs | 2 +- .../Core/Model/FileOperationWraper.cs | 4 +-- .../Core/Model/FolderContentWrapper.cs | 2 +- .../FileOperations/FileDownloadOperation.cs | 4 +-- .../FileOperations/FileMarkAsReadOperation.cs | 4 +-- products/ASC.Files/Core/Utils/EntryManager.cs | 4 +-- .../ASC.Files/Service/Core/FilesModule.cs | 2 +- .../ASC.Files/Service/Core/FoldersModule.cs | 2 +- 28 files changed, 77 insertions(+), 77 deletions(-) diff --git a/products/ASC.Files/Core/Core/Dao/Interfaces/IFileDao.cs b/products/ASC.Files/Core/Core/Dao/Interfaces/IFileDao.cs index 4052d296b9..c3b96a717b 100644 --- a/products/ASC.Files/Core/Core/Dao/Interfaces/IFileDao.cs +++ b/products/ASC.Files/Core/Core/Dao/Interfaces/IFileDao.cs @@ -87,7 +87,7 @@ namespace ASC.Files.Core /// /// id file /// - List> GetFiles(T[] fileIds); + List> GetFiles(IEnumerable fileIds); /// /// Gets the file (s) by ID (s) for share @@ -99,7 +99,7 @@ namespace ASC.Files.Core /// /// /// - List> GetFilesFiltered(T[] fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent); + List> GetFilesFiltered(IEnumerable fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent); /// /// @@ -280,7 +280,7 @@ namespace ASC.Files.Core /// /// /// - List> GetFiles(T[] parentIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent); + List> GetFiles(IEnumerable parentIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent); /// /// Search the list of files containing text diff --git a/products/ASC.Files/Core/Core/Dao/Interfaces/IFolderDao.cs b/products/ASC.Files/Core/Core/Dao/Interfaces/IFolderDao.cs index d8c43b74ce..d1667d8ff4 100644 --- a/products/ASC.Files/Core/Core/Dao/Interfaces/IFolderDao.cs +++ b/products/ASC.Files/Core/Core/Dao/Interfaces/IFolderDao.cs @@ -95,7 +95,7 @@ namespace ASC.Files.Core /// /// /// - List> GetFolders(T[] folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true); + List> GetFolders(IEnumerable folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true); /// /// Get folder, contains folder with id diff --git a/products/ASC.Files/Core/Core/Dao/TeamlabDao/FileDao.cs b/products/ASC.Files/Core/Core/Dao/TeamlabDao/FileDao.cs index 2e8b3e4990..070d0adf67 100644 --- a/products/ASC.Files/Core/Core/Dao/TeamlabDao/FileDao.cs +++ b/products/ASC.Files/Core/Core/Dao/TeamlabDao/FileDao.cs @@ -170,9 +170,9 @@ namespace ASC.Files.Core.Data return FromQueryWithShared(query).Select(ToFile).ToList(); } - public List> GetFiles(int[] fileIds) + public List> GetFiles(IEnumerable fileIds) { - if (fileIds == null || fileIds.Length == 0) return new List>(); + if (fileIds == null || !fileIds.Any()) return new List>(); var query = GetFileQuery(r => fileIds.Any(a => a == r.Id) && r.CurrentVersion) .AsNoTracking(); @@ -180,9 +180,9 @@ namespace ASC.Files.Core.Data return FromQueryWithShared(query).Select(ToFile).ToList(); } - public List> GetFilesFiltered(int[] fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent) + public List> GetFilesFiltered(IEnumerable fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent) { - if (fileIds == null || fileIds.Length == 0 || filterType == FilterType.FoldersOnly) return new List>(); + if (fileIds == null || !fileIds.Any() || filterType == FilterType.FoldersOnly) return new List>(); var query = GetFileQuery(r => fileIds.Any(a => a == r.Id) && r.CurrentVersion).AsNoTracking(); @@ -190,7 +190,7 @@ namespace ASC.Files.Core.Data { var func = GetFuncForSearch(null, null, filterType, subjectGroup, subjectID, searchText, searchInContent, false); - if (FactoryIndexer.TrySelectIds(s => func(s).In(r => r.Id, fileIds), out var searchIds)) + if (FactoryIndexer.TrySelectIds(s => func(s).In(r => r.Id, fileIds.ToArray()), out var searchIds)) { query = query.Where(r => searchIds.Any(b => b == r.Id)); } @@ -1037,9 +1037,9 @@ namespace ASC.Files.Core.Data FilesDbContext.SaveChanges(); } - public List> GetFiles(int[] parentIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent) + public List> GetFiles(IEnumerable parentIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent) { - if (parentIds == null || parentIds.Length == 0 || filterType == FilterType.FoldersOnly) return new List>(); + if (parentIds == null || !parentIds.Any() || filterType == FilterType.FoldersOnly) return new List>(); var q = GetFileQuery(r => r.CurrentVersion) .AsNoTracking() diff --git a/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs b/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs index 6073c3efa3..843e3ca098 100644 --- a/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs +++ b/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs @@ -219,7 +219,7 @@ namespace ASC.Files.Core.Data return FromQueryWithShared(q).Select(ToFolder).ToList(); } - public List> GetFolders(int[] folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true) + public List> GetFolders(IEnumerable folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true) { if (filterType == FilterType.FilesOnly || filterType == FilterType.ByExtension || filterType == FilterType.DocumentsOnly || filterType == FilterType.ImagesOnly @@ -243,7 +243,7 @@ namespace ASC.Files.Core.Data if (FactoryIndexer.TrySelectIds(s => searchSubfolders ? s.MatchAll(searchText) - : s.MatchAll(searchText).In(r => r.Id, folderIds), + : s.MatchAll(searchText).In(r => r.Id, folderIds.ToArray()), out var searchIds)) { q = q.Where(r => searchIds.Any(a => a == r.Id)); diff --git a/products/ASC.Files/Core/Core/FileStorageService.cs b/products/ASC.Files/Core/Core/FileStorageService.cs index 53857be65b..a07326094d 100644 --- a/products/ASC.Files/Core/Core/FileStorageService.cs +++ b/products/ASC.Files/Core/Core/FileStorageService.cs @@ -348,11 +348,11 @@ namespace ASC.Web.Files.Services.WCFService var folderDao = DaoFactory.GetFolderDao(); var fileDao = DaoFactory.GetFileDao(); - var folders = folderDao.GetFolders(foldersId.ToArray()); + var folders = folderDao.GetFolders(foldersId); folders = FileSecurity.FilterRead(folders).ToList(); entries = entries.Concat(folders); - var files = fileDao.GetFiles(filesId.ToArray()); + var files = fileDao.GetFiles(filesId); files = FileSecurity.FilterRead(files).ToList(); entries = entries.Concat(files); @@ -676,7 +676,7 @@ namespace ASC.Web.Files.Services.WCFService var result = new ItemDictionary(); var fileDao = GetFileDao(); - var ids = filesId.Where(FileTracker.IsEditing).Select(id => id).ToArray(); + var ids = filesId.Where(FileTracker.IsEditing).Select(id => id).ToList(); foreach (var file in fileDao.GetFiles(ids)) { @@ -1394,7 +1394,7 @@ namespace ASC.Web.Files.Services.WCFService } } - var folders = folderDao.GetFolders(foldersId.ToArray()); + var folders = folderDao.GetFolders(foldersId); var foldersProject = folders.Where(folder => folder.FolderType == FolderType.BUNCH).ToList(); if (foldersProject.Any()) { @@ -1608,7 +1608,7 @@ namespace ASC.Web.Files.Services.WCFService rootFoldersId.Add(folderIdFromMy); } - var rootFolders = folderDao.GetFolders(rootFoldersId.ToArray()); + var rootFolders = folderDao.GetFolders(rootFoldersId); foreach (var rootFolder in rootFolders) { FileMarker.RemoveMarkAsNew(rootFolder, userId); @@ -1646,11 +1646,11 @@ namespace ASC.Web.Files.Services.WCFService var folderDao = GetFolderDao(); var entries = Enumerable.Empty>(); - var files = fileDao.GetFiles(filesId.ToArray()); + var files = fileDao.GetFiles(filesId); files = FileSecurity.FilterRead(files).ToList(); entries = entries.Concat(files); - var folders = folderDao.GetFolders(foldersId.ToArray()); + var folders = folderDao.GetFolders(foldersId); folders = FileSecurity.FilterRead(folders).ToList(); entries = entries.Concat(folders); @@ -1668,11 +1668,11 @@ namespace ASC.Web.Files.Services.WCFService var folderDao = GetFolderDao(); var entries = Enumerable.Empty>(); - var files = fileDao.GetFiles(filesId.ToArray()); + var files = fileDao.GetFiles(filesId); files = FileSecurity.FilterRead(files).ToList(); entries = entries.Concat(files); - var folders = folderDao.GetFolders(foldersId.ToArray()); + var folders = folderDao.GetFolders(foldersId); folders = FileSecurity.FilterRead(folders).ToList(); entries = entries.Concat(folders); @@ -1693,7 +1693,7 @@ namespace ASC.Web.Files.Services.WCFService var tagDao = GetTagDao(); var fileDao = GetFileDao(); - var files = fileDao.GetFiles(filesId.ToArray()); + var files = fileDao.GetFiles(filesId); files = FileSecurity.FilterRead(files) .Where(file => FileUtility.ExtsWebTemplate.Contains(FileUtility.GetFileExtension(file.Title), StringComparer.CurrentCultureIgnoreCase)) @@ -1710,7 +1710,7 @@ namespace ASC.Web.Files.Services.WCFService { var tagDao = GetTagDao(); var fileDao = GetFileDao(); - var files = fileDao.GetFiles(filesId.ToArray()); + var files = fileDao.GetFiles(filesId); files = FileSecurity.FilterRead(files).ToList(); @@ -2037,7 +2037,7 @@ namespace ASC.Web.Files.Services.WCFService var entries = new List>(); var folderDao = GetFolderDao(); - var folders = folderDao.GetFolders(foldersId.ToArray()); + var folders = folderDao.GetFolders(foldersId); foreach (var folder in folders) { @@ -2062,7 +2062,7 @@ namespace ASC.Web.Files.Services.WCFService } var fileDao = GetFileDao(); - var files = fileDao.GetFiles(filesId.ToArray()); + var files = fileDao.GetFiles(filesId); foreach (var file in files) { diff --git a/products/ASC.Files/Core/Core/Security/FileSecurity.cs b/products/ASC.Files/Core/Core/Security/FileSecurity.cs index 943bba80b4..b699f28a05 100644 --- a/products/ASC.Files/Core/Core/Security/FileSecurity.cs +++ b/products/ASC.Files/Core/Core/Security/FileSecurity.cs @@ -579,8 +579,8 @@ namespace ASC.Files.Core.Security var folderDao = daoFactory.GetFolderDao(); var filteredEntries = entries.Where(filter).ToList(); var roots = filteredEntries - .Select(r => r.RootFolderId) - .ToArray(); + .Select(r => r.RootFolderId) + .ToList(); var rootsFolders = folderDao.GetFolders(roots); var bunches = folderDao.GetBunchObjectIDs(rootsFolders.Select(r => r.ID).ToList()); @@ -761,7 +761,7 @@ namespace ASC.Files.Core.Security if (filterType == FilterType.None || filterType == FilterType.FoldersOnly) { - var folders = folderDao.GetFolders(folderIds.Keys.ToArray(), filterType, subjectGroup, subjectID, searchText, withSubfolders, false); + var folders = folderDao.GetFolders(folderIds.Keys, filterType, subjectGroup, subjectID, searchText, withSubfolders, false); if (withSubfolders) { @@ -781,7 +781,7 @@ namespace ASC.Files.Core.Security if (filterType != FilterType.FoldersOnly && withSubfolders) { - var filesInSharedFolders = fileDao.GetFiles(folderIds.Keys.ToArray(), filterType, subjectGroup, subjectID, searchText, searchInContent); + var filesInSharedFolders = fileDao.GetFiles(folderIds.Keys, filterType, subjectGroup, subjectID, searchText, searchInContent); filesInSharedFolders = FilterRead(filesInSharedFolders).ToList(); entries.AddRange(filesInSharedFolders); entries = entries.Distinct().ToList(); @@ -880,7 +880,7 @@ namespace ASC.Files.Core.Security if (filterType == FilterType.None || filterType == FilterType.FoldersOnly) { - var folders = folderDao.GetFolders(folderIds.Keys.ToArray(), filterType, subjectGroup, subjectID, searchText, withSubfolders, false); + var folders = folderDao.GetFolders(folderIds.Keys, filterType, subjectGroup, subjectID, searchText, withSubfolders, false); if (withSubfolders) { @@ -900,7 +900,7 @@ namespace ASC.Files.Core.Security if (filterType != FilterType.FoldersOnly && withSubfolders) { - var filesInSharedFolders = fileDao.GetFiles(folderIds.Keys.ToArray(), filterType, subjectGroup, subjectID, searchText, searchInContent); + var filesInSharedFolders = fileDao.GetFiles(folderIds.Keys, filterType, subjectGroup, subjectID, searchText, searchInContent); filesInSharedFolders = FilterRead(filesInSharedFolders).ToList(); entries.AddRange(filesInSharedFolders); entries = entries.Distinct().ToList(); diff --git a/products/ASC.Files/Core/Core/Thirdparty/Box/BoxFileDao.cs b/products/ASC.Files/Core/Core/Thirdparty/Box/BoxFileDao.cs index 34ec441a58..8e468b1a73 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/Box/BoxFileDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/Box/BoxFileDao.cs @@ -108,15 +108,15 @@ namespace ASC.Files.Thirdparty.Box return new List> { GetFile(fileId) }; } - public List> GetFiles(string[] fileIds) + public List> GetFiles(IEnumerable fileIds) { - if (fileIds == null || fileIds.Length == 0) return new List>(); + if (fileIds == null || !fileIds.Any()) return new List>(); return fileIds.Select(GetBoxFile).Select(ToFile).ToList(); } - public List> GetFilesFiltered(string[] fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent) + public List> GetFilesFiltered(IEnumerable fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent) { - if (fileIds == null || fileIds.Length == 0 || filterType == FilterType.FoldersOnly) return new List>(); + if (fileIds == null || !fileIds.Any() || filterType == FilterType.FoldersOnly) return new List>(); var files = GetFiles(fileIds).AsEnumerable(); diff --git a/products/ASC.Files/Core/Core/Thirdparty/Box/BoxFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/Box/BoxFolderDao.cs index d62651270b..4eeee4a482 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/Box/BoxFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/Box/BoxFolderDao.cs @@ -130,7 +130,7 @@ namespace ASC.Files.Thirdparty.Box return folders.ToList(); } - public List> GetFolders(string[] folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true) + public List> GetFolders(IEnumerable folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true) { if (filterType == FilterType.FilesOnly || filterType == FilterType.ByExtension || filterType == FilterType.DocumentsOnly || filterType == FilterType.ImagesOnly diff --git a/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxFileDao.cs b/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxFileDao.cs index 250564b8e7..f5c73c7dd5 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxFileDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxFileDao.cs @@ -112,15 +112,15 @@ namespace ASC.Files.Thirdparty.Dropbox return new List> { GetFile(fileId) }; } - public List> GetFiles(string[] fileIds) + public List> GetFiles(IEnumerable fileIds) { - if (fileIds == null || fileIds.Length == 0) return new List>(); + if (fileIds == null || !fileIds.Any()) return new List>(); return fileIds.Select(GetDropboxFile).Select(ToFile).ToList(); } - public List> GetFilesFiltered(string[] fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent) + public List> GetFilesFiltered(IEnumerable fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent) { - if (fileIds == null || fileIds.Length == 0 || filterType == FilterType.FoldersOnly) return new List>(); + if (fileIds == null || !fileIds.Any() || filterType == FilterType.FoldersOnly) return new List>(); var files = GetFiles(fileIds).AsEnumerable(); diff --git a/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxFolderDao.cs index a857d46032..b8bcf37dc8 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxFolderDao.cs @@ -131,7 +131,7 @@ namespace ASC.Files.Thirdparty.Dropbox return folders.ToList(); } - public List> GetFolders(string[] folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true) + public List> GetFolders(IEnumerable folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true) { if (filterType == FilterType.FilesOnly || filterType == FilterType.ByExtension || filterType == FilterType.DocumentsOnly || filterType == FilterType.ImagesOnly diff --git a/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveFileDao.cs b/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveFileDao.cs index 9782518499..628c0481ad 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveFileDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveFileDao.cs @@ -109,15 +109,15 @@ namespace ASC.Files.Thirdparty.GoogleDrive return new List> { GetFile(fileId) }; } - public List> GetFiles(string[] fileIds) + public List> GetFiles(IEnumerable fileIds) { - if (fileIds == null || fileIds.Length == 0) return new List>(); + if (fileIds == null || !fileIds.Any()) return new List>(); return fileIds.Select(GetDriveEntry).Select(ToFile).ToList(); } - public List> GetFilesFiltered(string[] fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent) + public List> GetFilesFiltered(IEnumerable fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent) { - if (fileIds == null || fileIds.Length == 0 || filterType == FilterType.FoldersOnly) return new List>(); + if (fileIds == null || !fileIds.Any() || filterType == FilterType.FoldersOnly) return new List>(); var files = GetFiles(fileIds).AsEnumerable(); diff --git a/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveFolderDao.cs index a0ecd5341d..df8851d529 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveFolderDao.cs @@ -127,7 +127,7 @@ namespace ASC.Files.Thirdparty.GoogleDrive return folders.ToList(); } - public List> GetFolders(string[] folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true) + public List> GetFolders(IEnumerable folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true) { if (filterType == FilterType.FilesOnly || filterType == FilterType.ByExtension || filterType == FilterType.DocumentsOnly || filterType == FilterType.ImagesOnly diff --git a/products/ASC.Files/Core/Core/Thirdparty/IThirdPartyProviderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/IThirdPartyProviderDao.cs index 886a82f89f..040fd81db2 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/IThirdPartyProviderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/IThirdPartyProviderDao.cs @@ -34,7 +34,7 @@ namespace ASC.Files.Thirdparty { } - public List> GetFiles(string[] parentIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent) + public List> GetFiles(IEnumerable parentIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent) { return new List>(); } diff --git a/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveFileDao.cs b/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveFileDao.cs index cf7516ce4f..b7c979928c 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveFileDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveFileDao.cs @@ -108,15 +108,15 @@ namespace ASC.Files.Thirdparty.OneDrive return new List> { GetFile(fileId) }; } - public List> GetFiles(string[] fileIds) + public List> GetFiles(IEnumerable fileIds) { - if (fileIds == null || fileIds.Length == 0) return new List>(); + if (fileIds == null || !fileIds.Any()) return new List>(); return fileIds.Select(GetOneDriveItem).Select(ToFile).ToList(); } - public List> GetFilesFiltered(string[] fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent) + public List> GetFilesFiltered(IEnumerable fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent) { - if (fileIds == null || fileIds.Length == 0 || filterType == FilterType.FoldersOnly) return new List>(); + if (fileIds == null || !fileIds.Any() || filterType == FilterType.FoldersOnly) return new List>(); var files = GetFiles(fileIds).AsEnumerable(); diff --git a/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveFolderDao.cs index f1889c6940..70f2edc664 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveFolderDao.cs @@ -127,7 +127,7 @@ namespace ASC.Files.Thirdparty.OneDrive return folders.ToList(); } - public List> GetFolders(string[] folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true) + public List> GetFolders(IEnumerable folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true) { if (filterType == FilterType.FilesOnly || filterType == FilterType.ByExtension || filterType == FilterType.DocumentsOnly || filterType == FilterType.ImagesOnly diff --git a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFileDao.cs b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFileDao.cs index 61db2a9c23..1ea22e35a1 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFileDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFileDao.cs @@ -124,7 +124,7 @@ namespace ASC.Files.Thirdparty.ProviderDao return fileDao.GetFileHistory(selector.ConvertId(fileId)); } - public List> GetFiles(string[] fileIds) + public List> GetFiles(IEnumerable fileIds) { var result = Enumerable.Empty>(); @@ -139,7 +139,7 @@ namespace ASC.Files.Thirdparty.ProviderDao .SelectMany(matchedId => { var fileDao = selectorLocal.GetFileDao(matchedId.FirstOrDefault()); - return fileDao.GetFiles(matchedId.Select(selectorLocal.ConvertId).ToArray()); + return fileDao.GetFiles(matchedId.Select(selectorLocal.ConvertId).ToList()); } ) .Where(r => r != null)); @@ -148,7 +148,7 @@ namespace ASC.Files.Thirdparty.ProviderDao return result.ToList(); } - public List> GetFilesFiltered(string[] fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent) + public List> GetFilesFiltered(IEnumerable fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent) { var result = Enumerable.Empty>(); diff --git a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFolderDao.cs index 5e62b58943..0e6a04e9da 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFolderDao.cs @@ -110,7 +110,7 @@ namespace ASC.Files.Thirdparty.ProviderDao return result; } - public List> GetFolders(string[] folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true) + public List> GetFolders(IEnumerable folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true) { var result = Enumerable.Empty>(); @@ -126,7 +126,7 @@ namespace ASC.Files.Thirdparty.ProviderDao { var folderDao = selectorLocal.GetFolderDao(matchedId.FirstOrDefault()); return folderDao -.GetFolders(matchedId.Select(selectorLocal.ConvertId).ToArray(), +.GetFolders(matchedId.Select(selectorLocal.ConvertId).ToList(), filterType, subjectGroup, subjectID, searchText, searchSubfolders, checkShare); }) .Where(r => r != null)); diff --git a/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointFileDao.cs b/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointFileDao.cs index ec5b2dd408..f187e5aff5 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointFileDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointFileDao.cs @@ -101,14 +101,14 @@ namespace ASC.Files.Thirdparty.SharePoint return new List> { GetFile(fileId) }; } - public List> GetFiles(string[] fileIds) + public List> GetFiles(IEnumerable fileIds) { return fileIds.Select(fileId => ProviderInfo.ToFile(ProviderInfo.GetFileById(fileId))).ToList(); } - public List> GetFilesFiltered(string[] fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent) + public List> GetFilesFiltered(IEnumerable fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent) { - if (fileIds == null || fileIds.Length == 0 || filterType == FilterType.FoldersOnly) return new List>(); + if (fileIds == null || !fileIds.Any() || filterType == FilterType.FoldersOnly) return new List>(); var files = GetFiles(fileIds).AsEnumerable(); diff --git a/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointFolderDao.cs index 353bf9c2a3..92478932a8 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointFolderDao.cs @@ -135,7 +135,7 @@ namespace ASC.Files.Thirdparty.SharePoint return folders.ToList(); } - public List> GetFolders(string[] folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true) + public List> GetFolders(IEnumerable folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true) { if (filterType == FilterType.FilesOnly || filterType == FilterType.ByExtension || filterType == FilterType.DocumentsOnly || filterType == FilterType.ImagesOnly diff --git a/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxFileDao.cs b/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxFileDao.cs index 4b0f303cbd..5e909e6546 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxFileDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxFileDao.cs @@ -106,14 +106,14 @@ namespace ASC.Files.Thirdparty.Sharpbox return new List> { GetFile(fileId) }; } - public List> GetFiles(string[] fileIds) + public List> GetFiles(IEnumerable fileIds) { return fileIds.Select(fileId => ToFile(GetFileById(fileId))).ToList(); } - public List> GetFilesFiltered(string[] fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent) + public List> GetFilesFiltered(IEnumerable fileIds, FilterType filterType, bool subjectGroup, Guid subjectID, string searchText, bool searchInContent) { - if (fileIds == null || fileIds.Length == 0 || filterType == FilterType.FoldersOnly) return new List>(); + if (fileIds == null || !fileIds.Any() || filterType == FilterType.FoldersOnly) return new List>(); var files = GetFiles(fileIds).AsEnumerable(); diff --git a/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxFolderDao.cs index b7bc204679..af51227f02 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxFolderDao.cs @@ -138,7 +138,7 @@ namespace ASC.Files.Thirdparty.Sharpbox return folders.ToList(); } - public List> GetFolders(string[] folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true) + public List> GetFolders(IEnumerable folderIds, FilterType filterType = FilterType.None, bool subjectGroup = false, Guid? subjectID = null, string searchText = "", bool searchSubfolders = false, bool checkShare = true) { if (filterType == FilterType.FilesOnly || filterType == FilterType.ByExtension || filterType == FilterType.DocumentsOnly || filterType == FilterType.ImagesOnly diff --git a/products/ASC.Files/Core/Model/FileOperationWraper.cs b/products/ASC.Files/Core/Model/FileOperationWraper.cs index 5114be0ff9..f13ce15421 100644 --- a/products/ASC.Files/Core/Model/FileOperationWraper.cs +++ b/products/ASC.Files/Core/Model/FileOperationWraper.cs @@ -198,7 +198,7 @@ namespace ASC.Api.Documents IEnumerable GetFolders(IEnumerable folders) { var folderDao = DaoFactory.GetFolderDao(); - return folderDao.GetFolders(folders.ToArray()) + return folderDao.GetFolders(folders) .Select(r => FolderWrapperHelper.Get(r)) .Cast(); } @@ -206,7 +206,7 @@ namespace ASC.Api.Documents IEnumerable GetFiles(IEnumerable files) { var fileDao = DaoFactory.GetFileDao(); - return fileDao.GetFiles(files.ToArray()) + return fileDao.GetFiles(files) .Select(r => FilesWrapperHelper.Get(r)) .Cast(); } diff --git a/products/ASC.Files/Core/Model/FolderContentWrapper.cs b/products/ASC.Files/Core/Model/FolderContentWrapper.cs index 3b24b77f6b..b790a2d145 100644 --- a/products/ASC.Files/Core/Model/FolderContentWrapper.cs +++ b/products/ASC.Files/Core/Model/FolderContentWrapper.cs @@ -180,7 +180,7 @@ namespace ASC.Api.Documents List, bool>> GetFoldersIntWithRights() { var folderDao = DaoFactory.GetFolderDao(); - var folders = folderDao.GetFolders(folderItems.Entries.OfType>().Select(r => r.FolderID).ToArray()); + var folders = folderDao.GetFolders(folderItems.Entries.OfType>().Select(r => r.FolderID).ToList()); return FileSecurity.CanRead(folders); } } diff --git a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDownloadOperation.cs b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDownloadOperation.cs index d528a5194c..6ad2338414 100644 --- a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDownloadOperation.cs +++ b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDownloadOperation.cs @@ -181,13 +181,13 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations var entriesPathId = new ItemNameValueCollection(); if (0 < Files.Count) { - var files = FileDao.GetFiles(Files.ToArray()); + var files = FileDao.GetFiles(Files); files = FilesSecurity.FilterRead(files).ToList(); files.ForEach(file => entriesPathId.Add(ExecPathFromFile(scope, file, string.Empty))); } if (0 < Folders.Count) { - FilesSecurity.FilterRead(FolderDao.GetFolders(Files.ToArray())).ToList().Cast>().ToList() + FilesSecurity.FilterRead(FolderDao.GetFolders(Files)).Cast>().ToList() .ForEach(folder => fileMarker.RemoveMarkAsNew(folder)); var filesInFolder = GetFilesInFolders(scope, Folders, string.Empty); diff --git a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMarkAsReadOperation.cs b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMarkAsReadOperation.cs index fba88aa0a3..6b79d3bbc0 100644 --- a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMarkAsReadOperation.cs +++ b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMarkAsReadOperation.cs @@ -92,11 +92,11 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations var entries = new List>(); if (Folders.Any()) { - entries.AddRange(FolderDao.GetFolders(Folders.ToArray())); + entries.AddRange(FolderDao.GetFolders(Folders)); } if (Files.Any()) { - entries.AddRange(FileDao.GetFiles(Files.ToArray())); + entries.AddRange(FileDao.GetFiles(Files)); } entries.ForEach(x => { diff --git a/products/ASC.Files/Core/Utils/EntryManager.cs b/products/ASC.Files/Core/Utils/EntryManager.cs index 8c242b479b..ad437b759f 100644 --- a/products/ASC.Files/Core/Utils/EntryManager.cs +++ b/products/ASC.Files/Core/Utils/EntryManager.cs @@ -340,7 +340,7 @@ namespace ASC.Web.Files.Utils folders.RemoveAll(folder => rootKeys.Contains(folder.ID)); - var projectFolders = DaoFactory.GetFolderDao().GetFolders(projectFolderIds.ToArray(), filter, subjectGroup, subjectId, null, false, false); + var projectFolders = DaoFactory.GetFolderDao().GetFolders(projectFolderIds.ToList(), filter, subjectGroup, subjectId, null, false, false); folders.AddRange(projectFolders); } @@ -554,7 +554,7 @@ namespace ASC.Web.Files.Utils if (filter == FilterType.None || filter == FilterType.FoldersOnly) { - var folderIds = tags.Where(tag => tag.EntryType == FileEntryType.Folder).Select(tag => (T)Convert.ChangeType(tag.EntryId, typeof(T))).ToArray(); + var folderIds = tags.Where(tag => tag.EntryType == FileEntryType.Folder).Select(tag => (T)Convert.ChangeType(tag.EntryId, typeof(T))).ToList(); folders = folderDao.GetFolders(folderIds, filter, subjectGroup, subjectId, searchText, false, false); folders = folders.Where(folder => folder.RootFolderType != FolderType.TRASH).ToList(); diff --git a/products/ASC.Files/Service/Core/FilesModule.cs b/products/ASC.Files/Service/Core/FilesModule.cs index da1a1918d4..f3bd00f7dc 100644 --- a/products/ASC.Files/Service/Core/FilesModule.cs +++ b/products/ASC.Files/Service/Core/FilesModule.cs @@ -118,7 +118,7 @@ namespace ASC.Files.Service.Core .Where(f => f.Item1.RootFolderType != FolderType.TRASH && f.Item1.RootFolderType != FolderType.BUNCH) .ToList(); - var folderIDs = files.Select(r => r.Item1.FolderID).ToArray(); + var folderIDs = files.Select(r => r.Item1.FolderID).ToList(); var folders = FolderDao.GetFolders(folderIDs, checkShare: false); return files.Select(f => new Tuple(ToFeed(f, folders.FirstOrDefault(r => r.ID.Equals(f.Item1.FolderID))), f)); diff --git a/products/ASC.Files/Service/Core/FoldersModule.cs b/products/ASC.Files/Service/Core/FoldersModule.cs index 5a9612990a..f22db52a5e 100644 --- a/products/ASC.Files/Service/Core/FoldersModule.cs +++ b/products/ASC.Files/Service/Core/FoldersModule.cs @@ -87,7 +87,7 @@ namespace ASC.Files.Service.Core .Where(f => f.Item1.RootFolderType != FolderType.TRASH && f.Item1.RootFolderType != FolderType.BUNCH) .ToList(); - var parentFolderIDs = folders.Select(r => r.Item1.FolderID).ToArray(); + var parentFolderIDs = folders.Select(r => r.Item1.FolderID).ToList(); var parentFolders = FolderDao.GetFolders(parentFolderIDs, checkShare: false); return folders.Select(f => new Tuple(ToFeed(f, parentFolders.FirstOrDefault(r => r.ID.Equals(f.Item1.FolderID))), f)); From 8de24eae99e9fa759c0ee20445725127e4a15ff0 Mon Sep 17 00:00:00 2001 From: pavelbannov Date: Tue, 1 Dec 2020 10:20:15 +0300 Subject: [PATCH 3/5] Files: openedit. AllowAnonymous --- products/ASC.Files/Server/Controllers/FilesController.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/products/ASC.Files/Server/Controllers/FilesController.cs b/products/ASC.Files/Server/Controllers/FilesController.cs index 631a2f9113..6d827232a5 100644 --- a/products/ASC.Files/Server/Controllers/FilesController.cs +++ b/products/ASC.Files/Server/Controllers/FilesController.cs @@ -58,6 +58,7 @@ using ASC.Web.Files.Utils; using ASC.Web.Studio.Core; using ASC.Web.Studio.Utility; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.ActionConstraints; @@ -723,12 +724,14 @@ namespace ASC.Api.Documents /// /// Files /// + [AllowAnonymous] [Read("file/{fileId}/openedit", DisableFormat = true)] public Configuration OpenEdit(string fileId, int version, string doc) { return FilesControllerHelperString.OpenEdit(fileId, version, doc); } + [AllowAnonymous] [Read("file/{fileId:int}/openedit")] public Configuration OpenEdit(int fileId, int version, string doc) { From 88117bcd0054e407e8a475e5a4d17b1abf7e018f Mon Sep 17 00:00:00 2001 From: pavelbannov Date: Tue, 1 Dec 2020 11:22:10 +0300 Subject: [PATCH 4/5] Authentication: read method --- .../Controllers/AuthenticationController.cs | 54 +++++++++++-------- 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/web/ASC.Web.Api/Controllers/AuthenticationController.cs b/web/ASC.Web.Api/Controllers/AuthenticationController.cs index a67c25a1b4..f520975fd0 100644 --- a/web/ASC.Web.Api/Controllers/AuthenticationController.cs +++ b/web/ASC.Web.Api/Controllers/AuthenticationController.cs @@ -19,7 +19,6 @@ namespace ASC.Web.Api.Controllers [Scope] [DefaultRoute] [ApiController] - [AllowAnonymous] public class AuthenticationController : ControllerBase { private UserManager UserManager { get; } @@ -48,12 +47,21 @@ namespace ASC.Web.Api.Controllers EmailValidationKeyModelHelper = emailValidationKeyModelHelper; } + + [Read] + public bool GetIsAuthentificated() + { + return SecurityContext.IsAuthenticated; + } + + [AllowAnonymous] [Create(false)] public AuthenticationTokenData AuthenticateMeFromBody([FromBody] AuthModel auth) { return AuthenticateMe(auth); } + [AllowAnonymous] [Create(false)] [Consumes("application/x-www-form-urlencoded")] public AuthenticationTokenData AuthenticateMeFromForm([FromForm] AuthModel auth) @@ -61,6 +69,28 @@ namespace ASC.Web.Api.Controllers return AuthenticateMe(auth); } + [Create("logout")] + public void Logout() + { + CookiesManager.ClearCookies(CookiesType.AuthKey); + CookiesManager.ClearCookies(CookiesType.SocketIO); + } + + [AllowAnonymous] + [Create("confirm", false)] + public ValidationResult CheckConfirmFromBody([FromBody] EmailValidationKeyModel model) + { + return EmailValidationKeyModelHelper.Validate(model); + } + + [AllowAnonymous] + [Create("confirm", false)] + [Consumes("application/x-www-form-urlencoded")] + public ValidationResult CheckConfirmFromForm([FromForm] EmailValidationKeyModel model) + { + return EmailValidationKeyModelHelper.Validate(model); + } + private AuthenticationTokenData AuthenticateMe(AuthModel auth) { var tenant = TenantManager.GetCurrentTenant(); @@ -84,28 +114,6 @@ namespace ASC.Web.Api.Controllers } } - [Create("logout")] - public void Logout() - { - CookiesManager.ClearCookies(CookiesType.AuthKey); - CookiesManager.ClearCookies(CookiesType.SocketIO); - } - - [AllowAnonymous] - [Create("confirm", false)] - public ValidationResult CheckConfirmFromBody([FromBody] EmailValidationKeyModel model) - { - return EmailValidationKeyModelHelper.Validate(model); - } - - [AllowAnonymous] - [Create("confirm", false)] - [Consumes("application/x-www-form-urlencoded")] - public ValidationResult CheckConfirmFromForm([FromForm] EmailValidationKeyModel model) - { - return EmailValidationKeyModelHelper.Validate(model); - } - private UserInfo GetUser(int tenantId, AuthModel memberModel) { memberModel.PasswordHash = (memberModel.PasswordHash ?? "").Trim(); From f1f1ae818edf20d59002454f56167d7b5821d8f8 Mon Sep 17 00:00:00 2001 From: pavelbannov Date: Tue, 1 Dec 2020 12:29:08 +0300 Subject: [PATCH 5/5] Files: fix long operation --- .../Core/Services/WCFService/FileOperations/FileOperation.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperation.cs b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperation.cs index d82a5b36ee..e37e0f0d9f 100644 --- a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperation.cs +++ b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperation.cs @@ -270,6 +270,9 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations CurrentTenant = fileOperationData.Tenant; using var scope = ServiceProvider.CreateScope(); + var tenantManager = scope.ServiceProvider.GetService(); + tenantManager.SetCurrentTenant(CurrentTenant); + var daoFactory = scope.ServiceProvider.GetService(); FolderDao = daoFactory.GetFolderDao();