DI: PathUtils
This commit is contained in:
parent
1e946b19b6
commit
3e0f946372
@ -38,9 +38,10 @@ namespace ASC.Data.Storage
|
||||
{
|
||||
public abstract class BaseStorage : IDataStore
|
||||
{
|
||||
public BaseStorage(TenantManager tenantManager)
|
||||
public BaseStorage(TenantManager tenantManager, PathUtils pathUtils)
|
||||
{
|
||||
TenantManager = tenantManager;
|
||||
PathUtils = pathUtils;
|
||||
}
|
||||
|
||||
#region IDataStore Members
|
||||
@ -200,6 +201,7 @@ namespace ASC.Data.Storage
|
||||
public virtual bool IsSupportChunking { get { return false; } }
|
||||
|
||||
public TenantManager TenantManager { get; }
|
||||
public PathUtils PathUtils { get; }
|
||||
|
||||
#endregion
|
||||
|
||||
|
@ -90,11 +90,13 @@ namespace ASC.Data.Storage.Configuration
|
||||
SettingsManager settingsManager,
|
||||
TenantManager tenantManager,
|
||||
BaseStorageSettingsListener baseStorageSettingsListener,
|
||||
StorageFactoryConfig storageFactoryConfig) :
|
||||
StorageFactoryConfig storageFactoryConfig,
|
||||
PathUtils pathUtils) :
|
||||
base(authContext, settingsManager, tenantManager)
|
||||
{
|
||||
BaseStorageSettingsListener = baseStorageSettingsListener;
|
||||
StorageFactoryConfig = storageFactoryConfig;
|
||||
PathUtils = pathUtils;
|
||||
}
|
||||
|
||||
public override ISettings GetDefault()
|
||||
@ -158,7 +160,7 @@ namespace ASC.Data.Storage.Configuration
|
||||
if (DataStoreConsumer.HandlerType == null) return null;
|
||||
|
||||
return dataStore = ((IDataStore)
|
||||
Activator.CreateInstance(DataStoreConsumer.HandlerType, TenantManager))
|
||||
Activator.CreateInstance(DataStoreConsumer.HandlerType, TenantManager, PathUtils))
|
||||
.Configure(TenantManager.GetCurrentTenant().TenantId.ToString(), null, null, DataStoreConsumer);
|
||||
}
|
||||
}
|
||||
@ -167,6 +169,7 @@ namespace ASC.Data.Storage.Configuration
|
||||
|
||||
public BaseStorageSettingsListener BaseStorageSettingsListener { get; }
|
||||
public StorageFactoryConfig StorageFactoryConfig { get; }
|
||||
public PathUtils PathUtils { get; }
|
||||
|
||||
private static readonly ICacheNotify<DataStoreCacheItem> Cache;
|
||||
}
|
||||
@ -185,8 +188,9 @@ namespace ASC.Data.Storage.Configuration
|
||||
SettingsManager settingsManager,
|
||||
TenantManager tenantManager,
|
||||
BaseStorageSettingsListener baseStorageSettingsListener,
|
||||
StorageFactoryConfig storageFactoryConfig) :
|
||||
base(authContext, settingsManager, tenantManager, baseStorageSettingsListener, storageFactoryConfig)
|
||||
StorageFactoryConfig storageFactoryConfig,
|
||||
PathUtils pathUtils) :
|
||||
base(authContext, settingsManager, tenantManager, baseStorageSettingsListener, storageFactoryConfig, pathUtils)
|
||||
{
|
||||
}
|
||||
|
||||
@ -210,8 +214,9 @@ namespace ASC.Data.Storage.Configuration
|
||||
SettingsManager settingsManager,
|
||||
TenantManager tenantManager,
|
||||
BaseStorageSettingsListener baseStorageSettingsListener,
|
||||
StorageFactoryConfig storageFactoryConfig) :
|
||||
base(authContext, settingsManager, tenantManager, baseStorageSettingsListener, storageFactoryConfig)
|
||||
StorageFactoryConfig storageFactoryConfig,
|
||||
PathUtils pathUtils) :
|
||||
base(authContext, settingsManager, tenantManager, baseStorageSettingsListener, storageFactoryConfig, pathUtils)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -49,10 +49,10 @@ namespace ASC.Data.Storage.DiscStorage
|
||||
_dataList = new DataList(moduleConfig);
|
||||
foreach (var domain in moduleConfig.Domain)
|
||||
{
|
||||
_mappedPaths.Add(domain.Name, new MappedPath(tenant, moduleConfig.AppendTenantId, domain.Path, handlerConfig.GetProperties()));
|
||||
_mappedPaths.Add(domain.Name, new MappedPath(PathUtils, tenant, moduleConfig.AppendTenantId, domain.Path, handlerConfig.GetProperties()));
|
||||
}
|
||||
//Add default
|
||||
_mappedPaths.Add(string.Empty, new MappedPath(tenant, moduleConfig.AppendTenantId, PathUtils.Normalize(moduleConfig.Path), handlerConfig.GetProperties()));
|
||||
_mappedPaths.Add(string.Empty, new MappedPath(PathUtils, tenant, moduleConfig.AppendTenantId, PathUtils.Normalize(moduleConfig.Path), handlerConfig.GetProperties()));
|
||||
|
||||
//Make expires
|
||||
_domainsExpires =
|
||||
@ -63,7 +63,7 @@ namespace ASC.Data.Storage.DiscStorage
|
||||
return this;
|
||||
}
|
||||
|
||||
public DiscDataStore(TenantManager tenantManager) : base(tenantManager)
|
||||
public DiscDataStore(TenantManager tenantManager, PathUtils pathUtils) : base(tenantManager, pathUtils)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -32,13 +32,14 @@ namespace ASC.Data.Storage.DiscStorage
|
||||
internal class MappedPath
|
||||
{
|
||||
public string PhysicalPath { get; set; }
|
||||
public PathUtils PathUtils { get; }
|
||||
|
||||
|
||||
private MappedPath()
|
||||
private MappedPath(PathUtils pathUtils)
|
||||
{
|
||||
PathUtils = pathUtils;
|
||||
}
|
||||
|
||||
public MappedPath(string tenant, bool appendTenant, string ppath, IDictionary<string, string> storageConfig)
|
||||
public MappedPath(PathUtils pathUtils, string tenant, bool appendTenant, string ppath, IDictionary<string, string> storageConfig) : this(pathUtils)
|
||||
{
|
||||
tenant = tenant.Trim('/');
|
||||
|
||||
@ -49,7 +50,7 @@ namespace ASC.Data.Storage.DiscStorage
|
||||
public MappedPath AppendDomain(string domain)
|
||||
{
|
||||
domain = domain.Replace('.', '_'); //Domain prep. Remove dots
|
||||
return new MappedPath
|
||||
return new MappedPath(PathUtils)
|
||||
{
|
||||
PhysicalPath = Path.Combine(PhysicalPath, PathUtils.Normalize(domain, true)),
|
||||
};
|
||||
|
@ -58,7 +58,7 @@ namespace ASC.Data.Storage.GoogleCloud
|
||||
|
||||
private bool _lowerCasing = true;
|
||||
|
||||
public GoogleCloudStorage(TenantManager tenantManager) : base(tenantManager)
|
||||
public GoogleCloudStorage(TenantManager tenantManager, PathUtils pathUtils) : base(tenantManager, pathUtils)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -30,15 +30,21 @@ using System.IO;
|
||||
using ASC.Common.DependencyInjection;
|
||||
using ASC.Common.Utils;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
|
||||
namespace ASC.Data.Storage
|
||||
{
|
||||
class PathUtils
|
||||
public class PathUtils
|
||||
{
|
||||
private static string StorageRoot { get; }
|
||||
static PathUtils()
|
||||
private string StorageRoot { get; }
|
||||
public IConfiguration Configuration { get; }
|
||||
public IWebHostEnvironment WebHostEnvironment { get; }
|
||||
|
||||
public PathUtils(IConfiguration configuration, IWebHostEnvironment webHostEnvironment)
|
||||
{
|
||||
StorageRoot = ConfigurationManager.AppSettings[Constants.STORAGE_ROOT_PARAM];
|
||||
Configuration = configuration;
|
||||
WebHostEnvironment = webHostEnvironment;
|
||||
StorageRoot = Configuration[Constants.STORAGE_ROOT_PARAM];
|
||||
}
|
||||
|
||||
public static string Normalize(string path, bool addTailingSeparator = false)
|
||||
@ -52,7 +58,7 @@ namespace ASC.Data.Storage
|
||||
return addTailingSeparator && 0 < path.Length ? path + Path.DirectorySeparatorChar : path;
|
||||
}
|
||||
|
||||
public static string ResolveVirtualPath(string module, string domain)
|
||||
public string ResolveVirtualPath(string module, string domain)
|
||||
{
|
||||
var url = string.Format("~/storage/{0}/{1}/",
|
||||
module,
|
||||
@ -60,21 +66,19 @@ namespace ASC.Data.Storage
|
||||
return ResolveVirtualPath(url);
|
||||
}
|
||||
|
||||
//TODO
|
||||
public static string ResolveVirtualPath(string virtPath, bool addTrailingSlash = true)
|
||||
public string ResolveVirtualPath(string virtPath, bool addTrailingSlash = true)
|
||||
{
|
||||
if (virtPath == null)
|
||||
{
|
||||
virtPath = "";
|
||||
}
|
||||
|
||||
var webHostEnvironment = CommonServiceProvider.GetService<IWebHostEnvironment>();
|
||||
if (virtPath.StartsWith("~") && !Uri.IsWellFormedUriString(virtPath, UriKind.Absolute))
|
||||
{
|
||||
var rootPath = "/";
|
||||
if (!string.IsNullOrEmpty(webHostEnvironment.WebRootPath) && webHostEnvironment.WebRootPath.Length > 1)
|
||||
if (!string.IsNullOrEmpty(WebHostEnvironment.WebRootPath) && WebHostEnvironment.WebRootPath.Length > 1)
|
||||
{
|
||||
rootPath = webHostEnvironment.WebRootPath.Trim('/');
|
||||
rootPath = WebHostEnvironment.WebRootPath.Trim('/');
|
||||
}
|
||||
virtPath = virtPath.Replace("~", rootPath);
|
||||
}
|
||||
@ -89,12 +93,10 @@ namespace ASC.Data.Storage
|
||||
return virtPath.Replace("//", "/");
|
||||
}
|
||||
|
||||
public static string ResolvePhysicalPath(string physPath, IDictionary<string, string> storageConfig)
|
||||
public string ResolvePhysicalPath(string physPath, IDictionary<string, string> storageConfig)
|
||||
{
|
||||
physPath = Normalize(physPath, false).TrimStart('~');
|
||||
|
||||
var webHostEnvironment = CommonServiceProvider.GetService<IWebHostEnvironment>();
|
||||
|
||||
if (physPath.Contains(Constants.STORAGE_ROOT_PARAM))
|
||||
{
|
||||
physPath = physPath.Replace(Constants.STORAGE_ROOT_PARAM, StorageRoot ?? storageConfig[Constants.STORAGE_ROOT_PARAM]);
|
||||
@ -102,7 +104,7 @@ namespace ASC.Data.Storage
|
||||
|
||||
if (!Path.IsPathRooted(physPath))
|
||||
{
|
||||
physPath = Path.GetFullPath(Path.Combine(webHostEnvironment.ContentRootPath, physPath.Trim(Path.DirectorySeparatorChar)));
|
||||
physPath = Path.GetFullPath(Path.Combine(WebHostEnvironment.ContentRootPath, physPath.Trim(Path.DirectorySeparatorChar)));
|
||||
}
|
||||
return physPath;
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ namespace ASC.Data.Storage.RackspaceCloud
|
||||
|
||||
private static readonly ILog _logger = LogManager.GetLogger("ASC.Data.Storage.Rackspace.RackspaceCloudStorage");
|
||||
|
||||
public RackspaceCloudStorage(TenantManager tenantManager) : base(tenantManager)
|
||||
public RackspaceCloudStorage(TenantManager tenantManager, PathUtils pathUtils) : base(tenantManager, pathUtils)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -63,7 +63,7 @@ namespace ASC.Data.Storage.S3
|
||||
private string _distributionId = string.Empty;
|
||||
private string _subDir = string.Empty;
|
||||
|
||||
public S3Storage(TenantManager tenantManager) : base(tenantManager)
|
||||
public S3Storage(TenantManager tenantManager, PathUtils pathUtils) : base(tenantManager, pathUtils)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -32,7 +32,9 @@ using ASC.Core;
|
||||
using ASC.Core.Common.Configuration;
|
||||
using ASC.Data.Storage.Configuration;
|
||||
using ASC.Data.Storage.DiscStorage;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.Routing;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace ASC.Data.Storage
|
||||
@ -90,6 +92,7 @@ namespace ASC.Data.Storage
|
||||
//}
|
||||
|
||||
var section = builder.ServiceProvider.GetService<Configuration.Storage>();
|
||||
var pathUtils = builder.ServiceProvider.GetService<PathUtils>();
|
||||
if (section != null)
|
||||
{
|
||||
//old scheme
|
||||
@ -101,8 +104,8 @@ namespace ASC.Data.Storage
|
||||
{
|
||||
if (m.Path.Contains(Constants.STORAGE_ROOT_PARAM))
|
||||
builder.RegisterDiscDataHandler(
|
||||
PathUtils.ResolveVirtualPath(m.VirtualPath),
|
||||
PathUtils.ResolvePhysicalPath(m.Path, props),
|
||||
pathUtils.ResolveVirtualPath(m.VirtualPath),
|
||||
pathUtils.ResolvePhysicalPath(m.Path, props),
|
||||
m.Public);
|
||||
|
||||
if (m.Domain != null)
|
||||
@ -110,8 +113,8 @@ namespace ASC.Data.Storage
|
||||
foreach (var d in m.Domain.Where(d => (d.Type == "disc" || string.IsNullOrEmpty(d.Type)) && d.Path.Contains(Constants.STORAGE_ROOT_PARAM)))
|
||||
{
|
||||
builder.RegisterDiscDataHandler(
|
||||
PathUtils.ResolveVirtualPath(d.VirtualPath),
|
||||
PathUtils.ResolvePhysicalPath(d.Path, props));
|
||||
pathUtils.ResolveVirtualPath(d.VirtualPath),
|
||||
pathUtils.ResolvePhysicalPath(d.Path, props));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -35,8 +35,10 @@ using ASC.Common.Web;
|
||||
using ASC.Core;
|
||||
using ASC.Security.Cryptography;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Routing;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace ASC.Data.Storage.DiscStorage
|
||||
@ -150,7 +152,8 @@ namespace ASC.Data.Storage.DiscStorage
|
||||
{
|
||||
public static IEndpointRouteBuilder RegisterStorageHandler(this IEndpointRouteBuilder builder, string module, string domain, bool publicRoute = false)
|
||||
{
|
||||
var virtPath = PathUtils.ResolveVirtualPath(module, domain);
|
||||
var pathUtils = new PathUtils(builder.ServiceProvider.GetService<IConfiguration>(), builder.ServiceProvider.GetService<IWebHostEnvironment>());
|
||||
var virtPath = pathUtils.ResolveVirtualPath(module, domain);
|
||||
virtPath = virtPath.TrimStart('/');
|
||||
|
||||
var handler = new StorageHandler(builder.ServiceProvider, string.Empty, module, domain, !publicRoute);
|
||||
|
@ -220,6 +220,7 @@ namespace ASC.People
|
||||
.AddSingleton<CoreBaseSettings>()
|
||||
.AddScoped<SubscriptionManager>()
|
||||
.AddScoped<IPSecurity.IPSecurity>()
|
||||
.AddSingleton<PathUtils>()
|
||||
.AddScoped(typeof(IRecipientProvider), typeof(RecipientProviderImpl))
|
||||
.AddSingleton(typeof(IRoleProvider), typeof(RoleProvider))
|
||||
.AddScoped(typeof(IPermissionResolver), typeof(PermissionResolver))
|
||||
|
Loading…
Reference in New Issue
Block a user