DI: configuration

This commit is contained in:
pavelbannov 2019-10-10 13:59:22 +03:00
parent 42fe613918
commit 75285dfc69
18 changed files with 96 additions and 76 deletions

View File

@ -40,15 +40,18 @@ namespace ASC.Core.Common
private const string LOCALHOST = "localhost";
private UriBuilder _serverRoot;
private string _vpath;
private string _vpath;
public HttpContext HttpContext { get; set; }
public BaseCommonLinkUtility(CoreBaseSettings coreBaseSettings, TenantManager tenantManager) : this(null, coreBaseSettings, tenantManager)
public BaseCommonLinkUtility(CoreBaseSettings coreBaseSettings, CoreSettings coreSettings, TenantManager tenantManager) : this(null, coreBaseSettings, coreSettings, tenantManager)
{
}
public BaseCommonLinkUtility(IHttpContextAccessor httpContextAccessor, CoreBaseSettings coreBaseSettings, TenantManager tenantManager)
public BaseCommonLinkUtility(IHttpContextAccessor httpContextAccessor,
CoreBaseSettings coreBaseSettings,
CoreSettings coreSettings,
TenantManager tenantManager)
{
try
{
@ -67,6 +70,7 @@ namespace ASC.Core.Common
}
CoreBaseSettings = coreBaseSettings;
CoreSettings = coreSettings;
TenantManager = tenantManager;
}
@ -88,6 +92,7 @@ namespace ASC.Core.Common
}
public CoreBaseSettings CoreBaseSettings { get; }
public CoreSettings CoreSettings { get; }
public TenantManager TenantManager { get; }
private string serverRootPath;
@ -118,7 +123,7 @@ namespace ASC.Core.Common
{
// take values from db if localhost or no http context thread
var tenant = TenantManager.GetCurrentTenant();
result.Host = tenant.TenantDomain;
result.Host = tenant.GetTenantDomain(CoreSettings);
#if DEBUG
// for Visual Studio debug

View File

@ -189,7 +189,7 @@ namespace ASC.Core.Billing
if (tenant != null)
{
tenant.VersionChanged = DateTime.UtcNow;
tenantService.SaveTenant(tenant);
tenantService.SaveTenant(CoreSettings, tenant);
}
}
@ -420,7 +420,7 @@ client.GetPaymentUrls(null, products, !string.IsNullOrEmpty(affiliateId) ? affil
if (t != null)
{
// update tenant.LastModified to flush cache in documents
tenantService.SaveTenant(t);
tenantService.SaveTenant(CoreSettings, t);
}
}
return inserted;

View File

@ -131,9 +131,9 @@ namespace ASC.Core.Caching
return t;
}
public Tenant SaveTenant(Tenant tenant)
public Tenant SaveTenant(CoreSettings coreSettings, Tenant tenant)
{
tenant = service.SaveTenant(tenant);
tenant = service.SaveTenant(coreSettings, tenant);
cacheNotifyItem.Publish(new TenantCacheItem() { TenantId = tenant.TenantId }, CacheNotifyAction.InsertOrUpdate);
return tenant;
}

View File

