diff --git a/products/ASC.Files/Server/ASC.Files.csproj b/products/ASC.Files/Server/ASC.Files.csproj
index 1a6e185386..b767574271 100644
--- a/products/ASC.Files/Server/ASC.Files.csproj
+++ b/products/ASC.Files/Server/ASC.Files.csproj
@@ -22,6 +22,7 @@
+
diff --git a/products/ASC.Files/Server/Core/Dao/Interfaces/IProviderDao.cs b/products/ASC.Files/Server/Core/Dao/Interfaces/IProviderDao.cs
index 2b2b1453c2..984dafc8e9 100644
--- a/products/ASC.Files/Server/Core/Dao/Interfaces/IProviderDao.cs
+++ b/products/ASC.Files/Server/Core/Dao/Interfaces/IProviderDao.cs
@@ -29,7 +29,7 @@ using System.Collections.Generic;
namespace ASC.Files.Core
{
- public interface IProviderDao : IDisposable
+ public interface IProviderDao
{
IProviderInfo GetProviderInfo(int linkId);
List GetProvidersInfo();
diff --git a/products/ASC.Files/Server/Helpers/Global.cs b/products/ASC.Files/Server/Helpers/Global.cs
index eb02065616..ef9ae45c8d 100644
--- a/products/ASC.Files/Server/Helpers/Global.cs
+++ b/products/ASC.Files/Server/Helpers/Global.cs
@@ -130,21 +130,13 @@ namespace ASC.Web.Files.Classes
Logger.Fatal("Could not resolve IDaoFactory instance. Using default DaoFactory instead.");
}
- if (!container.TryResolve(out IFileStorageService storageService))
- {
- storageService = new FileStorageServiceController();
- Logger.Fatal("Could not resolve IFileStorageService instance. Using default FileStorageServiceController instead.");
- }
-
DaoFactory = factory;
- FileStorageService = storageService;
SocketManager = new SocketManager();
}
catch (Exception error)
{
Logger.Fatal("Could not resolve IDaoFactory instance. Using default DaoFactory instead.", error);
DaoFactory = daoFactory;
- FileStorageService = new FileStorageServiceController();
}
Configuration = configuration;
@@ -199,7 +191,7 @@ namespace ASC.Web.Files.Classes
public ILog Logger { get; set; }
- public static IDaoFactory DaoFactory { get; private set; }
+ public IDaoFactory DaoFactory { get; private set; }
public EncryptedDataDao DaoEncryptedData
{
@@ -210,7 +202,7 @@ namespace ASC.Web.Files.Classes
public static SocketManager SocketManager { get; private set; }
- public static FileSecurity GetFilesSecurity()
+ public FileSecurity GetFilesSecurity()
{
return new FileSecurity(DaoFactory);
}
@@ -391,7 +383,7 @@ namespace ASC.Web.Files.Classes
internal static readonly IDictionary ShareFolderCache =
new ConcurrentDictionary(); /*Use SYNCHRONIZED for cross thread blocks*/
- public object FolderShare(IFolderDao folderDao)
+ public object GetFolderShare(IFolderDao folderDao)
{
if (CoreBaseSettings.Personal) return null;
if (IsOutsider) return null;
@@ -514,4 +506,62 @@ namespace ASC.Web.Files.Classes
get { return UserManager.GetUsers(AuthContext.CurrentAccount.ID).IsOutsider(UserManager); }
}
}
+
+ public class GlobalFolderHelper
+ {
+ public Global Global { get; }
+ public GlobalFolder GlobalFolder { get; }
+ public GlobalFolderHelper(Global global, GlobalFolder globalFolder)
+ {
+ Global = global;
+ GlobalFolder = globalFolder;
+ }
+
+ public object FolderProjects
+ {
+ get
+ {
+ return GlobalFolder.GetFolderProjects(Global.DaoFactory);
+ }
+ }
+ public object FolderCommon
+ {
+ get
+ {
+ return GlobalFolder.GetFolderCommon(Global.DaoFactory);
+ }
+ }
+
+ public object FolderMy
+ {
+ get
+ {
+ return GlobalFolder.GetFolderMy(Global.DaoFactory);
+ }
+ set
+ {
+ GlobalFolder.SetFolderMy(value);
+ }
+ }
+
+ public object FolderShare
+ {
+ get
+ {
+ return GlobalFolder.GetFolderShare(Global.DaoFactory.FolderDao);
+ }
+ }
+
+ public object FolderTrash
+ {
+ get
+ {
+ return GlobalFolder.GetFolderTrash(Global.DaoFactory.FolderDao);
+ }
+ set
+ {
+ GlobalFolder.SetFolderTrash(value);
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/products/ASC.Files/Server/Services/WCFService/FileStorageServiceController.cs b/products/ASC.Files/Server/Services/WCFService/FileStorageServiceController.cs
index 8c9e7ec849..36f5239ccf 100644
--- a/products/ASC.Files/Server/Services/WCFService/FileStorageServiceController.cs
+++ b/products/ASC.Files/Server/Services/WCFService/FileStorageServiceController.cs
@@ -34,10 +34,12 @@ using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Security;
-using System.Text;
using System.Web;
using System.Web.Http;
+using ASC.Common.Logging;
+using ASC.Core;
+using ASC.Core.Common;
using ASC.Core.Users;
using ASC.Data.Storage;
using ASC.ElasticSearch;
@@ -45,6 +47,7 @@ using ASC.FederatedLogin.LoginProviders;
using ASC.Files.Core;
using ASC.Files.Core.Security;
using ASC.MessagingSystem;
+using ASC.Web.Api.Routing;
using ASC.Web.Core.Files;
using ASC.Web.Core.Users;
using ASC.Web.Files.Classes;
@@ -56,156 +59,197 @@ using ASC.Web.Files.Services.NotifyService;
using ASC.Web.Files.Services.WCFService.FileOperations;
using ASC.Web.Files.ThirdPartyApp;
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 Newtonsoft.Json.Linq;
+using Microsoft.Extensions.Options;
using File = ASC.Files.Core.File;
using FileShare = ASC.Files.Core.Security.FileShare;
-using SecurityContext = ASC.Core.SecurityContext;
using UrlShortener = ASC.Web.Core.Utility.UrlShortener;
namespace ASC.Web.Files.Services.WCFService
{
- [Authorize]
- [FileExceptionFilter]
- public class FileStorageServiceController : ApiController, IFileStorageService
+ [DefaultRoute]
+ [ApiController]
+ public class FileStorageServiceController : ControllerBase, IFileStorageService
{
private static readonly FileOperationsManager fileOperations = new FileOperationsManager();
private static readonly FileEntrySerializer serializer = new FileEntrySerializer();
+ public Global Global { get; }
+ public GlobalStore GlobalStore { get; }
+ public GlobalFolderHelper GlobalFolderHelper { get; }
+ public FilesSettingsHelper FilesSettingsHelper { get; }
+ public AuthContext AuthContext { get; }
+ public UserManager UserManager { get; }
+ public FactoryIndexer FoldersIndexer { get; }
+ public FactoryIndexer FilesIndexer { get; }
+ public FileUtility FileUtility { get; }
+ public FilesLinkUtility FilesLinkUtility { get; }
+ public BaseCommonLinkUtility BaseCommonLinkUtility { get; }
+ public CoreBaseSettings CoreBaseSettings { get; }
+ public CustomNamingPeople CustomNamingPeople { get; }
+ public DisplayUserSettingsHelper DisplayUserSettingsHelper { get; }
+ public IHttpContextAccessor HttpContextAccessor { get; }
+ public ILog Logger { get; set; }
+
+ public FileStorageServiceController(
+ Global global,
+ GlobalStore globalStore,
+ GlobalFolderHelper globalFolderHelper,
+ FilesSettingsHelper filesSettingsHelper,
+ AuthContext authContext,
+ UserManager userManager,
+ FactoryIndexer foldersIndexer,
+ FactoryIndexer filesIndexer,
+ FileUtility fileUtility,
+ FilesLinkUtility filesLinkUtility,
+ BaseCommonLinkUtility baseCommonLinkUtility,
+ CoreBaseSettings coreBaseSettings,
+ CustomNamingPeople customNamingPeople,
+ DisplayUserSettingsHelper displayUserSettingsHelper,
+ IHttpContextAccessor httpContextAccessor,
+ IOptionsMonitor optionMonitor)
+ {
+ Global = global;
+ GlobalStore = globalStore;
+ GlobalFolderHelper = globalFolderHelper;
+ FilesSettingsHelper = filesSettingsHelper;
+ AuthContext = authContext;
+ UserManager = userManager;
+ FoldersIndexer = foldersIndexer;
+ FilesIndexer = filesIndexer;
+ FileUtility = fileUtility;
+ FilesLinkUtility = filesLinkUtility;
+ BaseCommonLinkUtility = baseCommonLinkUtility;
+ CoreBaseSettings = coreBaseSettings;
+ CustomNamingPeople = customNamingPeople;
+ DisplayUserSettingsHelper = displayUserSettingsHelper;
+ HttpContextAccessor = httpContextAccessor;
+ Logger = optionMonitor.Get("ASC.Files");
+ }
#region Folder Manager
- [ActionName("folders-folder"), HttpGet]
+ [Read("folders-folder")]
public Folder GetFolder(string folderId)
{
- using (var folderDao = GetFolderDao())
- {
- var folder = folderDao.GetFolder(folderId);
+ var folderDao = GetFolderDao();
+ var folder = folderDao.GetFolder(folderId);
- ErrorIf(folder == null, FilesCommonResource.ErrorMassage_FolderNotFound);
- ErrorIf(!FileSecurity.CanRead(folder), FilesCommonResource.ErrorMassage_SecurityException_ReadFolder);
+ ErrorIf(folder == null, FilesCommonResource.ErrorMassage_FolderNotFound);
+ ErrorIf(!FileSecurity.CanRead(folder), FilesCommonResource.ErrorMassage_SecurityException_ReadFolder);
- return folder;
- }
+ return folder;
}
- [ActionName("folders-subfolders"), HttpGet]
+ [Read("folders-subfolders")]
public ItemList GetFolders(string parentId)
{
- using (var folderDao = GetFolderDao())
- using (var fileDao = GetFileDao())
+ var folderDao = GetFolderDao();
+ var fileDao = GetFileDao();
+
+ try
{
- try
- {
- int total;
- var folders = EntryManager.GetEntries(folderDao, fileDao, folderDao.GetFolder(parentId), 0, 0, FilterType.FoldersOnly, false, Guid.Empty, string.Empty, false, false, new OrderBy(SortedByType.AZ, true), out total);
- return new ItemList(folders.OfType());
- }
- catch (Exception e)
- {
- throw GenerateException(e);
- }
+ var folders = EntryManager.GetEntries(folderDao, fileDao, folderDao.GetFolder(parentId), 0, 0, FilterType.FoldersOnly, false, Guid.Empty, string.Empty, false, false, new OrderBy(SortedByType.AZ, true), out var total);
+ return new ItemList(folders.OfType());
+ }
+ catch (Exception e)
+ {
+ throw GenerateException(e);
}
}
- [ActionName("folders-path"), HttpGet]
+ [Read("folders-path")]
public ItemList