From 303abad2a4b4f5bf6b48b200b0a0430d46c7131b Mon Sep 17 00:00:00 2001 From: pavelbannov Date: Tue, 1 Dec 2020 22:59:42 +0300 Subject: [PATCH 01/13] Files: change owner --- .../ASC.Files/Core/Core/FileStorageService.cs | 20 +----- .../ASC.Files/Core/Model/ChangeOwnerModel.cs | 12 ++++ .../Server/Controllers/FilesController.cs | 25 ++++++- .../Server/Helpers/FilesControllerHelper.cs | 72 +++++++------------ 4 files changed, 64 insertions(+), 65 deletions(-) create mode 100644 products/ASC.Files/Core/Model/ChangeOwnerModel.cs diff --git a/products/ASC.Files/Core/Core/FileStorageService.cs b/products/ASC.Files/Core/Core/FileStorageService.cs index a07326094d..560f2a209e 100644 --- a/products/ASC.Files/Core/Core/FileStorageService.cs +++ b/products/ASC.Files/Core/Core/FileStorageService.cs @@ -2027,14 +2027,12 @@ namespace ASC.Web.Files.Services.WCFService //return new ItemList(accounts); } - public ItemList> ChangeOwner(ItemList items, Guid userId) + public IEnumerable ChangeOwner(IEnumerable foldersId, IEnumerable filesId, Guid userId) { var userInfo = UserManager.GetUsers(userId); ErrorIf(Equals(userInfo, Constants.LostUser) || userInfo.IsVisitor(UserManager), FilesCommonResource.ErrorMassage_ChangeOwner); - ParseArrayItems(items, out var foldersId, out var filesId); - - var entries = new List>(); + var entries = new List(); var folderDao = GetFolderDao(); var folders = folderDao.GetFolders(foldersId); @@ -2103,7 +2101,7 @@ namespace ASC.Web.Files.Services.WCFService entries.Add(newFile); } - return new ItemList>(entries); + return entries; } public bool StoreOriginal(bool set) @@ -2224,18 +2222,6 @@ namespace ASC.Web.Files.Services.WCFService return DaoFactory.GetSecurityDao(); } - private static void ParseArrayItems(IEnumerable data, out List foldersId, out List filesId) - { - //TODO:!!!!Fix - foldersId = new List(); - filesId = new List(); - foreach (var id in data) - { - if (id.StartsWith("file_")) filesId.Add((T)Convert.ChangeType(id.Substring("file_".Length), typeof(T))); - if (id.StartsWith("folder_")) foldersId.Add((T)Convert.ChangeType(id.Substring("folder_".Length), typeof(T))); - } - } - private static void ErrorIf(bool condition, string errorMessage) { if (condition) throw new InvalidOperationException(errorMessage); diff --git a/products/ASC.Files/Core/Model/ChangeOwnerModel.cs b/products/ASC.Files/Core/Model/ChangeOwnerModel.cs new file mode 100644 index 0000000000..5c22d18003 --- /dev/null +++ b/products/ASC.Files/Core/Model/ChangeOwnerModel.cs @@ -0,0 +1,12 @@ +using System; +using System.Text.Json; + +using ASC.Files.Model; + +namespace ASC.Files.Core.Model +{ + public class ChangeOwnerModel: BaseBatchModel + { + public Guid UserId { get; set; } + } +} diff --git a/products/ASC.Files/Server/Controllers/FilesController.cs b/products/ASC.Files/Server/Controllers/FilesController.cs index 6d827232a5..567b932764 100644 --- a/products/ASC.Files/Server/Controllers/FilesController.cs +++ b/products/ASC.Files/Server/Controllers/FilesController.cs @@ -97,8 +97,8 @@ namespace ASC.Api.Documents private WordpressHelper WordpressHelper { get; } private EasyBibHelper EasyBibHelper { get; } private ProductEntryPoint ProductEntryPoint { get; } - public TenantManager TenantManager { get; } - public FileUtility FileUtility { get; } + private TenantManager TenantManager { get; } + private FileUtility FileUtility { get; } /// /// @@ -1098,6 +1098,27 @@ namespace ASC.Api.Documents return FilesControllerHelperInt.RenameFolder(folderId, folderModel.Title); } + [Create("owner")] + public IEnumerable ChangeOwnerFromBody([FromBody] ChangeOwnerModel model) + { + return ChangeOwner(model); + } + + [Create("owner")] + [Consumes("application/x-www-form-urlencoded")] + public IEnumerable ChangeOwnerFromForm([FromForm] ChangeOwnerModel model) + { + return ChangeOwner(model); + } + + public IEnumerable ChangeOwner(ChangeOwnerModel model) + { + var result = new List(); + result.AddRange(FileStorageServiceInt.ChangeOwner(model.FolderIds.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32()).ToList(), model.FileIds.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32()).ToList(), model.UserId)); + result.AddRange(FileStorageService.ChangeOwner(model.FolderIds.Where(r => r.ValueKind == JsonValueKind.String).Select(r => r.GetString()).ToList(), model.FileIds.Where(r => r.ValueKind == JsonValueKind.String).Select(r => r.GetString()).ToList(), model.UserId)); + return result.Select(FilesControllerHelperInt.GetFileEntryWrapper); + } + /// /// Returns a detailed information about the folder with the ID specified in the request /// diff --git a/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs b/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs index 77f254a722..441c68183b 100644 --- a/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs +++ b/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs @@ -293,16 +293,7 @@ namespace ASC.Files.Helpers public IEnumerable GetFolderPath(T folderId) { - return EntryManager.GetBreadCrumbs(folderId).Select(r => - { - if (r is Folder f1) - return FolderWrapperHelper.Get(f1); - - if (r is Folder f2) - return FolderWrapperHelper.Get(f2); - - return default(FileEntryWrapper); - }); + return EntryManager.GetBreadCrumbs(folderId).Select(GetFileEntryWrapper); } public FileWrapper GetFileInfo(T fileId, int version = -1) @@ -321,28 +312,7 @@ namespace ASC.Files.Helpers public List GetNewItems(T folderId) { return FileStorageService.GetNewItems(folderId) - .Select(r => - { - FileEntryWrapper wrapper = null; - if (r is Folder fol1) - { - wrapper = FolderWrapperHelper.Get(fol1); - } - else if (r is Folder fol2) - { - wrapper = FolderWrapperHelper.Get(fol2); - } - else if (r is File file1) - { - wrapper = FileWrapperHelper.Get(file1); - } - else if (r is File file2) - { - wrapper = FileWrapperHelper.Get(file2); - } - - return wrapper; - }) + .Select(GetFileEntryWrapper) .ToList(); } @@ -415,20 +385,7 @@ namespace ASC.Files.Helpers entries.AddRange(FileStorageService.GetItems(checkedFiles.OfType(), checkedFiles.OfType(), FilterType.FilesOnly, false, "", "")); - return entries.Select(r => - { - FileEntryWrapper wrapper = null; - if (r is Folder fol1) - { - wrapper = FolderWrapperHelper.Get(fol1); - } - if (r is Folder fol2) - { - wrapper = FolderWrapperHelper.Get(fol2); - } - - return wrapper; - }); + return entries.Select(GetFileEntryWrapper); } public IEnumerable MoveBatchItems(BatchModel batchModel) @@ -626,5 +583,28 @@ namespace ASC.Files.Helpers new OrderBy(sortBy, !ApiContext.SortDescending)), startIndex); } + + internal FileEntryWrapper GetFileEntryWrapper(FileEntry r) + { + FileEntryWrapper wrapper = null; + if (r is Folder fol1) + { + wrapper = FolderWrapperHelper.Get(fol1); + } + else if (r is Folder fol2) + { + wrapper = FolderWrapperHelper.Get(fol2); + } + else if (r is File file1) + { + wrapper = FileWrapperHelper.Get(file1); + } + else if (r is File file2) + { + wrapper = FileWrapperHelper.Get(file2); + } + + return wrapper; + } } } From 155b23f799fd2db5ebb7729f4f0172b06d58479f Mon Sep 17 00:00:00 2001 From: pavelbannov Date: Wed, 2 Dec 2020 16:17:43 +0300 Subject: [PATCH 02/13] Files: GetSecurityInfo --- .../Core/Core/Entries/EncryptionKeyPair.cs | 2 +- .../ASC.Files/Core/Core/FileStorageService.cs | 40 ++++++++------- .../Services/DocumentService/Configuration.cs | 2 +- .../WCFService/IFileStorageService.cs | 2 +- .../WCFService/Wrappers/AceWrapper.cs | 6 ++- products/ASC.Files/Core/Utils/FileSharing.cs | 49 ++++++++++--------- .../Server/Controllers/FilesController.cs | 19 +++++++ .../Server/Helpers/FilesControllerHelper.cs | 27 +++++----- 8 files changed, 90 insertions(+), 57 deletions(-) diff --git a/products/ASC.Files/Core/Core/Entries/EncryptionKeyPair.cs b/products/ASC.Files/Core/Core/Entries/EncryptionKeyPair.cs index 9e754f2fb0..84e138f0d1 100644 --- a/products/ASC.Files/Core/Core/Entries/EncryptionKeyPair.cs +++ b/products/ASC.Files/Core/Core/Entries/EncryptionKeyPair.cs @@ -110,7 +110,7 @@ namespace ASC.Web.Files.Core.Entries if (!FileSecurity.CanEdit(file)) throw new System.Security.SecurityException(FilesCommonResource.ErrorMassage_SecurityException_EditFile); if (file.RootFolderType != FolderType.Privacy) throw new NotSupportedException(); - var fileShares = FileStorageService.GetSharedInfo(new ItemList { string.Format("file_{0}", fileId) }).ToList(); + var fileShares = FileStorageService.GetSharedInfo(new List { fileId }, new List { }).ToList(); fileShares = fileShares.Where(share => !share.SubjectGroup && !share.SubjectId.Equals(FileConstant.ShareLinkId) && share.Share == FileShare.ReadWrite).ToList(); diff --git a/products/ASC.Files/Core/Core/FileStorageService.cs b/products/ASC.Files/Core/Core/FileStorageService.cs index 560f2a209e..444b32945b 100644 --- a/products/ASC.Files/Core/Core/FileStorageService.cs +++ b/products/ASC.Files/Core/Core/FileStorageService.cs @@ -26,7 +26,6 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; @@ -1745,37 +1744,40 @@ namespace ASC.Web.Files.Services.WCFService #endregion - public ItemList GetSharedInfo(ItemList objectIds) + public ItemList GetSharedInfo(IEnumerable fileIds, IEnumerable folderIds) { - return FileSharing.GetSharedInfo(objectIds); + return FileSharing.GetSharedInfo(fileIds, folderIds); } - public ItemList GetSharedInfoShort(string objectId) + public ItemList GetSharedInfoShortFile(T fileId) { - return FileSharing.GetSharedInfoShort(objectId); + return FileSharing.GetSharedInfoShortFile(fileId); } - public ItemList SetAceObject(AceCollection aceCollection, bool notify) + public ItemList GetSharedInfoShortFolder(T folderId) + { + return FileSharing.GetSharedInfoShortFolder(folderId); + } + + public List SetAceObject(AceCollection aceCollection, bool notify) { var fileDao = GetFileDao(); var folderDao = GetFolderDao(); - var result = new ItemList(); - foreach (var objectId in aceCollection.Entries) - { - Debug.Assert(objectId != null, "objectId != null"); - var entryType = objectId.StartsWith("file_") ? FileEntryType.File : FileEntryType.Folder; - var entryId = (T)Convert.ChangeType(objectId.Substring((entryType == FileEntryType.File ? "file_" : "folder_").Length), typeof(T)); - var entry = entryType == FileEntryType.File - ? fileDao.GetFile(entryId) - : (FileEntry)folderDao.GetFolder(entryId); + var result = new List(); + var entries = new List>(); + entries.AddRange(aceCollection.Files.Select(fileId => fileDao.GetFile(fileId))); + entries.AddRange(aceCollection.Folders.Select(folderDao.GetFolder)); + + foreach (var entry in entries) + { try { var changed = FileSharingAceHelper.SetAceObject(aceCollection.Aces, entry, notify, aceCollection.Message); if (changed) { FilesMessageService.Send(entry, GetHttpHeaders(), - entryType == FileEntryType.Folder ? MessageAction.FolderUpdatedAccess : MessageAction.FileUpdatedAccess, + entry.FileEntryType == FileEntryType.Folder ? MessageAction.FolderUpdatedAccess : MessageAction.FileUpdatedAccess, entry.Title); } } @@ -1785,9 +1787,9 @@ namespace ASC.Web.Files.Services.WCFService } var securityDao = GetSecurityDao(); - if (securityDao.IsShared(entry.ID, entryType)) + if (securityDao.IsShared(entry.ID, entry.FileEntryType)) { - result.Add(objectId); + result.Add(entry.ID); } } return result; @@ -1987,7 +1989,7 @@ namespace ASC.Web.Files.Services.WCFService NotifyClient.SendEditorMentions(file, fileLink, recipients, message); - return showSharingSettings ? GetSharedInfoShort("file_" + fileId) : null; + return showSharingSettings ? GetSharedInfoShortFile(fileId) : null; } public ItemList GetEncryptionAccess(T fileId) diff --git a/products/ASC.Files/Core/Services/DocumentService/Configuration.cs b/products/ASC.Files/Core/Services/DocumentService/Configuration.cs index c00070f834..847c5ec5ad 100644 --- a/products/ASC.Files/Core/Services/DocumentService/Configuration.cs +++ b/products/ASC.Files/Core/Services/DocumentService/Configuration.cs @@ -266,7 +266,7 @@ namespace ASC.Web.Files.Services.DocumentService try { - return FileSharing.GetSharedInfoShort(File.UniqID); + return FileSharing.GetSharedInfoShortFile(File.ID); } catch { diff --git a/products/ASC.Files/Core/Services/WCFService/IFileStorageService.cs b/products/ASC.Files/Core/Services/WCFService/IFileStorageService.cs index 460c40731a..e3ff0945eb 100644 --- a/products/ASC.Files/Core/Services/WCFService/IFileStorageService.cs +++ b/products/ASC.Files/Core/Services/WCFService/IFileStorageService.cs @@ -172,7 +172,7 @@ namespace ASC.Web.Files.Services.WCFService ItemList GetSharedInfoShort(string objectId); - ItemList SetAceObject(AceCollection aceCollection, bool notify); + List SetAceObject(AceCollection aceCollection, bool notify); void RemoveAce(ItemList items); diff --git a/products/ASC.Files/Core/Services/WCFService/Wrappers/AceWrapper.cs b/products/ASC.Files/Core/Services/WCFService/Wrappers/AceWrapper.cs index dcda7c3b44..5e9e75d266 100644 --- a/products/ASC.Files/Core/Services/WCFService/Wrappers/AceWrapper.cs +++ b/products/ASC.Files/Core/Services/WCFService/Wrappers/AceWrapper.cs @@ -25,6 +25,7 @@ using System; +using System.Collections.Generic; using System.Text.Json.Serialization; using ASC.Files.Core; @@ -33,9 +34,10 @@ using ASC.Files.Core.Security; namespace ASC.Web.Files.Services.WCFService { - public class AceCollection + public class AceCollection { - public ItemList Entries { get; set; } + public IEnumerable Files { get; set; } + public IEnumerable Folders { get; set; } public ItemList Aces { get; set; } diff --git a/products/ASC.Files/Core/Utils/FileSharing.cs b/products/ASC.Files/Core/Utils/FileSharing.cs index 02c1835b8a..d2ac7fba7a 100644 --- a/products/ASC.Files/Core/Utils/FileSharing.cs +++ b/products/ASC.Files/Core/Utils/FileSharing.cs @@ -424,7 +424,7 @@ namespace ASC.Web.Files.Utils return result; } - public ItemList GetSharedInfo(ItemList objectIds) + public ItemList GetSharedInfo(IEnumerable fileIds, IEnumerable folderIds) { if (!AuthContext.IsAuthenticated) { @@ -433,23 +433,16 @@ namespace ASC.Web.Files.Utils var result = new List(); - var folderDao = DaoFactory.GetFolderDao(); - var fileDao = DaoFactory.GetFileDao(); + var fileDao = DaoFactory.GetFileDao(); + var files = fileDao.GetFiles(fileIds); + + var folderDao = DaoFactory.GetFolderDao(); + var folders = folderDao.GetFolders(folderIds); + + var entries = files.Cast>().Concat(folders.Cast>()); - foreach (var objectId in objectIds) + foreach (var entry in entries) { - if (string.IsNullOrEmpty(objectId)) - { - throw new InvalidOperationException(FilesCommonResource.ErrorMassage_BadRequest); - } - - var entryType = objectId.StartsWith("file_") ? FileEntryType.File : FileEntryType.Folder; - var entryId = (T)Convert.ChangeType(objectId.Substring((entryType == FileEntryType.File ? "file_" : "folder_").Length), typeof(T)); - - var entry = entryType == FileEntryType.File - ? fileDao.GetFile(entryId) - : (FileEntry)folderDao.GetFolder(entryId); - IEnumerable acesForObject; try { @@ -516,7 +509,7 @@ namespace ASC.Web.Files.Utils result.Remove(meAce); AceWrapper linkAce = null; - if (objectIds.Count > 1) + if (entries.Any()) { result.RemoveAll(ace => ace.SubjectId == FileConstant.ShareLinkId); } @@ -544,13 +537,25 @@ namespace ASC.Web.Files.Utils return new ItemList(result); } - public ItemList GetSharedInfoShort(string objectId) + public ItemList GetSharedInfoShortFile(T fileID) { - var aces = GetSharedInfo(new ItemList { objectId }); + var aces = GetSharedInfo(new List { fileID}, new List()); + + return GetAceShortWrappers(aces); + } - return new ItemList( - aces.Where(aceWrapper => !aceWrapper.SubjectId.Equals(FileConstant.ShareLinkId) || aceWrapper.Share != FileShare.Restrict) - .Select(aceWrapper => new AceShortWrapper(aceWrapper))); + public ItemList GetSharedInfoShortFolder(T folderId) + { + var aces = GetSharedInfo(new List(), new List { folderId }); + + return GetAceShortWrappers(aces); + } + + private ItemList GetAceShortWrappers(ItemList aces) + { + return new ItemList(aces + .Where(aceWrapper => !aceWrapper.SubjectId.Equals(FileConstant.ShareLinkId) || aceWrapper.Share != FileShare.Restrict) + .Select(aceWrapper => new AceShortWrapper(aceWrapper))); } } } \ No newline at end of file diff --git a/products/ASC.Files/Server/Controllers/FilesController.cs b/products/ASC.Files/Server/Controllers/FilesController.cs index 567b932764..f9b317a37d 100644 --- a/products/ASC.Files/Server/Controllers/FilesController.cs +++ b/products/ASC.Files/Server/Controllers/FilesController.cs @@ -1604,6 +1604,25 @@ namespace ASC.Api.Documents return FilesControllerHelperInt.GetFolderSecurityInfo(folderId); } + [Read("share")] + public IEnumerable GetSecurityInfoFromBody([FromBody] BaseBatchModel model) + { + var result = new List(); + result.AddRange(FilesControllerHelperInt.GetSecurityInfo(model.FileIds.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32()), model.FolderIds.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32()))); + result.AddRange(FilesControllerHelperString.GetSecurityInfo(model.FileIds.Where(r => r.ValueKind == JsonValueKind.String).Select(r => r.GetString()), model.FolderIds.Where(r => r.ValueKind == JsonValueKind.String).Select(r => r.GetString()))); + return result; + } + + [Read("share")] + [Consumes("application/x-www-form-urlencoded")] + public IEnumerable GetSecurityInfoFromForm([FromForm] BaseBatchModel model) + { + var result = new List(); + result.AddRange(FilesControllerHelperInt.GetSecurityInfo(model.FileIds.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32()), model.FolderIds.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32()))); + result.AddRange(FilesControllerHelperString.GetSecurityInfo(model.FileIds.Where(r => r.ValueKind == JsonValueKind.String).Select(r => r.GetString()), model.FolderIds.Where(r => r.ValueKind == JsonValueKind.String).Select(r => r.GetString()))); + return result; + } + /// /// Sets sharing settings for the file with the ID specified in the request /// diff --git a/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs b/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs index 441c68183b..fc21e6a85f 100644 --- a/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs +++ b/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs @@ -468,13 +468,19 @@ namespace ASC.Files.Helpers public IEnumerable GetFileSecurityInfo(T fileId) { - var fileShares = FileStorageService.GetSharedInfo(new ItemList { string.Format("file_{0}", fileId) }); + var fileShares = FileStorageService.GetSharedInfo(new List { fileId }, new List { }); return fileShares.Select(FileShareWrapperHelper.Get); } public IEnumerable GetFolderSecurityInfo(T folderId) { - var fileShares = FileStorageService.GetSharedInfo(new ItemList { string.Format("folder_{0}", folderId) }); + var fileShares = FileStorageService.GetSharedInfo(new List { }, new List { folderId }); + return fileShares.Select(FileShareWrapperHelper.Get); + } + + public IEnumerable GetSecurityInfo(IEnumerable fileIds, IEnumerable folderIds) + { + var fileShares = FileStorageService.GetSharedInfo(fileIds, folderIds); return fileShares.Select(FileShareWrapperHelper.Get); } @@ -483,9 +489,9 @@ namespace ASC.Files.Helpers if (share != null && share.Any()) { var list = new ItemList(share.Select(FileShareParamsHelper.ToAceObject)); - var aceCollection = new AceCollection + var aceCollection = new AceCollection { - Entries = new ItemList { "file_" + fileId }, + Files = new List {fileId }, Aces = list, Message = sharingMessage }; @@ -499,9 +505,9 @@ namespace ASC.Files.Helpers if (share != null && share.Any()) { var list = new ItemList(share.Select(FileShareParamsHelper.ToAceObject)); - var aceCollection = new AceCollection + var aceCollection = new AceCollection { - Entries = new ItemList { "folder_" + folderId }, + Folders = new List { folderId }, Aces = list, Message = sharingMessage }; @@ -522,8 +528,7 @@ namespace ASC.Files.Helpers { var file = GetFileInfo(fileId); - var objectId = "file_" + file.Id; - var sharedInfo = FileStorageService.GetSharedInfo(new ItemList { objectId }).Find(r => r.SubjectId == FileConstant.ShareLinkId); + var sharedInfo = FileStorageService.GetSharedInfo(new List { fileId }, new List { }).Find(r => r.SubjectId == FileConstant.ShareLinkId); if (sharedInfo == null || sharedInfo.Share != share) { var list = new ItemList @@ -535,13 +540,13 @@ namespace ASC.Files.Helpers Share = share } }; - var aceCollection = new AceCollection + var aceCollection = new AceCollection { - Entries = new ItemList { objectId }, + Files = new List { fileId }, Aces = list }; FileStorageService.SetAceObject(aceCollection, false); - sharedInfo = FileStorageService.GetSharedInfo(new ItemList { objectId }).Find(r => r.SubjectId == FileConstant.ShareLinkId); + sharedInfo = FileStorageService.GetSharedInfo(new List { fileId }, new List { }).Find(r => r.SubjectId == FileConstant.ShareLinkId); } return sharedInfo.Link; From 34f8d17b84f39bc542acf00c6fb7c4b67134da2d Mon Sep 17 00:00:00 2001 From: pavelbannov Date: Thu, 3 Dec 2020 17:43:33 +0300 Subject: [PATCH 03/13] Files: set files securityinfo --- .../ASC.Files/Core/Model/SecurityInfoModel.cs | 5 ++-- .../Server/Controllers/FilesController.cs | 21 ++++++++++++++ .../Server/Helpers/FilesControllerHelper.cs | 29 +++++++------------ 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/products/ASC.Files/Core/Model/SecurityInfoModel.cs b/products/ASC.Files/Core/Model/SecurityInfoModel.cs index 8a492c73d3..04e44196f4 100644 --- a/products/ASC.Files/Core/Model/SecurityInfoModel.cs +++ b/products/ASC.Files/Core/Model/SecurityInfoModel.cs @@ -1,10 +1,11 @@ using System.Collections.Generic; - +using System.Text.Json; + using ASC.Api.Documents; namespace ASC.Files.Model { - public class SecurityInfoModel + public class SecurityInfoModel : BaseBatchModel { public IEnumerable Share { get; set; } public bool Notify { get; set; } diff --git a/products/ASC.Files/Server/Controllers/FilesController.cs b/products/ASC.Files/Server/Controllers/FilesController.cs index f9b317a37d..d9327d1418 100644 --- a/products/ASC.Files/Server/Controllers/FilesController.cs +++ b/products/ASC.Files/Server/Controllers/FilesController.cs @@ -1662,6 +1662,27 @@ namespace ASC.Api.Documents return FilesControllerHelperInt.SetFileSecurityInfo(fileId, model.Share, model.Notify, model.SharingMessage); } + [Update("share")] + public IEnumerable SetSecurityInfoFromBody([FromBody]SecurityInfoModel model) + { + return SetSecurityInfo(model); + } + + [Update("share")] + [Consumes("application/x-www-form-urlencoded")] + public IEnumerable SetSecurityInfoFromForm([FromForm]SecurityInfoModel model) + { + return SetSecurityInfo(model); + } + + public IEnumerable SetSecurityInfo(SecurityInfoModel model) + { + var result = new List(); + result.AddRange(FilesControllerHelperInt.SetSecurityInfo(model.FileIds.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32()).ToList(), model.FolderIds.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32()).ToList(), model.Share, model.Notify, model.SharingMessage)); + result.AddRange(FilesControllerHelperString.SetSecurityInfo(model.FileIds.Where(r => r.ValueKind == JsonValueKind.String).Select(r => r.GetString()).ToList(), model.FolderIds.Where(r => r.ValueKind == JsonValueKind.String).Select(r => r.GetString()).ToList(), model.Share, model.Notify, model.SharingMessage)); + return result; + } + /// /// Sets sharing settings for the folder with the ID specified in the request /// diff --git a/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs b/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs index fc21e6a85f..0cbb05ac1b 100644 --- a/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs +++ b/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs @@ -468,14 +468,12 @@ namespace ASC.Files.Helpers public IEnumerable GetFileSecurityInfo(T fileId) { - var fileShares = FileStorageService.GetSharedInfo(new List { fileId }, new List { }); - return fileShares.Select(FileShareWrapperHelper.Get); + return GetSecurityInfo(new List { fileId }, new List { }); } public IEnumerable GetFolderSecurityInfo(T folderId) { - var fileShares = FileStorageService.GetSharedInfo(new List { }, new List { folderId }); - return fileShares.Select(FileShareWrapperHelper.Get); + return GetSecurityInfo(new List { }, new List { folderId }); } public IEnumerable GetSecurityInfo(IEnumerable fileIds, IEnumerable folderIds) @@ -486,35 +484,30 @@ namespace ASC.Files.Helpers public IEnumerable SetFileSecurityInfo(T fileId, IEnumerable share, bool notify, string sharingMessage) { - if (share != null && share.Any()) - { - var list = new ItemList(share.Select(FileShareParamsHelper.ToAceObject)); - var aceCollection = new AceCollection - { - Files = new List {fileId }, - Aces = list, - Message = sharingMessage - }; - FileStorageService.SetAceObject(aceCollection, notify); - } - return GetFileSecurityInfo(fileId); + return SetSecurityInfo(new List { fileId }, new List(), share, notify, sharingMessage); } public IEnumerable SetFolderSecurityInfo(T folderId, IEnumerable share, bool notify, string sharingMessage) + { + return SetSecurityInfo(new List(), new List { folderId}, share, notify, sharingMessage); + } + + public IEnumerable SetSecurityInfo(IEnumerable fileIds, IEnumerable folderIds, IEnumerable share, bool notify, string sharingMessage) { if (share != null && share.Any()) { var list = new ItemList(share.Select(FileShareParamsHelper.ToAceObject)); var aceCollection = new AceCollection { - Folders = new List { folderId }, + Files = fileIds, + Folders = folderIds, Aces = list, Message = sharingMessage }; FileStorageService.SetAceObject(aceCollection, notify); } - return GetFolderSecurityInfo(folderId); + return GetSecurityInfo(fileIds, folderIds); } public bool RemoveSecurityInfo(List fileIds, List folderIds) From d39b0743fdf7e5b5a742c4f8f0d9c7a25f5ba130 Mon Sep 17 00:00:00 2001 From: pavelbannov Date: Thu, 3 Dec 2020 17:50:17 +0300 Subject: [PATCH 04/13] Files: fix GetSecurityInfo --- products/ASC.Files/Server/Controllers/FilesController.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/products/ASC.Files/Server/Controllers/FilesController.cs b/products/ASC.Files/Server/Controllers/FilesController.cs index d9327d1418..039ddab170 100644 --- a/products/ASC.Files/Server/Controllers/FilesController.cs +++ b/products/ASC.Files/Server/Controllers/FilesController.cs @@ -1604,7 +1604,7 @@ namespace ASC.Api.Documents return FilesControllerHelperInt.GetFolderSecurityInfo(folderId); } - [Read("share")] + [Create("share")] public IEnumerable GetSecurityInfoFromBody([FromBody] BaseBatchModel model) { var result = new List(); @@ -1613,7 +1613,7 @@ namespace ASC.Api.Documents return result; } - [Read("share")] + [Create("share")] [Consumes("application/x-www-form-urlencoded")] public IEnumerable GetSecurityInfoFromForm([FromForm] BaseBatchModel model) { From d4e5208115f24179259ec3522b36ab8125c56e17 Mon Sep 17 00:00:00 2001 From: gopienkonikita Date: Thu, 3 Dec 2020 18:00:16 +0300 Subject: [PATCH 05/13] Web: Components: removed margin-top from row-container --- web/ASC.Web.Components/src/components/row-container/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/web/ASC.Web.Components/src/components/row-container/index.js b/web/ASC.Web.Components/src/components/row-container/index.js index 7e0b7aae69..8ee2f58a36 100644 --- a/web/ASC.Web.Components/src/components/row-container/index.js +++ b/web/ASC.Web.Components/src/components/row-container/index.js @@ -15,7 +15,6 @@ const StyledRowContainer = styled.div` : "100%" : "auto"}; position: relative; - margin-top:-18px; `; class RowContainer extends React.PureComponent { From a39192ff21b7d7967cffd1e998a6ebda0c54cc93 Mon Sep 17 00:00:00 2001 From: gopienkonikita Date: Thu, 3 Dec 2020 18:03:05 +0300 Subject: [PATCH 06/13] Web: Common: added new containers styles, added classNames to people and files containers --- .../Client/src/components/pages/Home/Section/Body/index.js | 6 +++++- .../Client/src/components/pages/Home/Section/Body/index.js | 5 ++++- .../components/PageLayout/sub-components/section-body.js | 5 +++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/products/ASC.Files/Client/src/components/pages/Home/Section/Body/index.js b/products/ASC.Files/Client/src/components/pages/Home/Section/Body/index.js index 0b7789c39c..a501a61cf2 100644 --- a/products/ASC.Files/Client/src/components/pages/Home/Section/Body/index.js +++ b/products/ASC.Files/Client/src/components/pages/Home/Section/Body/index.js @@ -1686,7 +1686,11 @@ class SectionBodyContent extends React.Component { ) : ( {(context) => ( - + {items.map((item) => { const { checked, isFolder, value, contextOptions } = item; const sectionWidth = context.sectionWidth; diff --git a/products/ASC.People/Client/src/components/pages/Home/Section/Body/index.js b/products/ASC.People/Client/src/components/pages/Home/Section/Body/index.js index 73cbc56b3d..7b325feb7f 100644 --- a/products/ASC.People/Client/src/components/pages/Home/Section/Body/index.js +++ b/products/ASC.People/Client/src/components/pages/Home/Section/Body/index.js @@ -392,7 +392,10 @@ class SectionBodyContent extends React.PureComponent { <> {(context) => ( - + {peopleList.map((man) => { const { checked, diff --git a/web/ASC.Web.Common/src/components/PageLayout/sub-components/section-body.js b/web/ASC.Web.Common/src/components/PageLayout/sub-components/section-body.js index 09eaae472f..b2c92cf4bd 100644 --- a/web/ASC.Web.Common/src/components/PageLayout/sub-components/section-body.js +++ b/web/ASC.Web.Common/src/components/PageLayout/sub-components/section-body.js @@ -26,6 +26,11 @@ const commonStyles = css` flex-direction: column; min-height: 100%; } + + .people-row-container, + .files-row-container { + margin-top: -22px; + } } `; From b5807c695d40c51f0839a2f7e9338d204e09632f Mon Sep 17 00:00:00 2001 From: gopienkonikita Date: Thu, 3 Dec 2020 18:05:58 +0300 Subject: [PATCH 07/13] Web: Files: refactoring panels styles --- .../components/panels/NewFilesPanel/index.js | 10 +++- .../components/panels/SharingPanel/index.js | 12 ++-- .../src/components/panels/StyledPanels.js | 55 ++++++++----------- 3 files changed, 35 insertions(+), 42 deletions(-) diff --git a/products/ASC.Files/Client/src/components/panels/NewFilesPanel/index.js b/products/ASC.Files/Client/src/components/panels/NewFilesPanel/index.js index 17552fe4f4..6565ea986b 100644 --- a/products/ASC.Files/Client/src/components/panels/NewFilesPanel/index.js +++ b/products/ASC.Files/Client/src/components/panels/NewFilesPanel/index.js @@ -236,13 +236,17 @@ class NewFilesPanelComponent extends React.Component {