@ -106,6 +106,18 @@ namespace ASC.Core
Configuration = configuration;
}
public string GetBaseDomain(string hostedRegion)
{
var baseHost = BaseDomain;
if (string.IsNullOrEmpty(hostedRegion) || string.IsNullOrEmpty(baseHost) || !baseHost.Contains("."))
{
return baseHost;
}
var subdomain = baseHost.Remove(baseHost.IndexOf('.') + 1);
return hostedRegion.StartsWith(subdomain) ? hostedRegion : (subdomain + hostedRegion.TrimStart('.'));
}
public void SaveSetting(string key, string value, int tenant = Tenant.DEFAULT_TENANT)
{
if (string.IsNullOrEmpty(key))
@ -186,12 +198,7 @@ namespace ASC.Core
public bool Standalone
{
get => CoreBaseSettings.Standalone;
}
public bool Personal
{
get => CoreBaseSettings.Personal;
get => CoreBaseSettings.Standalone;
}
public long PersonalMaxSpace(PersonalQuotaSettings personalQuotaSettings)

View File

@ -67,9 +67,9 @@ namespace ASC.Core
}
public TenantManager(
ITenantService tenantService,
IQuotaService quotaService,
ITariffService tariffService,
ITenantService tenantService,
IQuotaService quotaService,
ITariffService tariffService,
IHttpContextAccessor httpContextAccessor,
CoreBaseSettings coreBaseSettings,
CoreSettings coreSettings)
@ -140,7 +140,7 @@ namespace ASC.Core
public Tenant SaveTenant(Tenant tenant)
{
var newTenant = tenantService.SaveTenant(tenant);
var newTenant = tenantService.SaveTenant(CoreSettings, tenant);
if (CallContext.GetData(CURRENT_TENANT) is Tenant) SetCurrentTenant(newTenant);
return newTenant;

View File

@ -44,7 +44,7 @@ namespace ASC.Core
Tenant GetTenantForStandaloneWithoutAlias(string ip);
Tenant SaveTenant(Tenant tenant);
Tenant SaveTenant(CoreSettings coreSettings, Tenant tenant);
void RemoveTenant(int id, bool auto = false);

View File

@ -117,7 +117,7 @@ namespace ASC.Core.Data
.FirstOrDefault();
}
public Tenant SaveTenant(Tenant t)
public Tenant SaveTenant(CoreSettings coreSettings, Tenant t)
{
if (t == null) throw new ArgumentNullException("tenant");
@ -126,7 +126,7 @@ namespace ASC.Core.Data
{
if (!string.IsNullOrEmpty(t.MappedDomain))
{
var baseUrl = TenantUtil.GetBaseDomain(t.HostedRegion);
var baseUrl = coreSettings.GetBaseDomain(t.HostedRegion);
if (baseUrl != null && t.MappedDomain.EndsWith("." + baseUrl, StringComparison.InvariantCultureIgnoreCase))
{

View File

@ -49,7 +49,8 @@ namespace ASC.Core
private readonly IQuotaService quotaService;
private readonly ITariffService tariffService;
private readonly TenantManager clientTenantManager;
private readonly DbSettingsManager settingsManager;
private readonly DbSettingsManager settingsManager;
private readonly CoreSettings coreSettings;
public string Region
{
@ -63,16 +64,27 @@ namespace ASC.Core
private set;
}
public HostedSolution(IConfiguration configuration, TenantDomainValidator tenantDomainValidator, TimeZoneConverter timeZoneConverter, DbRegistry dbRegistry, ConnectionStringSettings connectionString)
public HostedSolution(
IConfiguration configuration,
TenantDomainValidator tenantDomainValidator,
TimeZoneConverter timeZoneConverter,
DbRegistry dbRegistry,
ConnectionStringSettings connectionString)
: this(configuration, tenantDomainValidator, timeZoneConverter, dbRegistry, connectionString, null)
{
}
public HostedSolution(IConfiguration configuration, TenantDomainValidator tenantDomainValidator, TimeZoneConverter timeZoneConverter, DbRegistry dbRegistry, ConnectionStringSettings connectionString, string region)
public HostedSolution(
IConfiguration configuration,
TenantDomainValidator tenantDomainValidator,
TimeZoneConverter timeZoneConverter,
DbRegistry dbRegistry,
ConnectionStringSettings connectionString,
string region)
{
tenantService = new DbTenantService(connectionString, dbRegistry, tenantDomainValidator, timeZoneConverter);
var baseSettings = new CoreBaseSettings(configuration);
var coreSettings = new CoreSettings(tenantService, baseSettings, configuration);
coreSettings = new CoreSettings(tenantService, baseSettings, configuration);
userService = new DbUserService(connectionString, dbRegistry);
quotaService = new DbQuotaService(connectionString, dbRegistry);
@ -144,7 +156,7 @@ namespace ASC.Core
Calls = ri.Calls
};
tenant = tenantService.SaveTenant(tenant);
tenant = tenantService.SaveTenant(coreSettings, tenant);
// create user
var user = new UserInfo
@ -163,14 +175,14 @@ namespace ASC.Core
// save tenant owner
tenant.OwnerId = user.ID;
tenant = tenantService.SaveTenant(tenant);
tenant = tenantService.SaveTenant(coreSettings, tenant);
settingsManager.SaveSettings(new TenantAnalyticsSettings() { Analytics = ri.Analytics }, tenant.TenantId);
}
public Tenant SaveTenant(Tenant tenant)
{
return tenantService.SaveTenant(tenant);
return tenantService.SaveTenant(coreSettings, tenant);
}
public void RemoveTenant(Tenant tenant)

View File

@ -39,10 +39,11 @@ namespace ASC.Core.Common.Notify
private const string TagName = "replyto";
public ReplyToTagProvider(TenantManager tenantManager, CoreBaseSettings coreBaseSettings)
public ReplyToTagProvider(TenantManager tenantManager, CoreBaseSettings coreBaseSettings, CoreSettings coreSettings)
{
TenantManager = tenantManager;
CoreBaseSettings = coreBaseSettings;
CoreSettings = coreSettings;
}
/// <summary>
@ -89,11 +90,12 @@ namespace ASC.Core.Common.Notify
// we use mapped domains for standalone portals because it is the only way to reach autoreply service
// mapped domains are no allowed for SAAS because of http(s) problem
var tenant = TenantManager.GetCurrentTenant();
return tenant.GetTenantDomain(CoreBaseSettings.Standalone);
return tenant.GetTenantDomain(CoreSettings, CoreBaseSettings.Standalone);
}
}
public TenantManager TenantManager { get; }
public CoreBaseSettings CoreBaseSettings { get; }
public CoreSettings CoreSettings { get; }
}
}

