diff --git a/products/ASC.Files/Core/Core/FileStorageService.cs b/products/ASC.Files/Core/Core/FileStorageService.cs index 91ba3980a9..cb7f227977 100644 --- a/products/ASC.Files/Core/Core/FileStorageService.cs +++ b/products/ASC.Files/Core/Core/FileStorageService.cs @@ -115,15 +115,16 @@ namespace ASC.Web.Files.Services.WCFService private DocumentServiceConnector DocumentServiceConnector { get; } private FileSharing FileSharing { get; } private NotifyClient NotifyClient { get; } - private FileOperationsManagerHelper FileOperationsManagerHelper { get; } private UrlShortener UrlShortener { get; } private IServiceProvider ServiceProvider { get; } private FileSharingAceHelper FileSharingAceHelper { get; } private ApiContext ApiContext { get; } private ConsumerFactory ConsumerFactory { get; } - public EncryptionKeyPairHelper EncryptionKeyPairHelper { get; } - public SettingsManager SettingsManager { get; } - public ILog Logger { get; set; } + private EncryptionKeyPairHelper EncryptionKeyPairHelper { get; } + private SettingsManager SettingsManager { get; } + private FileOperationsManager FileOperationsManager { get; } + private TenantManager TenantManager { get; } + private ILog Logger { get; set; } public FileStorageService( Global global, @@ -159,14 +160,15 @@ namespace ASC.Web.Files.Services.WCFService DocumentServiceConnector documentServiceConnector, FileSharing fileSharing, NotifyClient notifyClient, - FileOperationsManagerHelper fileOperationsManagerHelper, UrlShortener urlShortener, IServiceProvider serviceProvider, FileSharingAceHelper fileSharingAceHelper, ApiContext apiContext, ConsumerFactory consumerFactory, EncryptionKeyPairHelper encryptionKeyPairHelper, - SettingsManager settingsManager) + SettingsManager settingsManager, + FileOperationsManager fileOperationsManager, + TenantManager tenantManager) { Global = global; GlobalStore = globalStore; @@ -200,7 +202,6 @@ namespace ASC.Web.Files.Services.WCFService DocumentServiceConnector = documentServiceConnector; FileSharing = fileSharing; NotifyClient = notifyClient; - FileOperationsManagerHelper = fileOperationsManagerHelper; UrlShortener = urlShortener; ServiceProvider = serviceProvider; FileSharingAceHelper = fileSharingAceHelper; @@ -208,7 +209,9 @@ namespace ASC.Web.Files.Services.WCFService ConsumerFactory = consumerFactory; EncryptionKeyPairHelper = encryptionKeyPairHelper; SettingsManager = settingsManager; - Logger = optionMonitor.Get("ASC.Files"); + Logger = optionMonitor.Get("ASC.Files"); + FileOperationsManager = fileOperationsManager; + TenantManager = tenantManager; } public Folder GetFolder(T folderId) @@ -1121,8 +1124,7 @@ namespace ASC.Web.Files.Services.WCFService public ItemList MarkAsRead(IEnumerable foldersId, IEnumerable filesId) { if (!foldersId.Any() && !filesId.Any()) return GetTasksStatuses(); - - return FileOperationsManagerHelper.MarkAsRead(foldersId, filesId); + return FileOperationsManager.MarkAsRead(AuthContext.CurrentAccount.ID, TenantManager.GetCurrentTenant(), foldersId, filesId); } public ItemList GetThirdParty() @@ -1313,21 +1315,21 @@ namespace ASC.Web.Files.Services.WCFService { ErrorIf(!AuthContext.IsAuthenticated, FilesCommonResource.ErrorMassage_SecurityException); - return FileOperationsManagerHelper.GetOperationResults(); + return FileOperationsManager.GetOperationResults(AuthContext.CurrentAccount.ID); } public ItemList TerminateTasks() { ErrorIf(!AuthContext.IsAuthenticated, FilesCommonResource.ErrorMassage_SecurityException); - return FileOperationsManagerHelper.CancelOperations(); + return FileOperationsManager.CancelOperations(AuthContext.CurrentAccount.ID); } public ItemList BulkDownload(Dictionary folders, Dictionary files) { ErrorIf(!folders.Any() && !files.Any(), FilesCommonResource.ErrorMassage_BadRequest); - return FileOperationsManagerHelper.Download(folders, files, GetHttpHeaders()); + return FileOperationsManager.Download(AuthContext.CurrentAccount.ID, TenantManager.CurrentTenant, folders, files, GetHttpHeaders()); } @@ -1430,29 +1432,29 @@ namespace ASC.Web.Files.Services.WCFService { ItemList result; if (foldersId.Any() || filesId.Any()) - { - result = FileOperationsManagerHelper.MoveOrCopy(foldersId, filesId, destFolderId, ic, resolve, !deleteAfter, GetHttpHeaders()); + { + result = FileOperationsManager.MoveOrCopy(AuthContext.CurrentAccount.ID, TenantManager.CurrentTenant, foldersId, filesId, destFolderId, ic, resolve, !deleteAfter, GetHttpHeaders()); } else { - result = FileOperationsManagerHelper.GetOperationResults(); + result = FileOperationsManager.GetOperationResults(AuthContext.CurrentAccount.ID); } return result; } public ItemList DeleteFile(string action, T fileId, bool ignoreException = false, bool deleteAfter = false, bool immediately = false) - { - return FileOperationsManagerHelper.DeleteFile(fileId, ignoreException, !deleteAfter, immediately, GetHttpHeaders()); + { + return FileOperationsManager.Delete(AuthContext.CurrentAccount.ID, TenantManager.CurrentTenant, new List(), new List() { fileId }, ignoreException, !deleteAfter, immediately, GetHttpHeaders()); } public ItemList DeleteFolder(string action, T folderId, bool ignoreException = false, bool deleteAfter = false, bool immediately = false) - { - return FileOperationsManagerHelper.DeleteFolder(folderId, ignoreException, !deleteAfter, immediately, GetHttpHeaders()); + { + return FileOperationsManager.Delete(AuthContext.CurrentAccount.ID, TenantManager.CurrentTenant, new List() { folderId }, new List(), ignoreException, !deleteAfter, immediately, GetHttpHeaders()); } public ItemList DeleteItems(string action, List files, List folders, bool ignoreException = false, bool deleteAfter = false, bool immediately = false) - { - return FileOperationsManagerHelper.Delete(folders, files, ignoreException, !deleteAfter, immediately, GetHttpHeaders()); + { + return FileOperationsManager.Delete(AuthContext.CurrentAccount.ID, TenantManager.CurrentTenant, folders, files, ignoreException, !deleteAfter, immediately, GetHttpHeaders()); } public ItemList EmptyTrash() @@ -1462,8 +1464,8 @@ namespace ASC.Web.Files.Services.WCFService var trashId = folderDao.GetFolderIDTrash(true); var foldersId = folderDao.GetFolders(trashId).Select(f => f.ID).ToList(); var filesId = fileDao.GetFiles(trashId).ToList(); - - return FileOperationsManagerHelper.Delete(foldersId, filesId, false, true, false, GetHttpHeaders()); + + return FileOperationsManager.Delete(AuthContext.CurrentAccount.ID, TenantManager.CurrentTenant, foldersId, filesId, false, true, false, GetHttpHeaders()); } public ItemList CheckConversion(ItemList> filesInfoJSON) @@ -2303,7 +2305,8 @@ namespace ASC.Web.Files.Services.WCFService .AddDocumentServiceTrackerHelperService() .AddSocketManagerService() .AddFileOperationsManagerHelperService() - .AddFileSharingAceHelperService(); + .AddFileSharingAceHelperService() + .AddTenantManagerService(); } return services; diff --git a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperationsManager.cs b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperationsManager.cs index 3102fa909f..69540c2429 100644 --- a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperationsManager.cs +++ b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperationsManager.cs @@ -33,6 +33,7 @@ using System.Text.Json; using ASC.Common; using ASC.Common.Threading; using ASC.Core; +using ASC.Core.Tenants; using ASC.Files.Core.Resources; using Microsoft.Extensions.Primitives; @@ -51,7 +52,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations ServiceProvider = serviceProvider; } - public ItemList GetOperationResults(AuthContext authContext) + public ItemList GetOperationResults(Guid userId) { var operations = tasks.GetTasks(); var processlist = Process.GetProcesses(); @@ -63,7 +64,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations tasks.RemoveTask(o.Id); } - operations = operations.Where(t => t.GetProperty(FileOperation.OWNER) == authContext.CurrentAccount.ID); + operations = operations.Where(t => t.GetProperty(FileOperation.OWNER) == userId); foreach (var o in operations.Where(o => o.Status > DistributedTaskStatus.Running)) { o.SetProperty(FileOperation.PROGRESS, 100); @@ -88,33 +89,32 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations return new ItemList(results); } - public ItemList CancelOperations(AuthContext authContext) + public ItemList CancelOperations(Guid userId) { var operations = tasks.GetTasks() - .Where(t => t.GetProperty(FileOperation.OWNER) == authContext.CurrentAccount.ID); + .Where(t => t.GetProperty(FileOperation.OWNER) == userId); foreach (var o in operations) { tasks.CancelTask(o.Id); } - return GetOperationResults(authContext); + return GetOperationResults(userId); } - public ItemList MarkAsRead(AuthContext authContext, TenantManager tenantManager, IEnumerable folderIds, IEnumerable fileIds) + public ItemList MarkAsRead(Guid userId, Tenant tenant, IEnumerable folderIds, IEnumerable fileIds) { - var tenant = tenantManager.GetCurrentTenant(); var op1 = new FileMarkAsReadOperation(ServiceProvider, new FileMarkAsReadOperationData(folderIds.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32()), fileIds.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32()), tenant)); var op2 = new FileMarkAsReadOperation(ServiceProvider, new FileMarkAsReadOperationData(folderIds.Where(r => r.ValueKind == JsonValueKind.String).Select(r => r.GetString()), fileIds.Where(r => r.ValueKind == JsonValueKind.String).Select(r => r.GetString()), tenant)); var op = new FileMarkAsReadOperation(ServiceProvider, op2, op1); - return QueueTask(authContext, op); + return QueueTask(userId, op); } - public ItemList Download(AuthContext authContext, TenantManager tenantManager, Dictionary folders, Dictionary files, IDictionary headers) + public ItemList Download(Guid userId, Tenant tenant, Dictionary folders, Dictionary files, IDictionary headers) { var operations = tasks.GetTasks() - .Where(t => t.GetProperty(FileOperation.OWNER) == authContext.CurrentAccount.ID) + .Where(t => t.GetProperty(FileOperation.OWNER) == userId) .Where(t => t.GetProperty(FileOperation.OPERATION_TYPE) == FileOperationType.Download); if (operations.Any(o => o.Status <= DistributedTaskStatus.Running)) @@ -122,112 +122,48 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations throw new InvalidOperationException(FilesCommonResource.ErrorMassage_ManyDownloads); } - var tenant = tenantManager.GetCurrentTenant(); var op1 = new FileDownloadOperation(ServiceProvider, new FileDownloadOperationData(folders.Where(r => r.Key.ValueKind == JsonValueKind.Number).ToDictionary(r => r.Key.GetInt32(), r => r.Value), files.Where(r => r.Key.ValueKind == JsonValueKind.Number).ToDictionary(r => r.Key.GetInt32(), r => r.Value), tenant, headers), false); var op2 = new FileDownloadOperation(ServiceProvider, new FileDownloadOperationData(folders.Where(r => r.Key.ValueKind == JsonValueKind.String).ToDictionary(r => r.Key.GetString(), r => r.Value), files.Where(r => r.Key.ValueKind == JsonValueKind.String).ToDictionary(r => r.Key.GetString(), r => r.Value), tenant, headers), false); var op = new FileDownloadOperation(ServiceProvider, op2, op1); - return QueueTask(authContext, op); + return QueueTask(userId, op); } - public ItemList MoveOrCopy(AuthContext authContext, TenantManager tenantManager, IEnumerable folders, IEnumerable files, JsonElement destFolderId, bool copy, FileConflictResolveType resolveType, bool holdResult, IDictionary headers) + public ItemList MoveOrCopy(Guid userId, Tenant tenant, IEnumerable folders, IEnumerable files, JsonElement destFolderId, bool copy, FileConflictResolveType resolveType, bool holdResult, IDictionary headers) { - var tenant = tenantManager.GetCurrentTenant(); var op1 = new FileMoveCopyOperation(ServiceProvider, new FileMoveCopyOperationData(folders.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32()), files.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32()), tenant, destFolderId, copy, resolveType, holdResult, headers)); var op2 = new FileMoveCopyOperation(ServiceProvider, new FileMoveCopyOperationData(folders.Where(r => r.ValueKind == JsonValueKind.String).Select(r => r.GetString()), files.Where(r => r.ValueKind == JsonValueKind.String).Select(r => r.GetString()), tenant, destFolderId, copy, resolveType, holdResult, headers)); var op = new FileMoveCopyOperation(ServiceProvider, op2, op1); - return QueueTask(authContext, op); + return QueueTask(userId, op); } - public ItemList Delete(AuthContext authContext, TenantManager tenantManager, IEnumerable folders, IEnumerable files, bool ignoreException, bool holdResult, bool immediately, IDictionary headers) + public ItemList Delete(Guid userId, Tenant tenant, IEnumerable folders, IEnumerable files, bool ignoreException, bool holdResult, bool immediately, IDictionary headers) { - var op = new FileDeleteOperation(ServiceProvider, new FileDeleteOperationData(folders, files, tenantManager.GetCurrentTenant(), holdResult, ignoreException, immediately, headers)); - return QueueTask(authContext, op); + var op = new FileDeleteOperation(ServiceProvider, new FileDeleteOperationData(folders, files, tenant, holdResult, ignoreException, immediately, headers)); + return QueueTask(userId, op); } - public ItemList Delete(AuthContext authContext, TenantManager tenantManager, IEnumerable folders, IEnumerable files, bool ignoreException, bool holdResult, bool immediately, IDictionary headers) + public ItemList Delete(Guid userId, TenantManager tenantManager, IEnumerable folders, IEnumerable files, bool ignoreException, bool holdResult, bool immediately, IDictionary headers) { var op1 = new FileDeleteOperation(ServiceProvider, new FileDeleteOperationData(folders.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32()), files.Where(r => r.ValueKind == JsonValueKind.Number).Select(r => r.GetInt32()), tenantManager.GetCurrentTenant(), holdResult, ignoreException, immediately, headers)); var op2 = new FileDeleteOperation(ServiceProvider, new FileDeleteOperationData(folders.Where(r => r.ValueKind == JsonValueKind.String).Select(r => r.GetString()), files.Where(r => r.ValueKind == JsonValueKind.String).Select(r => r.GetString()), tenantManager.GetCurrentTenant(), holdResult, ignoreException, immediately, headers)); var op = new FileDeleteOperation(ServiceProvider, op2, op1); - return QueueTask(authContext, op); + return QueueTask(userId, op); } - private ItemList QueueTask(AuthContext authContext, FileOperation op) + private ItemList QueueTask(Guid userId, FileOperation op) { tasks.QueueTask(op.RunJob, op.GetDistributedTask()); - return GetOperationResults(authContext); + return GetOperationResults(userId); } - private ItemList QueueTask(AuthContext authContext, FileOperation op) where T : FileOperationData + private ItemList QueueTask(Guid userId, FileOperation op) where T : FileOperationData { tasks.QueueTask(op.RunJob, op.GetDistributedTask()); - return GetOperationResults(authContext); - } - } - - public class FileOperationsManagerHelper - { - private FileOperationsManager FileOperationsManager { get; } - private AuthContext AuthContext { get; } - private TenantManager TenantManager { get; } - - public FileOperationsManagerHelper( - FileOperationsManager fileOperationsManager, - AuthContext authContext, - TenantManager tenantManager) - { - FileOperationsManager = fileOperationsManager; - AuthContext = authContext; - TenantManager = tenantManager; - } - - public ItemList GetOperationResults() - { - return FileOperationsManager.GetOperationResults(AuthContext); - } - - public ItemList CancelOperations() - { - return FileOperationsManager.CancelOperations(AuthContext); - } - - public ItemList MarkAsRead(IEnumerable folderIds, IEnumerable fileIds) - { - return FileOperationsManager.MarkAsRead(AuthContext, TenantManager, folderIds, fileIds); - } - - public ItemList Download(Dictionary folders, Dictionary files, IDictionary headers) - { - return FileOperationsManager.Download(AuthContext, TenantManager, folders, files, headers); - } - - public ItemList MoveOrCopy(IEnumerable folders, IEnumerable files, JsonElement destFolderId, bool copy, FileConflictResolveType resolveType, bool holdResult, IDictionary headers) - { - return FileOperationsManager.MoveOrCopy(AuthContext, TenantManager, folders, files, destFolderId, copy, resolveType, holdResult, headers); - } - - public ItemList Delete(List folders, List files, bool ignoreException, bool holdResult, bool immediately, IDictionary headers) - { - return FileOperationsManager.Delete(AuthContext, TenantManager, folders, files, ignoreException, holdResult, immediately, headers); - } - - public ItemList Delete(List folders, List files, bool ignoreException, bool holdResult, bool immediately, IDictionary headers) - { - return FileOperationsManager.Delete(AuthContext, TenantManager, folders, files, ignoreException, holdResult, immediately, headers); - } - - public ItemList DeleteFile(T file, bool ignoreException, bool holdResult, bool immediately, IDictionary headers) - { - return Delete(new List(), new List() { file }, ignoreException, holdResult, immediately, headers); - } - - public ItemList DeleteFolder(T folder, bool ignoreException, bool holdResult, bool immediately, IDictionary headers) - { - return Delete(new List() { folder }, new List(), ignoreException, holdResult, immediately, headers); + return GetOperationResults(userId); } } @@ -235,23 +171,19 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations { public static DIHelper AddFileOperationsManagerHelperService(this DIHelper services) { - if (services.TryAddScoped()) - { - services.TryAddSingleton(); - services.TryAddSingleton(); - services.TryAddScoped(); - services.TryAddScoped(); - services.TryAddScoped(); - services.TryAddScoped(); - services.TryAddScoped(); + services.TryAddSingleton(); + services.TryAddSingleton(); + services.TryAddScoped(); + services.TryAddScoped(); + services.TryAddScoped(); + services.TryAddScoped(); + services.TryAddScoped(); - return services - .AddAuthContextService() - .AddTenantManagerService() - ; - } - - return services; + return services + .AddAuthContextService() + .AddTenantManagerService() + ; + } } } \ No newline at end of file