View File

@ -53,6 +53,7 @@ namespace ASC.Core.Notify.Signalr
private readonly string hub;
public TenantManager TenantManager { get; }
public CoreSettings CoreSettings { get; }
static SignalrServiceClient()
{
@ -60,10 +61,11 @@ namespace ASC.Core.Notify.Signalr
Log = LogManager.GetLogger("ASC");
}
public SignalrServiceClient(string hub, TenantManager tenantManager, IConfiguration configuration)
public SignalrServiceClient(string hub, TenantManager tenantManager, CoreSettings coreSettings, IConfiguration configuration)
{
this.hub = hub.Trim('/');
TenantManager = tenantManager;
CoreSettings = coreSettings;
CoreMachineKey = configuration["core:machinekey"];
Url = configuration["web:hub:internal"];
EnableSignalr = !string.IsNullOrEmpty(Url);
@ -99,7 +101,7 @@ namespace ASC.Core.Notify.Signalr
var isTenantUser = callerUserName == string.Empty;
var message = new MessageClass
{
UserName = isTenantUser ? tenant.GetTenantDomain() : callerUserName,
UserName = isTenantUser ? tenant.GetTenantDomain(CoreSettings) : callerUserName,
Text = messageText
};
@ -121,7 +123,7 @@ namespace ASC.Core.Notify.Signalr
var message = new MessageClass
{
UserName = tenant.GetTenantDomain(),
UserName = tenant.GetTenantDomain(CoreSettings),
Text = chatRoomName
};

View File

@ -75,8 +75,6 @@ namespace ASC.Core.Tenants
public DateTime VersionChanged { get; set; }
public string TenantDomain { get { return GetTenantDomain(); } }
public string HostedRegion { get; set; }
public string Name { get; set; }
@ -132,7 +130,7 @@ namespace ASC.Core.Tenants
public override string ToString()
{
return TenantDomain ?? TenantAlias;
return TenantAlias;
}
@ -155,9 +153,9 @@ namespace ASC.Core.Tenants
}
}
public string GetTenantDomain(bool allowMappedDomain = true)
public string GetTenantDomain(CoreSettings coreSettings, bool allowMappedDomain = true)
{
var baseHost = TenantUtil.GetBaseDomain(HostedRegion);
var baseHost = coreSettings.GetBaseDomain(HostedRegion);
if (string.IsNullOrEmpty(baseHost) && !string.IsNullOrEmpty(HostedRegion))
{

View File

@ -35,18 +35,6 @@ namespace ASC.Core.Tenants
public TenantUtil(TenantManager tenantManager)
{
TenantManager = tenantManager;
}
public static string GetBaseDomain(string hostedRegion)
{
var baseHost = CoreContext.Configuration.BaseDomain;
if (string.IsNullOrEmpty(hostedRegion) || string.IsNullOrEmpty(baseHost) || !baseHost.Contains("."))
{
return baseHost;
}
var subdomain = baseHost.Remove(baseHost.IndexOf('.') + 1);
return hostedRegion.StartsWith(subdomain) ? hostedRegion : (subdomain + hostedRegion.TrimStart('.'));
}

View File

@ -72,8 +72,8 @@ namespace ASC.Core.Common.Tests
t2.TrustedDomains.Add(null);
t2.TrustedDomains.Add("microsoft");
Service.SaveTenant(t1);
Service.SaveTenant(t2);
Service.SaveTenant(null, t1);
Service.SaveTenant(null, t2);
var tenants = Service.GetTenants(default);
CollectionAssert.Contains(tenants.ToList(), t1);
@ -83,7 +83,7 @@ namespace ASC.Core.Common.Tests
CompareTenants(t, t1);
t1.Version = 2;
Service.SaveTenant(t1);
Service.SaveTenant(null, t1);
t = Service.GetTenant(t1.TenantId);
CompareTenants(t, t1);
@ -98,7 +98,7 @@ namespace ASC.Core.Common.Tests
t1 = new Tenant("nct5nct5");
Service.SaveTenant(t1);
Service.SaveTenant(null, t1);
var user = new UserInfo
{
@ -135,7 +135,7 @@ namespace ASC.Core.Common.Tests
ValidateDomain("abcdef", null);
var t = new Tenant("nct5nct5") { MappedDomain = "nct5nct6" };
t = Service.SaveTenant(t);
t = Service.SaveTenant(null, t);
ValidateDomain("nct5nct5", typeof(TenantAlreadyExistsException));
ValidateDomain("NCT5NCT5", typeof(TenantAlreadyExistsException));
ValidateDomain("nct5nct6", typeof(TenantAlreadyExistsException));
@ -151,7 +151,7 @@ namespace ASC.Core.Common.Tests
}
t.MappedDomain = "abc.defg";
_ = Service.SaveTenant(t);
_ = Service.SaveTenant(null, t);
Service.RemoveTenant(Tenant);
}
@ -182,7 +182,7 @@ namespace ASC.Core.Common.Tests
Assert.AreEqual(t1.PaymentId, t2.PaymentId);
Assert.AreEqual(t1.Status, t2.Status);
Assert.AreEqual(t1.TenantAlias, t2.TenantAlias);
Assert.AreEqual(t1.TenantDomain, t2.TenantDomain);
Assert.AreEqual(t1.GetTenantDomain(null), t2.GetTenantDomain(null));
Assert.AreEqual(t1.TenantId, t2.TenantId);
Assert.AreEqual(t1.TrustedDomains, t2.TrustedDomains);
Assert.AreEqual(t1.TrustedDomainsType, t2.TrustedDomainsType);

View File

@ -58,10 +58,10 @@ namespace ASC.Core.Common.Tests
var regionSerice = new MultiRegionHostedSolution("site", null, null, null, null, null);
var t1 = regionSerice.GetTenant("teamlab.com", 50001);
Assert.AreEqual("alias_test2.teamlab.com", t1.TenantDomain);
Assert.AreEqual("alias_test2.teamlab.com", t1.GetTenantDomain(null));
var t2 = regionSerice.GetTenant("teamlab.eu.com", 50001);
Assert.AreEqual("tscherb.teamlab.eu.com", t2.TenantDomain);
Assert.AreEqual("tscherb.teamlab.eu.com", t2.GetTenantDomain(null));
}
}
}

View File

@ -135,6 +135,7 @@ namespace ASC.Api.Settings
public DisplayUserSettings DisplayUserSettings { get; }
public StatisticManager StatisticManager { get; }
public IPRestrictionsService IPRestrictionsService { get; }
public CoreConfiguration CoreConfiguration { get; }
public SettingsController(
IServiceProvider serviceProvider,
@ -184,7 +185,8 @@ namespace ASC.Api.Settings
BuildVersion buildVersion,
DisplayUserSettings displayUserSettings,
StatisticManager statisticManager,
IPRestrictionsService iPRestrictionsService)
IPRestrictionsService iPRestrictionsService,
CoreConfiguration coreConfiguration)
{
ServiceProvider = serviceProvider;
LogManager = logManager;
@ -234,6 +236,7 @@ namespace ASC.Api.Settings
DisplayUserSettings = displayUserSettings;
StatisticManager = statisticManager;
IPRestrictionsService = iPRestrictionsService;
CoreConfiguration = coreConfiguration;
}
[Read("")]
@ -261,7 +264,7 @@ namespace ASC.Api.Settings
[Read("quota")]
public QuotaWrapper GetQuotaUsed()
{
return new QuotaWrapper(Tenant, TenantExtra, TenantStatisticsProvider, AuthContext, PersonalQuotaSettings, WebItemManager);
return new QuotaWrapper(Tenant, CoreBaseSettings, CoreConfiguration, TenantExtra, TenantStatisticsProvider, AuthContext, PersonalQuotaSettings, WebItemManager);
}
[AllowAnonymous]

View File

@ -93,7 +93,7 @@ namespace ASC.Web.Studio.Core.Quota
}
public QuotaWrapper(Tenant tenant, TenantExtra tenantExtra, TenantStatisticsProvider tenantStatisticsProvider, AuthContext authContext, PersonalQuotaSettings personalQuotaSettings, WebItemManager webItemManager)
public QuotaWrapper(Tenant tenant, CoreBaseSettings coreBaseSettings, CoreConfiguration configuration, TenantExtra tenantExtra, TenantStatisticsProvider tenantStatisticsProvider, AuthContext authContext, PersonalQuotaSettings personalQuotaSettings, WebItemManager webItemManager)
{
TenantExtra = tenantExtra;
TenantStatisticsProvider = tenantStatisticsProvider;
@ -104,15 +104,15 @@ namespace ASC.Web.Studio.Core.Quota
StorageSize = (ulong)Math.Max(0, quota.MaxTotalSize);
UsedSize = (ulong)Math.Max(0, quotaRows.Sum(r => r.Counter));
MaxUsersCount = TenantExtra.GetTenantQuota().ActiveUsers;
UsersCount = CoreContext.Configuration.Personal ? 1 : TenantStatisticsProvider.GetUsersCount();
UsersCount = coreBaseSettings.Personal ? 1 : TenantStatisticsProvider.GetUsersCount();
StorageUsage = quotaRows
.Select(x => new QuotaUsage { Path = x.Path.TrimStart('/').TrimEnd('/'), Size = x.Counter, })
.ToList();
if (CoreContext.Configuration.Personal && SetupInfo.IsVisibleSettings("PersonalMaxSpace"))
if (coreBaseSettings.Personal && SetupInfo.IsVisibleSettings("PersonalMaxSpace"))
{
UserStorageSize = CoreContext.Configuration.PersonalMaxSpace(personalQuotaSettings);
UserStorageSize = configuration.PersonalMaxSpace(personalQuotaSettings);
var webItem = WebItemManager[WebItemManager.DocumentsProductID];
if (webItem.Context.SpaceUsageStatManager is IUserSpaceUsage spaceUsageManager)

View File

@ -101,9 +101,10 @@ namespace ASC.Web.Studio.Core.Notify
var tenantUtil = scope.ServiceProvider.GetService<TenantUtil>();
var commonLinkUtility = scope.ServiceProvider.GetService<CommonLinkUtility>();
var displayUserSettings = scope.ServiceProvider.GetService<DisplayUserSettings>();
var feedAggregateDataProvider = scope.ServiceProvider.GetService<FeedAggregateDataProvider>();
var feedAggregateDataProvider = scope.ServiceProvider.GetService<FeedAggregateDataProvider>();
var coreSettings = scope.ServiceProvider.GetService<CoreSettings>();
log.InfoFormat("Start send whats new in {0} ({1}).", tenant.TenantDomain, tenantid);
log.InfoFormat("Start send whats new in {0} ({1}).", tenant.GetTenantDomain(coreSettings), tenantid);
foreach (var user in userManager.GetUsers())
{
if (!studioNotifyHelper.IsSubscribedToNotify(user, Actions.SendWhatsNew))

View File

@ -65,7 +65,7 @@ namespace ASC.Web.Studio.Utility
Storage = 21
}
public class CommonLinkUtility: BaseCommonLinkUtility
public class CommonLinkUtility : BaseCommonLinkUtility
{
private static readonly Regex RegFilePathTrim = new Regex("/[^/]*\\.aspx", RegexOptions.IgnoreCase | RegexOptions.Compiled);
@ -74,25 +74,27 @@ namespace ASC.Web.Studio.Utility
public const string ParamName_UserUserID = "uid";
public CommonLinkUtility(
CoreBaseSettings coreBaseSettings,
TenantManager tenantManager,
UserManager userManager,
WebItemManagerSecurity webItemManagerSecurity,
CoreBaseSettings coreBaseSettings,
CoreSettings coreSettings,
TenantManager tenantManager,
UserManager userManager,
WebItemManagerSecurity webItemManagerSecurity,
WebItemManager webItemManager,
EmailValidationKeyProvider emailValidationKeyProvider) :
this(null, coreBaseSettings, tenantManager, userManager, webItemManagerSecurity, webItemManager, emailValidationKeyProvider)
EmailValidationKeyProvider emailValidationKeyProvider) :
this(null, coreBaseSettings, coreSettings, tenantManager, userManager, webItemManagerSecurity, webItemManager, emailValidationKeyProvider)
{
}
public CommonLinkUtility(
IHttpContextAccessor httpContextAccessor,
CoreBaseSettings coreBaseSettings,
CoreSettings coreSettings,
TenantManager tenantManager,
UserManager userManager,
WebItemManagerSecurity webItemManagerSecurity,
WebItemManager webItemManager,
EmailValidationKeyProvider emailValidationKeyProvider) :
base(httpContextAccessor, coreBaseSettings, tenantManager) => (UserManager, WebItemManagerSecurity, WebItemManager, EmailValidationKeyProvider) = (userManager, webItemManagerSecurity, webItemManager, emailValidationKeyProvider);
base(httpContextAccessor, coreBaseSettings, coreSettings, tenantManager) => (UserManager, WebItemManagerSecurity, WebItemManager, EmailValidationKeyProvider) = (userManager, webItemManagerSecurity, webItemManager, emailValidationKeyProvider);
public string Logout
{
@ -442,7 +444,7 @@ namespace ASC.Web.Studio.Utility
#region Help Centr
public string GetHelpLink(AdditionalWhiteLabelSettings AdditionalWhiteLabelSettings, bool inCurrentCulture = true)
public string GetHelpLink(AdditionalWhiteLabelSettings AdditionalWhiteLabelSettings, bool inCurrentCulture = true)
{
if (!AdditionalWhiteLabelSettings.Instance.HelpCenterEnabled)
return string.Empty;