From 581a5a475130079329fb8368503196aafff27f23 Mon Sep 17 00:00:00 2001 From: SuhorukovAnton <62381554+SuhorukovAnton@users.noreply.github.com> Date: Tue, 28 Jul 2020 10:35:17 +0300 Subject: [PATCH 01/18] scope: first version --- .../ASC.Data.Backup/Core/NotifyHelper.cs | 55 +++++++++++-------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/common/services/ASC.Data.Backup/Core/NotifyHelper.cs b/common/services/ASC.Data.Backup/Core/NotifyHelper.cs index 80a86d5546..8b6ca0507c 100644 --- a/common/services/ASC.Data.Backup/Core/NotifyHelper.cs +++ b/common/services/ASC.Data.Backup/Core/NotifyHelper.cs @@ -69,33 +69,27 @@ namespace ASC.Data.Backup public void SendAboutBackupCompleted(Guid userId) { using var scope = ServiceProvider.CreateScope(); - var userManager = scope.ServiceProvider.GetService(); - var studioNotifyHelper = scope.ServiceProvider.GetService(); - var notifySource = scope.ServiceProvider.GetService(); - var displayUserSettingsHelper = scope.ServiceProvider.GetService(); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(notifySource, scope); + var scopeClass = scope.ServiceProvider.GetService(); + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifySource, scope); client.SendNoticeToAsync( Actions.BackupCreated, - new[] { studioNotifyHelper.ToRecipient(userId) }, + new[] { scopeClass.StudioNotifyHelper.ToRecipient(userId) }, new[] { StudioNotifyService.EMailSenderName }, - new TagValue(Tags.OwnerName, userManager.GetUsers(userId).DisplayUserName(displayUserSettingsHelper))); + new TagValue(Tags.OwnerName, scopeClass.UserManager.GetUsers(userId).DisplayUserName(scopeClass.DisplayUserSettingsHelper))); } public void SendAboutRestoreStarted(Tenant tenant, bool notifyAllUsers) { using var scope = ServiceProvider.CreateScope(); - var userManager = scope.ServiceProvider.GetService(); - var studioNotifyHelper = scope.ServiceProvider.GetService(); - var notifySource = scope.ServiceProvider.GetService(); - var displayUserSettingsHelper = scope.ServiceProvider.GetService(); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(notifySource, scope); + var scopeClass = scope.ServiceProvider.GetService(); + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifySource, scope); - var owner = userManager.GetUsers(tenant.OwnerId); + var owner = scopeClass.UserManager.GetUsers(tenant.OwnerId); var users = notifyAllUsers - ? studioNotifyHelper.RecipientFromEmail(userManager.GetUsers(EmployeeStatus.Active).Where(r => r.ActivationStatus == EmployeeActivationStatus.Activated).Select(u => u.Email).ToList(), false) - : owner.ActivationStatus == EmployeeActivationStatus.Activated ? studioNotifyHelper.RecipientFromEmail(owner.Email, false) : new IDirectRecipient[0]; + ? scopeClass.StudioNotifyHelper.RecipientFromEmail(scopeClass.UserManager.GetUsers(EmployeeStatus.Active).Where(r => r.ActivationStatus == EmployeeActivationStatus.Activated).Select(u => u.Email).ToList(), false) + : owner.ActivationStatus == EmployeeActivationStatus.Activated ? scopeClass.StudioNotifyHelper.RecipientFromEmail(owner.Email, false) : new IDirectRecipient[0]; client.SendNoticeToAsync( Actions.RestoreStarted, @@ -106,24 +100,21 @@ namespace ASC.Data.Backup public void SendAboutRestoreCompleted(Tenant tenant, bool notifyAllUsers) { using var scope = ServiceProvider.CreateScope(); - var userManager = scope.ServiceProvider.GetService(); - var studioNotifyHelper = scope.ServiceProvider.GetService(); - var notifySource = scope.ServiceProvider.GetService(); - var displayUserSettingsHelper = scope.ServiceProvider.GetService(); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(notifySource, scope); + var scopeClass = scope.ServiceProvider.GetService(); + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifySource, scope); - var owner = userManager.GetUsers(tenant.OwnerId); + var owner = scopeClass.UserManager.GetUsers(tenant.OwnerId); var users = notifyAllUsers - ? userManager.GetUsers(EmployeeStatus.Active).Select(u => studioNotifyHelper.ToRecipient(u.ID)).ToArray() - : new[] { studioNotifyHelper.ToRecipient(owner.ID) }; + ? scopeClass.UserManager.GetUsers(EmployeeStatus.Active).Select(u => scopeClass.StudioNotifyHelper.ToRecipient(u.ID)).ToArray() + : new[] { scopeClass.StudioNotifyHelper.ToRecipient(owner.ID) }; client.SendNoticeToAsync( Actions.RestoreCompleted, users, new[] { StudioNotifyService.EMailSenderName }, - new TagValue(Tags.OwnerName, owner.DisplayUserName(displayUserSettingsHelper))); + new TagValue(Tags.OwnerName, owner.DisplayUserName(scopeClass.DisplayUserSettingsHelper))); } private void MigrationNotify(Tenant tenant, INotifyAction action, string region, string url, bool notify) @@ -148,6 +139,22 @@ namespace ASC.Data.Backup new TagValue(Tags.RegionName, TransferResourceHelper.GetRegionDescription(region)), new TagValue(Tags.PortalUrl, url)); } + } + + class Scope + { + internal UserManager UserManager { get; } + internal StudioNotifyHelper StudioNotifyHelper { get; } + internal StudioNotifySource StudioNotifySource { get; } + internal DisplayUserSettingsHelper DisplayUserSettingsHelper { get; } + + public Scope(UserManager userManager, StudioNotifyHelper studioNotifyHelper, StudioNotifySource studioNotifySource, DisplayUserSettingsHelper displayUserSettingsHelper) + { + UserManager = userManager; + StudioNotifyHelper = studioNotifyHelper; + StudioNotifySource = studioNotifySource; + DisplayUserSettingsHelper = displayUserSettingsHelper; + } } } public static class NotifyHelperExtension From 830d0d74ec968447155cdaf054a96f44d79733ed Mon Sep 17 00:00:00 2001 From: SuhorukovAnton <62381554+SuhorukovAnton@users.noreply.github.com> Date: Tue, 28 Jul 2020 17:24:21 +0300 Subject: [PATCH 02/18] scope: refactoring --- .../Configuration/AmiPublicDnsSyncService.cs | 23 +++++-- common/ASC.Core.Common/Context/WorkContext.cs | 34 +++++++---- common/ASC.Core.Common/Notify/Context.cs | 19 ++++-- .../ASC.Core.Common/Notify/EmailSenderSink.cs | 26 +++++--- .../Notify/JabberSenderSink.cs | 19 ++++-- .../Notify/Senders/AWSSender.cs | 24 +++++--- .../Notify/Senders/SmtpSender.cs | 61 +++++++++++-------- 7 files changed, 141 insertions(+), 65 deletions(-) diff --git a/common/ASC.Core.Common/Configuration/AmiPublicDnsSyncService.cs b/common/ASC.Core.Common/Configuration/AmiPublicDnsSyncService.cs index 6929b6c72e..6202a26d1b 100644 --- a/common/ASC.Core.Common/Configuration/AmiPublicDnsSyncService.cs +++ b/common/ASC.Core.Common/Configuration/AmiPublicDnsSyncService.cs @@ -46,22 +46,21 @@ namespace ASC.Core.Configuration { } - + public static void Synchronize() { using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - var coreBaseSettings = scope.ServiceProvider.GetService(); - if (coreBaseSettings.Standalone) + var ScopeClass = scope.ServiceProvider.GetService(); + if (ScopeClass.CoreBaseSettings.Standalone) { - var tenants = tenantManager.GetTenants(false).Where(t => MappedDomainNotSettedByUser(t.MappedDomain)); + var tenants = ScopeClass.TenantManager.GetTenants(false).Where(t => MappedDomainNotSettedByUser(t.MappedDomain)); if (tenants.Any()) { var dnsname = GetAmiPublicDnsName(); foreach (var tenant in tenants.Where(t => !string.IsNullOrEmpty(dnsname) && t.MappedDomain != dnsname)) { tenant.MappedDomain = dnsname; - tenantManager.SaveTenant(tenant); + ScopeClass.TenantManager.SaveTenant(tenant); } } } @@ -92,5 +91,17 @@ namespace ASC.Core.Configuration } return null; } + + class Scope + { + internal TenantManager TenantManager { get; } + internal CoreBaseSettings CoreBaseSettings { get; } + + public Scope(TenantManager tenantManager, CoreBaseSettings coreBaseSettings) + { + TenantManager = tenantManager; + CoreBaseSettings = coreBaseSettings; + } + } } } diff --git a/common/ASC.Core.Common/Context/WorkContext.cs b/common/ASC.Core.Common/Context/WorkContext.cs index 136bde4b72..c39a64eac2 100644 --- a/common/ASC.Core.Common/Context/WorkContext.cs +++ b/common/ASC.Core.Common/Context/WorkContext.cs @@ -88,7 +88,6 @@ namespace ASC.Core } } - public static void NotifyStartUp(IServiceProvider serviceProvider) { if (notifyStarted) return; @@ -96,16 +95,14 @@ namespace ASC.Core { if (notifyStarted) return; - var configuration = serviceProvider.GetService(); - var cacheNotify = serviceProvider.GetService>(); - var options = serviceProvider.GetService>(); + var scope = serviceProvider.GetService(); NotifyContext = new NotifyContext(serviceProvider); - INotifySender jabberSender = new NotifyServiceSender(cacheNotify); - INotifySender emailSender = new NotifyServiceSender(cacheNotify); + INotifySender jabberSender = new NotifyServiceSender(scope.CacheNotify); + INotifySender emailSender = new NotifyServiceSender(scope.CacheNotify); - var postman = configuration["core:notify:postman"]; + var postman = scope.Configuration["core:notify:postman"]; if ("ases".Equals(postman, StringComparison.InvariantCultureIgnoreCase) || "smtp".Equals(postman, StringComparison.InvariantCultureIgnoreCase)) { @@ -117,14 +114,14 @@ namespace ASC.Core }; if ("ases".Equals(postman, StringComparison.InvariantCultureIgnoreCase)) { - emailSender = new AWSSender(serviceProvider, options); - properties["accessKey"] = configuration["ses:accessKey"]; - properties["secretKey"] = configuration["ses:secretKey"]; - properties["refreshTimeout"] = configuration["ses:refreshTimeout"]; + emailSender = new AWSSender(serviceProvider, scope.Options); + properties["accessKey"] = scope.Configuration["ses:accessKey"]; + properties["secretKey"] = scope.Configuration["ses:secretKey"]; + properties["refreshTimeout"] = scope.Configuration["ses:refreshTimeout"]; } else { - emailSender = new SmtpSender(serviceProvider, options); + emailSender = new SmtpSender(serviceProvider, scope.Options); } emailSender.Init(properties); } @@ -161,5 +158,18 @@ namespace ASC.Core tenantManager.SetCurrentTenant(tenant); } } + class Scope + { + internal IConfiguration Configuration { get; } + internal ICacheNotify CacheNotify { get; } + internal IOptionsMonitor Options { get; } + + public Scope(IConfiguration configuration, ICacheNotify cacheNotify, IOptionsMonitor options) + { + Configuration = configuration; + CacheNotify = cacheNotify; + Options = options; + } + } } } \ No newline at end of file diff --git a/common/ASC.Core.Common/Notify/Context.cs b/common/ASC.Core.Common/Notify/Context.cs index f5da835df1..34047dc7d1 100644 --- a/common/ASC.Core.Common/Notify/Context.cs +++ b/common/ASC.Core.Common/Notify/Context.cs @@ -72,10 +72,10 @@ namespace ASC.Notify public Context(IServiceProvider serviceProvider) { - var options = serviceProvider.GetService>(); - Log = options.CurrentValue; + var scope = serviceProvider.GetService(); + Log = scope.Options.CurrentValue; NotifyEngine = new NotifyEngine(this, serviceProvider); - DispatchEngine = new DispatchEngine(this, serviceProvider.GetService(), options); + DispatchEngine = new DispatchEngine(this, scope.Configuration, scope.Options); } @@ -112,7 +112,6 @@ namespace ASC.Notify return client; } - private void ValidateNotifySource(INotifySource source) { foreach (var a in source.GetActionProvider().GetActions()) @@ -139,5 +138,17 @@ namespace ASC.Notify } } } + + class Scope + { + internal IOptionsMonitor Options { get; } + internal IConfiguration Configuration { get; } + + public Scope(IOptionsMonitor options, IConfiguration configuration) + { + Options = options; + Configuration = configuration; + } + } } } diff --git a/common/ASC.Core.Common/Notify/EmailSenderSink.cs b/common/ASC.Core.Common/Notify/EmailSenderSink.cs index c5a5851d46..e7673bced5 100644 --- a/common/ASC.Core.Common/Notify/EmailSenderSink.cs +++ b/common/ASC.Core.Common/Notify/EmailSenderSink.cs @@ -80,7 +80,6 @@ namespace ASC.Core.Notify } } - private NotifyMessage CreateNotifyMessage(INoticeMessage message) { var m = new NotifyMessage @@ -93,15 +92,14 @@ namespace ASC.Core.Notify }; using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - var configuration = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); - var tenant = tenantManager.GetCurrentTenant(false); + var tenant = scopeClass.TenantManager.GetCurrentTenant(false); m.Tenant = tenant == null ? Tenant.DEFAULT_TENANT : tenant.TenantId; - var from = MailAddressUtils.Create(configuration.SmtpSettings.SenderAddress, configuration.SmtpSettings.SenderDisplayName); + var from = MailAddressUtils.Create(scopeClass.CoreConfiguration.SmtpSettings.SenderAddress, scopeClass.CoreConfiguration.SmtpSettings.SenderDisplayName); var fromTag = message.Arguments.FirstOrDefault(x => x.Tag.Equals("MessageFrom")); - if ((configuration.SmtpSettings.IsDefaultSettings || string.IsNullOrEmpty(configuration.SmtpSettings.SenderDisplayName)) && + if ((scopeClass.CoreConfiguration.SmtpSettings.IsDefaultSettings || string.IsNullOrEmpty(scopeClass.CoreConfiguration.SmtpSettings.SenderDisplayName)) && fromTag != null && fromTag.Value != null) { try @@ -128,7 +126,7 @@ namespace ASC.Core.Notify } catch (Exception e) { - ServiceProvider.GetService>().Get("ASC.Notify").Error("Error creating reply to tag for: " + replyTag.Value, e); + scopeClass.Options.Get("ASC.Notify").Error("Error creating reply to tag for: " + replyTag.Value, e); } } @@ -146,5 +144,19 @@ namespace ASC.Core.Notify return m; } + + class Scope + { + internal TenantManager TenantManager { get; } + internal CoreConfiguration CoreConfiguration { get; } + internal IOptionsMonitor Options { get; } + + public Scope(TenantManager tenantManager, CoreConfiguration coreConfiguration, IOptionsMonitor options) + { + TenantManager = tenantManager; + CoreConfiguration = coreConfiguration; + Options = options; + } + } } } \ No newline at end of file diff --git a/common/ASC.Core.Common/Notify/JabberSenderSink.cs b/common/ASC.Core.Common/Notify/JabberSenderSink.cs index a7f3fef9fb..b0f877e01e 100644 --- a/common/ASC.Core.Common/Notify/JabberSenderSink.cs +++ b/common/ASC.Core.Common/Notify/JabberSenderSink.cs @@ -52,10 +52,9 @@ namespace ASC.Core.Notify try { using var scope = ServiceProvider.CreateScope(); - var userManager = scope.ServiceProvider.GetService(); - var tenantManager = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var result = SendResult.OK; - var username = userManager.GetUsers(new Guid(message.Recipient.ID)).UserName; + var username = scopeClass.UserManager.GetUsers(new Guid(message.Recipient.ID)).UserName; if (string.IsNullOrEmpty(username)) { result = SendResult.IncorrectRecipient; @@ -72,7 +71,7 @@ namespace ASC.Core.Notify CreationDate = DateTime.UtcNow.Ticks, }; - var tenant = tenantManager.GetCurrentTenant(false); + var tenant = scopeClass.TenantManager.GetCurrentTenant(false); m.Tenant = tenant == null ? Tenant.DEFAULT_TENANT : tenant.TenantId; sender.Send(m); @@ -84,5 +83,17 @@ namespace ASC.Core.Notify return new SendResponse(message, senderName, ex); } } + + class Scope + { + internal UserManager UserManager { get; } + internal TenantManager TenantManager { get; } + + public Scope(UserManager userManager, TenantManager tenantManager) + { + TenantManager = tenantManager; + UserManager = userManager; + } + } } } diff --git a/common/ASC.Core.Common/Notify/Senders/AWSSender.cs b/common/ASC.Core.Common/Notify/Senders/AWSSender.cs index 3d8f8bcd84..cf9c4394a8 100644 --- a/common/ASC.Core.Common/Notify/Senders/AWSSender.cs +++ b/common/ASC.Core.Common/Notify/Senders/AWSSender.cs @@ -71,7 +71,6 @@ namespace ASC.Core.Notify.Senders lastRefresh = DateTime.UtcNow - refreshTimeout; //set to refresh on first send } - public override NoticeSendResult Send(NotifyMessage m) { NoticeSendResult result; @@ -81,15 +80,14 @@ namespace ASC.Core.Notify.Senders { Log.DebugFormat("Tenant: {0}, To: {1}", m.Tenant, m.To); using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - tenantManager.SetCurrentTenant(m.Tenant); - var configuration = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); + scopeClass.TenantManager.SetCurrentTenant(m.Tenant); - if (!configuration.SmtpSettings.IsDefaultSettings) + if (!scopeClass.CoreConfiguration.SmtpSettings.IsDefaultSettings) { - _useCoreSettings = true; + UseCoreSettings = true; result = base.Send(m); - _useCoreSettings = false; + UseCoreSettings = false; } else { @@ -229,6 +227,18 @@ namespace ASC.Core.Notify.Senders { return quota == null || (DateTime.UtcNow - lastRefresh) > refreshTimeout; } + + class Scope + { + internal TenantManager TenantManager { get; } + internal CoreConfiguration CoreConfiguration { get; } + + public Scope(TenantManager tenantManager, CoreConfiguration coreConfiguration) + { + TenantManager = tenantManager; + CoreConfiguration = coreConfiguration; + } + } } public static class AWSSenderExtension diff --git a/common/ASC.Core.Common/Notify/Senders/SmtpSender.cs b/common/ASC.Core.Common/Notify/Senders/SmtpSender.cs index 943a340aab..fba38585bf 100644 --- a/common/ASC.Core.Common/Notify/Senders/SmtpSender.cs +++ b/common/ASC.Core.Common/Notify/Senders/SmtpSender.cs @@ -61,11 +61,11 @@ namespace ASC.Core.Notify.Senders public IConfiguration Configuration { get; } public IServiceProvider ServiceProvider { get; } - private string _host; - private int _port; - private bool _ssl; - private ICredentials _credentials; - protected bool _useCoreSettings; + private string Host { get; set; } + private int Port { get; set; } + private bool Ssl { get; set; } + private ICredentials Credentials { get; set; } + protected bool UseCoreSettings { get; set; } const int NETWORK_TIMEOUT = 30000; public SmtpSender( @@ -81,16 +81,16 @@ namespace ASC.Core.Notify.Senders { if (properties.ContainsKey("useCoreSettings") && bool.Parse(properties["useCoreSettings"])) { - _useCoreSettings = true; + UseCoreSettings = true; } else { - _host = properties["host"]; - _port = properties.ContainsKey("port") ? int.Parse(properties["port"]) : 25; - _ssl = properties.ContainsKey("enableSsl") && bool.Parse(properties["enableSsl"]); + Host = properties["host"]; + Port = properties.ContainsKey("port") ? int.Parse(properties["port"]) : 25; + Ssl = properties.ContainsKey("enableSsl") && bool.Parse(properties["enableSsl"]); if (properties.ContainsKey("userName")) { - _credentials = new NetworkCredential( + Credentials = new NetworkCredential( properties["userName"], properties["password"]); } @@ -101,10 +101,10 @@ namespace ASC.Core.Notify.Senders { var s = configuration.SmtpSettings; - _host = s.Host; - _port = s.Port; - _ssl = s.EnableSSL; - _credentials = !string.IsNullOrEmpty(s.CredentialsUserName) + Host = s.Host; + Port = s.Port; + Ssl = s.EnableSSL; + Credentials = !string.IsNullOrEmpty(s.CredentialsUserName) ? new NetworkCredential(s.CredentialsUserName, s.CredentialsUserPassword) : null; } @@ -112,9 +112,8 @@ namespace ASC.Core.Notify.Senders public virtual NoticeSendResult Send(NotifyMessage m) { using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - tenantManager.SetCurrentTenant(m.Tenant); - var configuration = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); + scopeClass.TenantManager.SetCurrentTenant(m.Tenant); var smtpClient = GetSmtpClient(); var result = NoticeSendResult.TryOnceAgain; @@ -122,19 +121,19 @@ namespace ASC.Core.Notify.Senders { try { - if (_useCoreSettings) - InitUseCoreSettings(configuration); + if (UseCoreSettings) + InitUseCoreSettings(scopeClass.CoreConfiguration); var mail = BuildMailMessage(m); - Log.DebugFormat("SmtpSender - host={0}; port={1}; enableSsl={2} enableAuth={3}", _host, _port, _ssl, _credentials != null); + Log.DebugFormat("SmtpSender - host={0}; port={1}; enableSsl={2} enableAuth={3}", Host, Port, Ssl, Credentials != null); - smtpClient.Connect(_host, _port, - _ssl ? SecureSocketOptions.Auto : SecureSocketOptions.None); + smtpClient.Connect(Host, Port, + Ssl ? SecureSocketOptions.Auto : SecureSocketOptions.None); - if (_credentials != null) + if (Credentials != null) { - smtpClient.Authenticate(_credentials); + smtpClient.Authenticate(Credentials); } smtpClient.Send(mail); @@ -152,7 +151,7 @@ namespace ASC.Core.Notify.Senders } catch (InvalidOperationException) { - result = string.IsNullOrEmpty(_host) || _port == 0 + result = string.IsNullOrEmpty(Host) || Port == 0 ? NoticeSendResult.SendingImpossible : NoticeSendResult.TryOnceAgain; } @@ -319,6 +318,18 @@ namespace ASC.Core.Notify.Senders { return null; } + } + + class Scope + { + internal TenantManager TenantManager { get; } + internal CoreConfiguration CoreConfiguration { get; } + + public Scope(TenantManager tenantManager, CoreConfiguration coreConfiguration) + { + TenantManager = tenantManager; + CoreConfiguration = coreConfiguration; + } } } From 456866d4d95a6379b4c6c30ca0c1636cbec696c4 Mon Sep 17 00:00:00 2001 From: SuhorukovAnton <62381554+SuhorukovAnton@users.noreply.github.com> Date: Thu, 30 Jul 2020 00:57:58 +0300 Subject: [PATCH 03/18] scope: refactoring --- common/ASC.Core.Common/Context/WorkContext.cs | 34 +- common/ASC.Core.Common/Notify/Context.cs | 291 +++++++++--------- .../Tests/TopSubscriptionProviderTest.cs | 27 +- .../ASC.Core.Common/Tests/UserManagerTest.cs | 84 ++--- .../ReassignProgressItem.cs | 67 ++-- .../ASC.Data.Reassigns/RemoveProgressItem.cs | 71 +++-- .../Configuration/StorageSettings.cs | 29 +- common/ASC.Data.Storage/StaticUploader.cs | 38 ++- common/ASC.Data.Storage/StorageHandler.cs | 28 +- common/ASC.Data.Storage/StorageUploader.cs | 45 ++- common/ASC.Resource.Manager/Program.cs | 18 +- .../ASC.Data.Backup/Core/NotifyHelper.cs | 10 +- .../ASC.Data.Backup/Service/BackupWorker.cs | 144 +++++---- .../ASC.ElasticSearch/Service/Launcher.cs | 20 +- .../ASC.ElasticSearch/Service/Service.cs | 19 +- .../Service/FeedAggregatorService.cs | 47 ++- common/services/ASC.Notify/NotifyService.cs | 23 +- .../Thirdparty/ProviderDao/ProviderDaoBase.cs | 27 +- .../DocbuilderReportsUtility.cs | 39 ++- .../Services/NotifyService/NotifyClient.cs | 92 +++--- .../FileOperations/FileDeleteOperation.cs | 36 ++- .../FileOperations/FileDownloadOperation.cs | 51 +-- .../FileOperations/FileMarkAsReadOperation.cs | 30 +- .../FileOperations/FileMoveCopyOperation.cs | 67 ++-- .../FileOperations/FileOperation.cs | 38 ++- .../ASC.Files.Core/Utils/FileConverter.cs | 108 ++++--- 26 files changed, 910 insertions(+), 573 deletions(-) diff --git a/common/ASC.Core.Common/Context/WorkContext.cs b/common/ASC.Core.Common/Context/WorkContext.cs index c39a64eac2..136bde4b72 100644 --- a/common/ASC.Core.Common/Context/WorkContext.cs +++ b/common/ASC.Core.Common/Context/WorkContext.cs @@ -88,6 +88,7 @@ namespace ASC.Core } } + public static void NotifyStartUp(IServiceProvider serviceProvider) { if (notifyStarted) return; @@ -95,14 +96,16 @@ namespace ASC.Core { if (notifyStarted) return; - var scope = serviceProvider.GetService(); + var configuration = serviceProvider.GetService(); + var cacheNotify = serviceProvider.GetService>(); + var options = serviceProvider.GetService>(); NotifyContext = new NotifyContext(serviceProvider); - INotifySender jabberSender = new NotifyServiceSender(scope.CacheNotify); - INotifySender emailSender = new NotifyServiceSender(scope.CacheNotify); + INotifySender jabberSender = new NotifyServiceSender(cacheNotify); + INotifySender emailSender = new NotifyServiceSender(cacheNotify); - var postman = scope.Configuration["core:notify:postman"]; + var postman = configuration["core:notify:postman"]; if ("ases".Equals(postman, StringComparison.InvariantCultureIgnoreCase) || "smtp".Equals(postman, StringComparison.InvariantCultureIgnoreCase)) { @@ -114,14 +117,14 @@ namespace ASC.Core }; if ("ases".Equals(postman, StringComparison.InvariantCultureIgnoreCase)) { - emailSender = new AWSSender(serviceProvider, scope.Options); - properties["accessKey"] = scope.Configuration["ses:accessKey"]; - properties["secretKey"] = scope.Configuration["ses:secretKey"]; - properties["refreshTimeout"] = scope.Configuration["ses:refreshTimeout"]; + emailSender = new AWSSender(serviceProvider, options); + properties["accessKey"] = configuration["ses:accessKey"]; + properties["secretKey"] = configuration["ses:secretKey"]; + properties["refreshTimeout"] = configuration["ses:refreshTimeout"]; } else { - emailSender = new SmtpSender(serviceProvider, scope.Options); + emailSender = new SmtpSender(serviceProvider, options); } emailSender.Init(properties); } @@ -158,18 +161,5 @@ namespace ASC.Core tenantManager.SetCurrentTenant(tenant); } } - class Scope - { - internal IConfiguration Configuration { get; } - internal ICacheNotify CacheNotify { get; } - internal IOptionsMonitor Options { get; } - - public Scope(IConfiguration configuration, ICacheNotify cacheNotify, IOptionsMonitor options) - { - Configuration = configuration; - CacheNotify = cacheNotify; - Options = options; - } - } } } \ No newline at end of file diff --git a/common/ASC.Core.Common/Notify/Context.cs b/common/ASC.Core.Common/Notify/Context.cs index 34047dc7d1..42bd5eaced 100644 --- a/common/ASC.Core.Common/Notify/Context.cs +++ b/common/ASC.Core.Common/Notify/Context.cs @@ -1,154 +1,143 @@ -/* - * - * (c) Copyright Ascensio System Limited 2010-2018 - * - * This program is freeware. You can redistribute it and/or modify it under the terms of the GNU - * General Public License (GPL) version 3 as published by the Free Software Foundation (https://www.gnu.org/copyleft/gpl.html). - * In accordance with Section 7(a) of the GNU GPL its Section 15 shall be amended to the effect that - * Ascensio System SIA expressly excludes the warranty of non-infringement of any third-party rights. - * - * THIS PROGRAM IS DISTRIBUTED WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR - * FITNESS FOR A PARTICULAR PURPOSE. For more details, see GNU GPL at https://www.gnu.org/copyleft/gpl.html - * - * You can contact Ascensio System SIA by email at sales@onlyoffice.com - * - * The interactive user interfaces in modified source and object code versions of ONLYOFFICE must display - * Appropriate Legal Notices, as required under Section 5 of the GNU GPL version 3. - * - * Pursuant to Section 7 § 3(b) of the GNU GPL you must retain the original ONLYOFFICE logo which contains - * relevant author attributions when distributing the software. If the display of the logo in its graphic - * form is not reasonably feasible for technical reasons, you must include the words "Powered by ONLYOFFICE" - * in every copy of the program you distribute. - * Pursuant to Section 7 § 3(e) we decline to grant you any rights under trademark law for use of our trademarks. - * -*/ - - -using System; -using System.Collections.Generic; -using System.Linq; -using ASC.Common.Logging; -using ASC.Notify.Channels; -using ASC.Notify.Engine; -using ASC.Notify.Model; -using ASC.Notify.Sinks; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; - -namespace ASC.Notify -{ - public sealed class Context : INotifyRegistry - { - public const string SYS_RECIPIENT_ID = "_#" + _SYS_RECIPIENT_ID + "#_"; - internal const string _SYS_RECIPIENT_ID = "SYS_RECIPIENT_ID"; - internal const string _SYS_RECIPIENT_NAME = "SYS_RECIPIENT_NAME"; - internal const string _SYS_RECIPIENT_ADDRESS = "SYS_RECIPIENT_ADDRESS"; - - private readonly Dictionary channels = new Dictionary(2); - - - public NotifyEngine NotifyEngine - { - get; - private set; - } - - public INotifyRegistry NotifyService - { - get { return this; } - } - - public DispatchEngine DispatchEngine - { - get; - private set; - } - - - public event Action NotifyClientRegistration; - - private ILog Log { get; set; } - - public Context(IServiceProvider serviceProvider) - { - var scope = serviceProvider.GetService(); - Log = scope.Options.CurrentValue; - NotifyEngine = new NotifyEngine(this, serviceProvider); - DispatchEngine = new DispatchEngine(this, scope.Configuration, scope.Options); - } - - - void INotifyRegistry.RegisterSender(string senderName, ISink senderSink) - { - lock (channels) - { - channels[senderName] = new SenderChannel(this, senderName, null, senderSink); - } - } - - void INotifyRegistry.UnregisterSender(string senderName) - { - lock (channels) - { - channels.Remove(senderName); - } - } - - ISenderChannel INotifyRegistry.GetSender(string senderName) - { - lock (channels) - { - channels.TryGetValue(senderName, out var channel); - return channel; - } - } - - INotifyClient INotifyRegistry.RegisterClient(INotifySource source, IServiceScope serviceScope) - { - //ValidateNotifySource(source); - var client = new NotifyClientImpl(this, source, serviceScope); - NotifyClientRegistration?.Invoke(this, client); - return client; - } - - private void ValidateNotifySource(INotifySource source) - { - foreach (var a in source.GetActionProvider().GetActions()) - { - IEnumerable senderNames; - lock (channels) - { - senderNames = channels.Values.Select(s => s.SenderName); - } - foreach (var s in senderNames) - { - try - { - var pattern = source.GetPatternProvider().GetPattern(a, s); - if (pattern == null) - { - throw new NotifyException(string.Format("In notify source {0} pattern not found for action {1} and sender {2}", source.ID, a.ID, s)); - } - } - catch (Exception error) - { - Log.ErrorFormat("Source: {0}, action: {1}, sender: {2}, error: {3}", source.ID, a.ID, s, error); - } - } - } - } - - class Scope - { - internal IOptionsMonitor Options { get; } - internal IConfiguration Configuration { get; } +/* + * + * (c) Copyright Ascensio System Limited 2010-2018 + * + * This program is freeware. You can redistribute it and/or modify it under the terms of the GNU + * General Public License (GPL) version 3 as published by the Free Software Foundation (https://www.gnu.org/copyleft/gpl.html). + * In accordance with Section 7(a) of the GNU GPL its Section 15 shall be amended to the effect that + * Ascensio System SIA expressly excludes the warranty of non-infringement of any third-party rights. + * + * THIS PROGRAM IS DISTRIBUTED WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR + * FITNESS FOR A PARTICULAR PURPOSE. For more details, see GNU GPL at https://www.gnu.org/copyleft/gpl.html + * + * You can contact Ascensio System SIA by email at sales@onlyoffice.com + * + * The interactive user interfaces in modified source and object code versions of ONLYOFFICE must display + * Appropriate Legal Notices, as required under Section 5 of the GNU GPL version 3. + * + * Pursuant to Section 7 § 3(b) of the GNU GPL you must retain the original ONLYOFFICE logo which contains + * relevant author attributions when distributing the software. If the display of the logo in its graphic + * form is not reasonably feasible for technical reasons, you must include the words "Powered by ONLYOFFICE" + * in every copy of the program you distribute. + * Pursuant to Section 7 § 3(e) we decline to grant you any rights under trademark law for use of our trademarks. + * +*/ - public Scope(IOptionsMonitor options, IConfiguration configuration) + +using System; +using System.Collections.Generic; +using System.Linq; +using ASC.Common.Logging; +using ASC.Notify.Channels; +using ASC.Notify.Engine; +using ASC.Notify.Model; +using ASC.Notify.Sinks; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; + +namespace ASC.Notify +{ + public sealed class Context : INotifyRegistry + { + public const string SYS_RECIPIENT_ID = "_#" + _SYS_RECIPIENT_ID + "#_"; + internal const string _SYS_RECIPIENT_ID = "SYS_RECIPIENT_ID"; + internal const string _SYS_RECIPIENT_NAME = "SYS_RECIPIENT_NAME"; + internal const string _SYS_RECIPIENT_ADDRESS = "SYS_RECIPIENT_ADDRESS"; + + private readonly Dictionary channels = new Dictionary(2); + + + public NotifyEngine NotifyEngine + { + get; + private set; + } + + public INotifyRegistry NotifyService + { + get { return this; } + } + + public DispatchEngine DispatchEngine + { + get; + private set; + } + + + public event Action NotifyClientRegistration; + + private ILog Log { get; set; } + + public Context(IServiceProvider serviceProvider) + { + var options = serviceProvider.GetService>(); + Log = options.CurrentValue; + NotifyEngine = new NotifyEngine(this, serviceProvider); + DispatchEngine = new DispatchEngine(this, serviceProvider.GetService(), options); + } + + + void INotifyRegistry.RegisterSender(string senderName, ISink senderSink) + { + lock (channels) { - Options = options; - Configuration = configuration; + channels[senderName] = new SenderChannel(this, senderName, null, senderSink); } - } - } -} + } + + void INotifyRegistry.UnregisterSender(string senderName) + { + lock (channels) + { + channels.Remove(senderName); + } + } + + ISenderChannel INotifyRegistry.GetSender(string senderName) + { + lock (channels) + { + channels.TryGetValue(senderName, out var channel); + return channel; + } + } + + INotifyClient INotifyRegistry.RegisterClient(INotifySource source, IServiceScope serviceScope) + { + //ValidateNotifySource(source); + var client = new NotifyClientImpl(this, source, serviceScope); + NotifyClientRegistration?.Invoke(this, client); + return client; + } + + + private void ValidateNotifySource(INotifySource source) + { + foreach (var a in source.GetActionProvider().GetActions()) + { + IEnumerable senderNames; + lock (channels) + { + senderNames = channels.Values.Select(s => s.SenderName); + } + foreach (var s in senderNames) + { + try + { + var pattern = source.GetPatternProvider().GetPattern(a, s); + if (pattern == null) + { + throw new NotifyException(string.Format("In notify source {0} pattern not found for action {1} and sender {2}", source.ID, a.ID, s)); + } + } + catch (Exception error) + { + Log.ErrorFormat("Source: {0}, action: {1}, sender: {2}, error: {3}", source.ID, a.ID, s, error); + } + } + } + } + } +} \ No newline at end of file diff --git a/common/ASC.Core.Common/Tests/TopSubscriptionProviderTest.cs b/common/ASC.Core.Common/Tests/TopSubscriptionProviderTest.cs index 1f4f731dd9..951e0e1aef 100644 --- a/common/ASC.Core.Common/Tests/TopSubscriptionProviderTest.cs +++ b/common/ASC.Core.Common/Tests/TopSubscriptionProviderTest.cs @@ -51,15 +51,14 @@ namespace ASC.Core.Common.Tests private IRecipient testRec; private IRecipient testRec2; private NotifyAction nAction; - private IServiceProvider serviceProvider; - + private IServiceProvider serviceProvider; + [OneTimeSetUp] public void CreateProviders() { using var scope = serviceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - var subscriptionManager = scope.ServiceProvider.GetService(); - tenantManager.SetCurrentTenant(tenant); + var scopeClass = scope.ServiceProvider.GetService(); + scopeClass.TenantManager.SetCurrentTenant(tenant); tenant = new Tenants.Tenant(0, "teamlab"); sourceId = "6045b68c-2c2e-42db-9e53-c272e814c4ad"; @@ -69,8 +68,8 @@ namespace ASC.Core.Common.Tests testRec = new DirectRecipient("ff0c4e13-1831-43c2-91ce-7b7beb56179b", null); //Oliver Khan testRec2 = new DirectRecipient("0017794f-aeb7-49a5-8817-9e870e02bd3f", null); //Якутова Юлия - recProvider = scope.ServiceProvider.GetService(); - var directSubProvider = new DirectSubscriptionProvider(sourceId, subscriptionManager, recProvider); + recProvider = scopeClass.RecipientProviderImpl; + var directSubProvider = new DirectSubscriptionProvider(sourceId, scopeClass.SubscriptionManager, recProvider); subProvider = new TopSubscriptionProvider(recProvider, directSubProvider); } @@ -142,6 +141,20 @@ namespace ASC.Core.Common.Tests subProvider.UnSubscribe(nAction, rndObj2, everyone); } } + + class Scope + { + internal TenantManager TenantManager { get; } + internal SubscriptionManager SubscriptionManager { get; } + internal RecipientProviderImpl RecipientProviderImpl { get; } + + public Scope(TenantManager tenantManager, SubscriptionManager subscriptionManager, RecipientProviderImpl recipientProviderImpl) + { + TenantManager = tenantManager; + SubscriptionManager = subscriptionManager; + RecipientProviderImpl = recipientProviderImpl; + } + } } } #endif \ No newline at end of file diff --git a/common/ASC.Core.Common/Tests/UserManagerTest.cs b/common/ASC.Core.Common/Tests/UserManagerTest.cs index 2869de12d4..10b120bcc9 100644 --- a/common/ASC.Core.Common/Tests/UserManagerTest.cs +++ b/common/ASC.Core.Common/Tests/UserManagerTest.cs @@ -43,38 +43,36 @@ namespace ASC.Core.Common.Tests public void SearchUsers() { using var scope = ServiceProvider.CreateScope(); - var userManager = scope.ServiceProvider.GetService(); - var tenantManager = scope.ServiceProvider.GetService(); - var tenant = tenantManager.SetCurrentTenant(0); + var scopeClass = scope.ServiceProvider.GetService(); - var users = userManager.Search(null, EmployeeStatus.Active); + var users = scopeClass.UserManager.Search(null, EmployeeStatus.Active); Assert.AreEqual(0, users.Length); - users = userManager.Search("", EmployeeStatus.Active); + users = scopeClass.UserManager.Search("", EmployeeStatus.Active); Assert.AreEqual(0, users.Length); - users = userManager.Search(" ", EmployeeStatus.Active); + users = scopeClass.UserManager.Search(" ", EmployeeStatus.Active); Assert.AreEqual(0, users.Length); - users = userManager.Search("АбРаМсКй", EmployeeStatus.Active); + users = scopeClass.UserManager.Search("АбРаМсКй", EmployeeStatus.Active); Assert.AreEqual(0, users.Length); - users = userManager.Search("АбРаМсКий", EmployeeStatus.Active); + users = scopeClass.UserManager.Search("АбРаМсКий", EmployeeStatus.Active); Assert.AreEqual(0, users.Length);//Абрамский уволился - users = userManager.Search("АбРаМсКий", EmployeeStatus.All); + users = scopeClass.UserManager.Search("АбРаМсКий", EmployeeStatus.All); Assert.AreNotEqual(0, users.Length); - users = userManager.Search("иванов николай", EmployeeStatus.Active); + users = scopeClass.UserManager.Search("иванов николай", EmployeeStatus.Active); Assert.AreNotEqual(0, users.Length); - users = userManager.Search("ведущий програм", EmployeeStatus.Active); + users = scopeClass.UserManager.Search("ведущий програм", EmployeeStatus.Active); Assert.AreNotEqual(0, users.Length); - users = userManager.Search("баннов лев", EmployeeStatus.Active, new Guid("613fc896-3ddd-4de1-a567-edbbc6cf1fc8")); + users = scopeClass.UserManager.Search("баннов лев", EmployeeStatus.Active, new Guid("613fc896-3ddd-4de1-a567-edbbc6cf1fc8")); Assert.AreNotEqual(0, users.Length); - users = userManager.Search("иванов николай", EmployeeStatus.Active, new Guid("613fc896-3ddd-4de1-a567-edbbc6cf1fc8")); + users = scopeClass.UserManager.Search("иванов николай", EmployeeStatus.Active, new Guid("613fc896-3ddd-4de1-a567-edbbc6cf1fc8")); Assert.AreEqual(0, users); } @@ -82,69 +80,79 @@ namespace ASC.Core.Common.Tests public void DepartmentManagers() { using var scope = ServiceProvider.CreateScope(); - var userManager = scope.ServiceProvider.GetService(); - var tenantManager = scope.ServiceProvider.GetService(); - var tenant = tenantManager.SetCurrentTenant(1024); + var scopeClass = scope.ServiceProvider.GetService(); + var tenant = scopeClass.TenantManager.SetCurrentTenant(1024); - var deps = userManager.GetDepartments(); - var users = userManager.GetUsers(); + var deps = scopeClass.UserManager.GetDepartments(); + var users = scopeClass.UserManager.GetUsers(); var g1 = deps[0]; var ceo = users[0]; var u1 = users[1]; var u2 = users[2]; - _ = userManager.GetCompanyCEO(); - userManager.SetCompanyCEO(ceo.ID); - var ceoTemp = userManager.GetCompanyCEO(); + _ = scopeClass.UserManager.GetCompanyCEO(); + scopeClass.UserManager.SetCompanyCEO(ceo.ID); + var ceoTemp = scopeClass.UserManager.GetCompanyCEO(); Assert.AreEqual(ceo, ceoTemp); Thread.Sleep(TimeSpan.FromSeconds(6)); - ceoTemp = userManager.GetCompanyCEO(); + ceoTemp = scopeClass.UserManager.GetCompanyCEO(); Assert.AreEqual(ceo, ceoTemp); - userManager.SetDepartmentManager(g1.ID, u1.ID); + scopeClass.UserManager.SetDepartmentManager(g1.ID, u1.ID); - userManager.SetDepartmentManager(g1.ID, u2.ID); + scopeClass.UserManager.SetDepartmentManager(g1.ID, u2.ID); } [Test] public void UserGroupsPerformanceTest() { using var scope = ServiceProvider.CreateScope(); - var userManager = scope.ServiceProvider.GetService(); - var tenantManager = scope.ServiceProvider.GetService(); - var tenant = tenantManager.SetCurrentTenant(0); + var scopeClass = scope.ServiceProvider.GetService(); + var tenant = scopeClass.TenantManager.SetCurrentTenant(0); - foreach (var u in userManager.GetUsers()) + foreach (var u in scopeClass.UserManager.GetUsers()) { - var groups = userManager.GetGroups(Guid.Empty); + var groups = scopeClass.UserManager.GetGroups(Guid.Empty); Assert.IsNotNull(groups); - foreach (var g in userManager.GetUserGroups(u.ID)) + foreach (var g in scopeClass.UserManager.GetUserGroups(u.ID)) { - var manager = userManager.GetUsers(userManager.GetDepartmentManager(g.ID)).UserName; + var manager = scopeClass.UserManager.GetUsers(scopeClass.UserManager.GetDepartmentManager(g.ID)).UserName; } } var stopwatch = Stopwatch.StartNew(); - foreach (var u in userManager.GetUsers()) + foreach (var u in scopeClass.UserManager.GetUsers()) { - var groups = userManager.GetGroups(Guid.Empty); + var groups = scopeClass.UserManager.GetGroups(Guid.Empty); Assert.IsNotNull(groups); - foreach (var g in userManager.GetUserGroups(u.ID)) + foreach (var g in scopeClass.UserManager.GetUserGroups(u.ID)) { - var manager = userManager.GetUsers(userManager.GetDepartmentManager(g.ID)).UserName; + var manager = scopeClass.UserManager.GetUsers(scopeClass.UserManager.GetDepartmentManager(g.ID)).UserName; } } stopwatch.Stop(); stopwatch.Restart(); - var users = userManager.GetUsersByGroup(Constants.GroupUser.ID); - var visitors = userManager.GetUsersByGroup(Constants.GroupVisitor.ID); - var all = userManager.GetUsers(); + var users = scopeClass.UserManager.GetUsersByGroup(Constants.GroupUser.ID); + var visitors = scopeClass.UserManager.GetUsersByGroup(Constants.GroupVisitor.ID); + var all = scopeClass.UserManager.GetUsers(); Assert.IsNotNull(users); Assert.IsNotNull(visitors); Assert.IsNotNull(all); stopwatch.Stop(); } } + + class Scope + { + internal UserManager UserManager { get; } + internal TenantManager TenantManager { get; } + + public Scope(UserManager userManager, TenantManager tenantManager) + { + UserManager = userManager; + TenantManager = tenantManager; + } + } } #endif diff --git a/common/ASC.Data.Reassigns/ReassignProgressItem.cs b/common/ASC.Data.Reassigns/ReassignProgressItem.cs index 67d18435f2..70c769c4b4 100644 --- a/common/ASC.Data.Reassigns/ReassignProgressItem.cs +++ b/common/ASC.Data.Reassigns/ReassignProgressItem.cs @@ -99,28 +99,18 @@ namespace ASC.Data.Reassigns } public void RunJob() - { - var logger = ServiceProvider.GetService>().Get("ASC.Web"); - - using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - var tenant = tenantManager.SetCurrentTenant(_tenantId); - - var coreSettings = scope.ServiceProvider.GetService(); - var messageService = scope.ServiceProvider.GetService(); - var studioNotifyService = scope.ServiceProvider.GetService(); - var securityContext = scope.ServiceProvider.GetService(); - var userManager = scope.ServiceProvider.GetService(); - var userPhotoManager = scope.ServiceProvider.GetService(); - var displayUserSettingsHelper = scope.ServiceProvider.GetService(); - var messageTarget = scope.ServiceProvider.GetService(); + { + using var scope = ServiceProvider.CreateScope(); + var scopeClass = scope.ServiceProvider.GetService(); + var logger = scopeClass.Options.Get("ASC.Web"); + var tenant = scopeClass.TenantManager.SetCurrentTenant(_tenantId); try { Percentage = 0; Status = ProgressStatus.Started; - securityContext.AuthenticateMe(_currentUserId); + scopeClass.SecurityContext.AuthenticateMe(_currentUserId); logger.InfoFormat("reassignment of data from {0} to {1}", FromUser, ToUser); @@ -134,7 +124,7 @@ namespace ASC.Data.Reassigns Percentage = 66; //_projectsReassign.Reassign(_fromUserId, _toUserId); - if (!coreSettings.CustomMode) + if (!scopeClass.CoreBaseSettings.CustomMode) { logger.Info("reassignment of data from crm"); @@ -149,14 +139,14 @@ namespace ASC.Data.Reassigns //} } - SendSuccessNotify(userManager, studioNotifyService, messageService, messageTarget, displayUserSettingsHelper); + SendSuccessNotify(scopeClass.UserManager, scopeClass.StudioNotifyService, scopeClass.MessageService, scopeClass.MessageTarget, scopeClass.DisplayUserSettingsHelper); Percentage = 100; Status = ProgressStatus.Done; if (_deleteProfile) { - DeleteUserProfile(userManager, userPhotoManager, messageService, messageTarget, displayUserSettingsHelper); + DeleteUserProfile(scopeClass.UserManager, scopeClass.UserPhotoManager, scopeClass.MessageService, scopeClass.MessageTarget, scopeClass.DisplayUserSettingsHelper); } } catch (Exception ex) @@ -164,7 +154,7 @@ namespace ASC.Data.Reassigns logger.Error(ex); Status = ProgressStatus.Failed; Error = ex.Message; - SendErrorNotify(userManager, studioNotifyService, ex.Message); + SendErrorNotify(scopeClass.UserManager, scopeClass.StudioNotifyService, ex.Message); } finally { @@ -215,6 +205,43 @@ namespace ASC.Data.Reassigns messageService.Send(_httpHeaders, MessageAction.UserDeleted, messageTarget.Create(FromUser), new[] { userName }); else messageService.Send(MessageAction.UserDeleted, messageTarget.Create(FromUser), userName); + } + + class Scope + { + internal TenantManager TenantManager { get; } + internal CoreBaseSettings CoreBaseSettings { get; } + internal MessageService MessageService { get; } + internal StudioNotifyService StudioNotifyService { get; } + internal SecurityContext SecurityContext { get; } + internal UserManager UserManager { get; } + internal UserPhotoManager UserPhotoManager { get; } + internal DisplayUserSettingsHelper DisplayUserSettingsHelper { get; } + internal MessageTarget MessageTarget { get; } + internal IOptionsMonitor Options { get; } + + public Scope(TenantManager tenantManager, + CoreBaseSettings coreBaseSettings, + MessageService messageService, + StudioNotifyService studioNotifyService, + SecurityContext securityContext, + UserManager userManager, + UserPhotoManager userPhotoManager, + DisplayUserSettingsHelper displayUserSettingsHelper, + MessageTarget messageTarget, + IOptionsMonitor options) + { + TenantManager = tenantManager; + CoreBaseSettings = coreBaseSettings; + MessageService = messageService; + StudioNotifyService = studioNotifyService; + SecurityContext = securityContext; + UserManager = userManager; + UserPhotoManager = userPhotoManager; + DisplayUserSettingsHelper = displayUserSettingsHelper; + MessageTarget = messageTarget; + Options = options; + } } } diff --git a/common/ASC.Data.Reassigns/RemoveProgressItem.cs b/common/ASC.Data.Reassigns/RemoveProgressItem.cs index 1bf3bb19fe..51e28e88c2 100644 --- a/common/ASC.Data.Reassigns/RemoveProgressItem.cs +++ b/common/ASC.Data.Reassigns/RemoveProgressItem.cs @@ -96,30 +96,21 @@ namespace ASC.Data.Reassigns public void RunJob() { - using var scope = ServiceProvider.CreateScope(); - var logger = ServiceProvider.GetService>().Get("ASC.Web"); - var tenantManager = scope.ServiceProvider.GetService(); - var tenant = tenantManager.SetCurrentTenant(_tenantId); - - var messageService = scope.ServiceProvider.GetService(); - var studioNotifyService = scope.ServiceProvider.GetService(); - var securityContext = scope.ServiceProvider.GetService(); - var webItemManagerSecurity = scope.ServiceProvider.GetService(); - var storageFactory = scope.ServiceProvider.GetService(); - var coreSettings = scope.ServiceProvider.GetService(); - var userFormatter = scope.ServiceProvider.GetService(); - var messageTarget = scope.ServiceProvider.GetService(); - var userName = userFormatter.GetUserName(User, DisplayUserNameFormat.Default); + using var scope = ServiceProvider.CreateScope(); + var scopeClass = scope.ServiceProvider.GetService(); + var logger = scopeClass.Options.Get("ASC.Web"); + var tenant = scopeClass.TenantManager.SetCurrentTenant(_tenantId); + var userName = scopeClass.UserFormatter.GetUserName(User, DisplayUserNameFormat.Default); try { Percentage = 0; Status = ProgressStatus.Started; - securityContext.AuthenticateMe(_currentUserId); + scopeClass.SecurityContext.AuthenticateMe(_currentUserId); long crmSpace; - GetUsageSpace(webItemManagerSecurity, out var docsSpace, out var mailSpace, out var talkSpace); + GetUsageSpace(scopeClass.WebItemManagerSecurity, out var docsSpace, out var mailSpace, out var talkSpace); logger.InfoFormat("deleting user data for {0} ", FromUser); @@ -128,7 +119,7 @@ namespace ASC.Data.Reassigns Percentage = 25; //_docService.DeleteStorage(_userId); - if (!coreSettings.CustomMode) + if (!scopeClass.CoreBaseSettings.CustomMode) { logger.Info("deleting of data from crm"); @@ -153,9 +144,9 @@ namespace ASC.Data.Reassigns logger.Info("deleting of data from talk"); Percentage = 99; - DeleteTalkStorage(storageFactory); + DeleteTalkStorage(scopeClass.StorageFactory); - SendSuccessNotify(studioNotifyService, messageService, messageTarget, userName, docsSpace, crmSpace, mailSpace, talkSpace); + SendSuccessNotify(scopeClass.StudioNotifyService, scopeClass.MessageService, scopeClass.MessageTarget, userName, docsSpace, crmSpace, mailSpace, talkSpace); Percentage = 100; Status = ProgressStatus.Done; @@ -165,7 +156,7 @@ namespace ASC.Data.Reassigns logger.Error(ex); Status = ProgressStatus.Failed; Error = ex.Message; - SendErrorNotify(studioNotifyService, ex.Message, userName); + SendErrorNotify(scopeClass.StudioNotifyService, ex.Message, userName); } finally { @@ -252,6 +243,46 @@ namespace ASC.Data.Reassigns studioNotifyService.SendMsgRemoveUserDataFailed(_currentUserId, User, userName, errorMessage); } + + class Scope + { + internal TenantManager TenantManager { get; } + internal CoreBaseSettings CoreBaseSettings { get; } + internal MessageService MessageService { get; } + internal StudioNotifyService StudioNotifyService { get; } + internal SecurityContext SecurityContext { get; } + internal UserManager UserManager { get; } + internal MessageTarget MessageTarget { get; } + internal WebItemManagerSecurity WebItemManagerSecurity { get; } + internal StorageFactory StorageFactory { get; } + internal UserFormatter UserFormatter { get; } + internal IOptionsMonitor Options { get; } + + public Scope(TenantManager tenantManager, + CoreBaseSettings coreBaseSettings, + MessageService messageService, + StudioNotifyService studioNotifyService, + SecurityContext securityContext, + UserManager userManager, + MessageTarget messageTarget, + WebItemManagerSecurity webItemManagerSecurity, + StorageFactory storageFactory, + UserFormatter userFormatter, + IOptionsMonitor options) + { + TenantManager = tenantManager; + CoreBaseSettings = coreBaseSettings; + MessageService = messageService; + StudioNotifyService = studioNotifyService; + SecurityContext = securityContext; + UserManager = userManager; + MessageTarget = messageTarget; + WebItemManagerSecurity = webItemManagerSecurity; + StorageFactory = storageFactory; + UserFormatter = userFormatter; + Options = options; + } + } } public static class RemoveProgressItemExtension diff --git a/common/ASC.Data.Storage/Configuration/StorageSettings.cs b/common/ASC.Data.Storage/Configuration/StorageSettings.cs index 395d08d6d1..664f7999be 100644 --- a/common/ASC.Data.Storage/Configuration/StorageSettings.cs +++ b/common/ASC.Data.Storage/Configuration/StorageSettings.cs @@ -43,6 +43,9 @@ namespace ASC.Data.Storage.Configuration { public class BaseStorageSettingsListener { + + public IServiceProvider ServiceProvider { get; } + public BaseStorageSettingsListener(IServiceProvider serviceProvider) { ServiceProvider = serviceProvider; @@ -50,24 +53,34 @@ namespace ASC.Data.Storage.Configuration { using var scope = ServiceProvider.CreateScope(); - var storageSettingsHelper = scope.ServiceProvider.GetService(); - var storageSettings = scope.ServiceProvider.GetService(); - var settings = storageSettings.LoadForTenant(i.TenantId); + var scopeClass = scope.ServiceProvider.GetService(); + var settings = scopeClass.SettingsManager.LoadForTenant(i.TenantId); if (i.Name == settings.Module) { - storageSettingsHelper.Clear(settings); + scopeClass.StorageSettingsHelper.Clear(settings); } - var cdnStorageSettings = scope.ServiceProvider.GetService(); - var cdnSettings = storageSettings.LoadForTenant(i.TenantId); + var cdnSettings = scopeClass.SettingsManager.LoadForTenant(i.TenantId); if (i.Name == cdnSettings.Module) { - storageSettingsHelper.Clear(cdnSettings); + scopeClass.StorageSettingsHelper.Clear(cdnSettings); } }, CacheNotifyAction.Remove); } - public IServiceProvider ServiceProvider { get; } + class Scope + { + internal StorageSettingsHelper StorageSettingsHelper { get; } + internal SettingsManager SettingsManager { get; } + internal CdnStorageSettings CdnStorageSettings { get; } + + public Scope(StorageSettingsHelper storageSettingsHelper, SettingsManager settingsManager, CdnStorageSettings cdnStorageSettings) + { + StorageSettingsHelper = storageSettingsHelper; + SettingsManager = settingsManager; + CdnStorageSettings = cdnStorageSettings; + } + } } [Serializable] diff --git a/common/ASC.Data.Storage/StaticUploader.cs b/common/ASC.Data.Storage/StaticUploader.cs index a95d894ee9..0cd0ee5e52 100644 --- a/common/ASC.Data.Storage/StaticUploader.cs +++ b/common/ASC.Data.Storage/StaticUploader.cs @@ -112,9 +112,9 @@ namespace ASC.Data.Storage var task = new Task(() => { using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - tenantManager.SetCurrentTenant(tenantId); - var staticUploader = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); + scopeClass.TenantManager.SetCurrentTenant(tenantId); + var staticUploader = scopeClass.StaticUploader; return staticUploader.UploadFile(relativePath, mappedPath, onComplete); }, TaskCreationOptions.LongRunning); @@ -208,16 +208,12 @@ namespace ASC.Data.Storage try { using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - var tenant = tenantManager.GetTenant(tenantId); - tenantManager.SetCurrentTenant(tenant); + var scopeClass = scope.ServiceProvider.GetService(); + var tenant = scopeClass.TenantManager.GetTenant(tenantId); + scopeClass.TenantManager.SetCurrentTenant(tenant); + scopeClass.SecurityContext.AuthenticateMe(tenant.OwnerId); - var SecurityContext = scope.ServiceProvider.GetService(); - var SettingsManager = scope.ServiceProvider.GetService(); - var StorageSettingsHelper = scope.ServiceProvider.GetService(); - SecurityContext.AuthenticateMe(tenant.OwnerId); - - var dataStore = StorageSettingsHelper.DataStore(SettingsManager.Load()); + var dataStore = scopeClass.StorageSettingsHelper.DataStore(scopeClass.SettingsManager.Load()); if (File.Exists(mappedPath)) { @@ -285,6 +281,24 @@ namespace ASC.Data.Storage StaticUploader.UploadFileAsync(Path.Combine(relativePath, filePath), file, (res) => StepDone()).Wait(); } } + } + + internal class Scope + { + internal TenantManager TenantManager { get; } + internal StaticUploader StaticUploader { get; } + internal SecurityContext SecurityContext { get; } + internal SettingsManager SettingsManager { get; } + internal StorageSettingsHelper StorageSettingsHelper { get; } + + public Scope(TenantManager tenantManager, StaticUploader staticUploader, SecurityContext securityContext, SettingsManager settingsManager, StorageSettingsHelper storageSettingsHelper) + { + TenantManager = tenantManager; + StaticUploader = staticUploader; + SecurityContext = securityContext; + SettingsManager = settingsManager; + StorageSettingsHelper = storageSettingsHelper; + } } public static class StaticUploaderExtension diff --git a/common/ASC.Data.Storage/StorageHandler.cs b/common/ASC.Data.Storage/StorageHandler.cs index 9b323700c8..733264e750 100644 --- a/common/ASC.Data.Storage/StorageHandler.cs +++ b/common/ASC.Data.Storage/StorageHandler.cs @@ -66,18 +66,15 @@ namespace ASC.Data.Storage.DiscStorage public async Task Invoke(HttpContext context) { using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - var securityContext = scope.ServiceProvider.GetService(); - var storageFactory = scope.ServiceProvider.GetService(); - var emailValidationKeyProvider = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); - if (_checkAuth && !securityContext.IsAuthenticated) + if (_checkAuth && !scopeClass.SecurityContext.IsAuthenticated) { context.Response.StatusCode = (int)HttpStatusCode.Forbidden; return; } - var storage = storageFactory.GetStorage(tenantManager.GetCurrentTenant().TenantId.ToString(CultureInfo.InvariantCulture), _module); + var storage = scopeClass.StorageFactory.GetStorage(scopeClass.TenantManager.GetCurrentTenant().TenantId.ToString(CultureInfo.InvariantCulture), _module); var path = Path.Combine(_path, GetRouteValue("pathInfo").Replace('/', Path.DirectorySeparatorChar)); var header = context.Request.Query[Constants.QUERY_HEADER].FirstOrDefault() ?? ""; @@ -89,7 +86,7 @@ namespace ASC.Data.Storage.DiscStorage var expire = context.Request.Query[Constants.QUERY_EXPIRE]; if (string.IsNullOrEmpty(expire)) expire = storageExpire.TotalMinutes.ToString(CultureInfo.InvariantCulture); - var validateResult = emailValidationKeyProvider.ValidateEmailKey(path + "." + header + "." + expire, auth ?? "", TimeSpan.FromMinutes(Convert.ToDouble(expire))); + var validateResult = scopeClass.EmailValidationKeyProvider.ValidateEmailKey(path + "." + header + "." + expire, auth ?? "", TimeSpan.FromMinutes(Convert.ToDouble(expire))); if (validateResult != EmailValidationKeyProvider.ValidationResult.Ok) { context.Response.StatusCode = (int)HttpStatusCode.Forbidden; @@ -145,6 +142,23 @@ namespace ASC.Data.Storage.DiscStorage { return (context.GetRouteValue(name) ?? "").ToString(); } + } + + class Scope + { + internal TenantManager TenantManager { get; } + internal SecurityContext SecurityContext { get; } + internal StorageFactory StorageFactory { get; } + internal EmailValidationKeyProvider EmailValidationKeyProvider { get; } + + public Scope(TenantManager tenantManager, SecurityContext securityContext, StorageFactory storageFactory, EmailValidationKeyProvider emailValidationKeyProvider) + { + TenantManager = tenantManager; + SecurityContext = securityContext; + StorageFactory = storageFactory; + EmailValidationKeyProvider = emailValidationKeyProvider; + } + } } diff --git a/common/ASC.Data.Storage/StorageUploader.cs b/common/ASC.Data.Storage/StorageUploader.cs index fc875ec0f1..8fb5ebece5 100644 --- a/common/ASC.Data.Storage/StorageUploader.cs +++ b/common/ASC.Data.Storage/StorageUploader.cs @@ -148,25 +148,19 @@ namespace ASC.Data.Storage { Log.DebugFormat("Tenant: {0}", tenantId); using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - var tenant = tenantManager.GetTenant(tenantId); - tenantManager.SetCurrentTenant(tenant); + var scopeClass = scope.ServiceProvider.GetService(); + var tenant = scopeClass.TenantManager.GetTenant(tenantId); + scopeClass.TenantManager.SetCurrentTenant(tenant); - var securityContext = scope.ServiceProvider.GetService(); - var storageFactory = scope.ServiceProvider.GetService(); - var options = scope.ServiceProvider.GetService>(); - var storageSettingsHelper = scope.ServiceProvider.GetService(); - var settingsManager = scope.ServiceProvider.GetService(); - - securityContext.AuthenticateMe(tenant.OwnerId); + scopeClass.SecurityContext.AuthenticateMe(tenant.OwnerId); foreach (var module in Modules) { - var oldStore = storageFactory.GetStorage(ConfigPath, tenantId.ToString(), module); - var store = storageFactory.GetStorageFromConsumer(ConfigPath, tenantId.ToString(), module, storageSettingsHelper.DataStoreConsumer(settings)); + var oldStore = scopeClass.StorageFactory.GetStorage(ConfigPath, tenantId.ToString(), module); + var store = scopeClass.StorageFactory.GetStorageFromConsumer(ConfigPath, tenantId.ToString(), module, scopeClass.StorageSettingsHelper.DataStoreConsumer(settings)); var domains = StorageFactoryConfig.GetDomainList(ConfigPath, module).ToList(); - var crossModuleTransferUtility = new CrossModuleTransferUtility(options, oldStore, store); + var crossModuleTransferUtility = new CrossModuleTransferUtility(scopeClass.Options, oldStore, store); string[] files; foreach (var domain in domains) @@ -197,15 +191,36 @@ namespace ASC.Data.Storage StepDone(); } - settingsManager.Save(settings); + scopeClass.SettingsManager.Save(settings); tenant.SetStatus(TenantStatus.Active); - tenantManager.SaveTenant(tenant); + scopeClass.TenantManager.SaveTenant(tenant); } catch (Exception e) { Error = e; Log.Error(e); } + } + + + class Scope + { + internal TenantManager TenantManager { get; } + internal SecurityContext SecurityContext { get; } + internal StorageFactory StorageFactory { get; } + internal IOptionsMonitor Options { get; } + internal StorageSettingsHelper StorageSettingsHelper { get; } + internal SettingsManager SettingsManager { get; } + + public Scope(TenantManager tenantManager, SecurityContext securityContext, StorageFactory storageFactory, IOptionsMonitor options, StorageSettingsHelper storageSettingsHelper, SettingsManager settingsManager) + { + TenantManager = tenantManager; + SecurityContext = securityContext; + StorageFactory = storageFactory; + Options = options; + StorageSettingsHelper = storageSettingsHelper; + SettingsManager = settingsManager; + } } } } diff --git a/common/ASC.Resource.Manager/Program.cs b/common/ASC.Resource.Manager/Program.cs index 62431e3433..4f93fe8497 100644 --- a/common/ASC.Resource.Manager/Program.cs +++ b/common/ASC.Resource.Manager/Program.cs @@ -22,7 +22,17 @@ namespace ASC.Resource.Manager { Parser.Default.ParseArguments(args).WithParsed(Export); } + class Scope + { + internal ResourceData ResourceData { get; } + internal IConfiguration Configuration { get; } + public Scope(ResourceData resourceData, IConfiguration configuration ) + { + ResourceData = resourceData; + Configuration = configuration; + } + } public static void Export(Options options) { var services = new ServiceCollection(); @@ -30,7 +40,7 @@ namespace ASC.Resource.Manager startup.ConfigureServices(services); var serviceProvider = services.BuildServiceProvider(); using var scope = serviceProvider.CreateScope(); - var ResourceData = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var cultures = new List(); var projects = new List(); @@ -71,9 +81,9 @@ namespace ASC.Resource.Manager return; } - enabledSettings = serviceProvider.GetService().GetSetting("enabled"); - cultures = ResourceData.GetCultures().Where(r => r.Available).Select(r => r.Title).Intersect(enabledSettings.Langs).ToList(); - projects = ResourceData.GetAllFiles(); + enabledSettings = scopeClass.Configuration.GetSetting("enabled"); + cultures = scopeClass.ResourceData.GetCultures().Where(r => r.Available).Select(r => r.Title).Intersect(enabledSettings.Langs).ToList(); + projects = scopeClass.ResourceData.GetAllFiles(); //key = CheckExist("FilesJSResource", "ASC.Files.Resources.FilesJSResource,ASC.Files"); ExportWithProject(project, module, filePath, culture, exportPath, key); diff --git a/common/services/ASC.Data.Backup/Core/NotifyHelper.cs b/common/services/ASC.Data.Backup/Core/NotifyHelper.cs index 8b6ca0507c..034606d2b4 100644 --- a/common/services/ASC.Data.Backup/Core/NotifyHelper.cs +++ b/common/services/ASC.Data.Backup/Core/NotifyHelper.cs @@ -120,14 +120,12 @@ namespace ASC.Data.Backup private void MigrationNotify(Tenant tenant, INotifyAction action, string region, string url, bool notify) { using var scope = ServiceProvider.CreateScope(); - var userManager = scope.ServiceProvider.GetService(); - var studioNotifyHelper = scope.ServiceProvider.GetService(); - var notifySource = scope.ServiceProvider.GetService(); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(notifySource, scope); + var scopeClass = scope.ServiceProvider.GetService(); + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifySource, scope); - var users = userManager.GetUsers() + var users = scopeClass.UserManager.GetUsers() .Where(u => notify ? u.ActivationStatus.HasFlag(EmployeeActivationStatus.Activated) : u.IsOwner(tenant)) - .Select(u => studioNotifyHelper.ToRecipient(u.ID)) + .Select(u => scopeClass.StudioNotifyHelper.ToRecipient(u.ID)) .ToArray(); if (users.Any()) diff --git a/common/services/ASC.Data.Backup/Service/BackupWorker.cs b/common/services/ASC.Data.Backup/Service/BackupWorker.cs index 8efe6f5ffd..44a5419153 100644 --- a/common/services/ASC.Data.Backup/Service/BackupWorker.cs +++ b/common/services/ASC.Data.Backup/Service/BackupWorker.cs @@ -369,20 +369,16 @@ namespace ASC.Data.Backup.Service } using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - var backupStorageFactory = scope.ServiceProvider.GetService(); - var backupRepository = scope.ServiceProvider.GetService(); - var notifyHelper = scope.ServiceProvider.GetService(); - var backupWorker = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); - var tenant = tenantManager.GetTenant(TenantId); + var tenant = scopeClass.TenantManager.GetTenant(TenantId); var backupName = string.Format("{0}_{1:yyyy-MM-dd_HH-mm-ss}.{2}", tenant.TenantAlias, DateTime.UtcNow, ArchiveFormat); var tempFile = Path.Combine(TempFolder, backupName); var storagePath = tempFile; try { - var backupTask = scope.ServiceProvider.GetService(); + var backupTask = scopeClass.BackupPortalTask; backupTask.Init(TenantId, ConfigPaths[CurrentRegion], tempFile, Limit); if (!BackupMail) @@ -393,19 +389,19 @@ namespace ASC.Data.Backup.Service backupTask.ProgressChanged += (sender, args) => { Percentage = 0.9 * args.Progress; - backupWorker.PublishProgress(this); + scopeClass.BackupWorker.PublishProgress(this); }; backupTask.RunJob(); - var backupStorage = backupStorageFactory.GetBackupStorage(StorageType, TenantId, StorageParams); + var backupStorage = scopeClass.BackupStorageFactory.GetBackupStorage(StorageType, TenantId, StorageParams); if (backupStorage != null) { storagePath = backupStorage.Upload(StorageBasePath, tempFile, UserId); Link = backupStorage.GetPublicLink(storagePath); } - var repo = backupRepository; + var repo = scopeClass.BackupRepository; repo.SaveBackupRecord( new BackupRecord { @@ -425,11 +421,11 @@ namespace ASC.Data.Backup.Service if (UserId != Guid.Empty && !IsScheduled) { - notifyHelper.SendAboutBackupCompleted(UserId); + scopeClass.NotifyHelper.SendAboutBackupCompleted(UserId); } IsCompleted = true; - backupWorker.PublishProgress(this); + scopeClass.BackupWorker.PublishProgress(this); } catch (Exception error) { @@ -441,7 +437,7 @@ namespace ASC.Data.Backup.Service { try { - backupWorker.PublishProgress(this); + scopeClass.BackupWorker.PublishProgress(this); } catch (Exception error) { @@ -505,35 +501,32 @@ namespace ASC.Data.Backup.Service public override void RunJob() { using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - var backupStorageFactory = scope.ServiceProvider.GetService(); - var notifyHelper = scope.ServiceProvider.GetService(); - var backupWorker = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); Tenant tenant = null; var tempFile = PathHelper.GetTempFileName(TempFolder); try { - tenant = tenantManager.GetTenant(TenantId); - notifyHelper.SendAboutRestoreStarted(tenant, Notify); - var storage = backupStorageFactory.GetBackupStorage(StorageType, TenantId, StorageParams); + tenant = scopeClass.TenantManager.GetTenant(TenantId); + scopeClass.NotifyHelper.SendAboutRestoreStarted(tenant, Notify); + var storage = scopeClass.BackupStorageFactory.GetBackupStorage(StorageType, TenantId, StorageParams); storage.Download(StoragePath, tempFile); Percentage = 10; tenant.SetStatus(TenantStatus.Restoring); - tenantManager.SaveTenant(tenant); + scopeClass.TenantManager.SaveTenant(tenant); var columnMapper = new ColumnMapper(); columnMapper.SetMapping("tenants_tenants", "alias", tenant.TenantAlias, ((Guid)Id).ToString("N")); columnMapper.Commit(); - var restoreTask = scope.ServiceProvider.GetService(); + var restoreTask = scopeClass.RestorePortalTask; restoreTask.Init(ConfigPaths[CurrentRegion], tempFile, TenantId, columnMapper, UpgradesPath); restoreTask.ProgressChanged += (sender, args) => { Percentage = Percentage = (10d + 0.65 * args.Progress); - backupWorker.PublishProgress(this); + scopeClass.BackupWorker.PublishProgress(this); }; restoreTask.RunJob(); @@ -544,18 +537,18 @@ namespace ASC.Data.Backup.Service if (Notify) { AscCacheNotify.OnClearCache(); - var tenants = tenantManager.GetTenants(); + var tenants = scopeClass.TenantManager.GetTenants(); foreach (var t in tenants) { - notifyHelper.SendAboutRestoreCompleted(t, Notify); + scopeClass.NotifyHelper.SendAboutRestoreCompleted(t, Notify); } } } else { - tenantManager.RemoveTenant(tenant.TenantId); + scopeClass.TenantManager.RemoveTenant(tenant.TenantId); - restoredTenant = tenantManager.GetTenant(columnMapper.GetTenantMapping()); + restoredTenant = scopeClass.TenantManager.GetTenant(columnMapper.GetTenantMapping()); restoredTenant.SetStatus(TenantStatus.Active); restoredTenant.TenantAlias = tenant.TenantAlias; restoredTenant.PaymentId = string.Empty; @@ -563,22 +556,22 @@ namespace ASC.Data.Backup.Service { restoredTenant.MappedDomain = tenant.MappedDomain; } - tenantManager.SaveTenant(restoredTenant); + scopeClass.TenantManager.SaveTenant(restoredTenant); // sleep until tenants cache expires Thread.Sleep(TimeSpan.FromMinutes(2)); - notifyHelper.SendAboutRestoreCompleted(restoredTenant, Notify); + scopeClass.NotifyHelper.SendAboutRestoreCompleted(restoredTenant, Notify); } Percentage = 75; - backupWorker.PublishProgress(this); + scopeClass.BackupWorker.PublishProgress(this); File.Delete(tempFile); Percentage = 100; - backupWorker.PublishProgress(this); + scopeClass.BackupWorker.PublishProgress(this); } catch (Exception error) { @@ -588,14 +581,14 @@ namespace ASC.Data.Backup.Service if (tenant != null) { tenant.SetStatus(TenantStatus.Active); - tenantManager.SaveTenant(tenant); + scopeClass.TenantManager.SaveTenant(tenant); } } finally { try { - backupWorker.PublishProgress(this); + scopeClass.BackupWorker.PublishProgress(this); } catch (Exception error) { @@ -667,23 +660,21 @@ namespace ASC.Data.Backup.Service public override void RunJob() { using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - var notifyHelper = scope.ServiceProvider.GetService(); - var backupWorker = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var tempFile = PathHelper.GetTempFileName(TempFolder); - var tenant = tenantManager.GetTenant(TenantId); + var tenant = scopeClass.TenantManager.GetTenant(TenantId); var alias = tenant.TenantAlias; try { - notifyHelper.SendAboutTransferStart(tenant, TargetRegion, Notify); - var transferProgressItem = scope.ServiceProvider.GetService(); + scopeClass.NotifyHelper.SendAboutTransferStart(tenant, TargetRegion, Notify); + var transferProgressItem = scopeClass.TransferPortalTask; transferProgressItem.Init(TenantId, ConfigPaths[CurrentRegion], ConfigPaths[TargetRegion], Limit, TempFolder); transferProgressItem.ProgressChanged += (sender, args) => { Percentage = args.Progress; - backupWorker.PublishProgress(this); + scopeClass.BackupWorker.PublishProgress(this); }; if (!TransferMail) { @@ -692,8 +683,8 @@ namespace ASC.Data.Backup.Service transferProgressItem.RunJob(); Link = GetLink(alias, false); - notifyHelper.SendAboutTransferComplete(tenant, TargetRegion, Link, !Notify); - backupWorker.PublishProgress(this); + scopeClass.NotifyHelper.SendAboutTransferComplete(tenant, TargetRegion, Link, !Notify); + scopeClass.BackupWorker.PublishProgress(this); } catch (Exception error) { @@ -701,13 +692,13 @@ namespace ASC.Data.Backup.Service Error = error; Link = GetLink(alias, true); - notifyHelper.SendAboutTransferError(tenant, TargetRegion, Link, !Notify); + scopeClass.NotifyHelper.SendAboutTransferError(tenant, TargetRegion, Link, !Notify); } finally { try { - backupWorker.PublishProgress(this); + scopeClass.BackupWorker.PublishProgress(this); } catch (Exception error) { @@ -735,13 +726,19 @@ namespace ASC.Data.Backup.Service public class FactoryProgressItem { - public IServiceProvider ServiceProvider { get; set; } + public BackupProgressItem BackupProgressItem { get; set; } + public RestoreProgressItem RestoreProgressItem { get; set; } + public TransferProgressItem TransferProgressItem { get; set; } public FactoryProgressItem( - IServiceProvider serviceProvider + BackupProgressItem backupProgressItem, + RestoreProgressItem restoreProgressItem, + TransferProgressItem transferProgressItem ) { - ServiceProvider = serviceProvider; + BackupProgressItem = backupProgressItem; + RestoreProgressItem = restoreProgressItem; + TransferProgressItem = transferProgressItem; } public BackupProgressItem CreateBackupProgressItem( @@ -752,9 +749,9 @@ namespace ASC.Data.Backup.Service string currentRegion, Dictionary configPaths) { - var item = ServiceProvider.GetService(); - item.Init(request, isScheduled, tempFolder, limit, currentRegion, configPaths); - return item; + + BackupProgressItem.Init(request, isScheduled, tempFolder, limit, currentRegion, configPaths); + return BackupProgressItem; } public BackupProgressItem CreateBackupProgressItem( @@ -766,9 +763,9 @@ namespace ASC.Data.Backup.Service Dictionary configPaths ) { - var item = ServiceProvider.GetService(); - item.Init(schedule, isScheduled, tempFolder, limit, currentRegion, configPaths); - return item; + + BackupProgressItem.Init(schedule, isScheduled, tempFolder, limit, currentRegion, configPaths); + return BackupProgressItem; } public RestoreProgressItem CreateRestoreProgressItem( StartRestoreRequest request, @@ -778,9 +775,9 @@ namespace ASC.Data.Backup.Service Dictionary configPaths ) { - var item = ServiceProvider.GetService(); - item.Init(request, tempFolder, upgradesPath, currentRegion, configPaths); - return item; + + RestoreProgressItem.Init(request, tempFolder, upgradesPath, currentRegion, configPaths); + return RestoreProgressItem; } public TransferProgressItem CreateTransferProgressItem( @@ -794,9 +791,38 @@ namespace ASC.Data.Backup.Service Dictionary configPaths ) { - var item = ServiceProvider.GetService(); - item.Init(targetRegion, transferMail, tenantId, tempFolder, limit, notify, currentRegion, configPaths); - return item; + TransferProgressItem.Init(targetRegion, transferMail, tenantId, tempFolder, limit, notify, currentRegion, configPaths); + return TransferProgressItem; + } + } + internal class Scope + { + internal TenantManager TenantManager { get; } + internal BackupStorageFactory BackupStorageFactory { get; } + internal NotifyHelper NotifyHelper { get; } + internal BackupRepository BackupRepository { get; } + internal BackupWorker BackupWorker { get; } + internal BackupPortalTask BackupPortalTask { get; } + internal RestorePortalTask RestorePortalTask { get; } + internal TransferPortalTask TransferPortalTask { get; } + + public Scope(TenantManager tenantManager, + BackupStorageFactory backupStorageFactory, + NotifyHelper notifyHelper, + BackupRepository backupRepository, + BackupWorker backupWorker, + BackupPortalTask backupPortalTask, + RestorePortalTask restorePortalTask, + TransferPortalTask transferPortalTask) + { + TenantManager = tenantManager; + BackupStorageFactory = backupStorageFactory; + NotifyHelper = notifyHelper; + BackupRepository = backupRepository; + BackupWorker = backupWorker; + BackupPortalTask = backupPortalTask; + RestorePortalTask = restorePortalTask; + TransferPortalTask = transferPortalTask; } } public static class BackupWorkerExtension diff --git a/common/services/ASC.ElasticSearch/Service/Launcher.cs b/common/services/ASC.ElasticSearch/Service/Launcher.cs index c498898430..28c147e9f6 100644 --- a/common/services/ASC.ElasticSearch/Service/Launcher.cs +++ b/common/services/ASC.ElasticSearch/Service/Launcher.cs @@ -92,10 +92,9 @@ namespace ASC.ElasticSearch var task = new Task(async () => { using var scope = ServiceProvider.CreateScope(); - var factoryIndexer = scope.ServiceProvider.GetService(); - var service = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); - while (!factoryIndexer.CheckState(false)) + while (!scopeClass.FactoryIndexer.CheckState(false)) { if (CancellationTokenSource.IsCancellationRequested) { @@ -105,7 +104,7 @@ namespace ASC.ElasticSearch await Task.Delay(10000); } - service.Subscribe(); + scopeClass.Service.Subscribe(); Timer = new Timer(_ => IndexAll(), null, TimeSpan.Zero, TimeSpan.Zero); }, CancellationTokenSource.Token, TaskCreationOptions.LongRunning); @@ -179,6 +178,19 @@ namespace ASC.ElasticSearch Log.ErrorFormat("Product {0}", product.IndexName); } } + + class Scope + { + internal FactoryIndexer FactoryIndexer { get; } + internal Service.Service Service { get; } + + public Scope(FactoryIndexer factoryIndexer, Service.Service service) + { + FactoryIndexer = factoryIndexer; + Service = service; + } + } + } public static class ServiceLauncherExtension diff --git a/common/services/ASC.ElasticSearch/Service/Service.cs b/common/services/ASC.ElasticSearch/Service/Service.cs index 01f3d8ea5b..8a0ba2c6b7 100644 --- a/common/services/ASC.ElasticSearch/Service/Service.cs +++ b/common/services/ASC.ElasticSearch/Service/Service.cs @@ -87,14 +87,23 @@ namespace ASC.ElasticSearch.Service { using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - tenantManager.SetCurrentTenant(tenant); - - var settingsManager = scope.ServiceProvider.GetService(); - settingsManager.ClearCache(); + var scopeClass = scope.ServiceProvider.GetService(); + scopeClass.TenantManager.SetCurrentTenant(tenant); + scopeClass.SettingsManager.ClearCache(); }); } + class Scope + { + internal TenantManager TenantManager { get; } + internal SettingsManager SettingsManager { get; } + + public Scope(TenantManager tenantManager, SettingsManager settingsManager) + { + TenantManager = tenantManager; + SettingsManager = settingsManager; + } + } //public State GetState() //{ // return new State diff --git a/common/services/ASC.Feed.Aggregator/Service/FeedAggregatorService.cs b/common/services/ASC.Feed.Aggregator/Service/FeedAggregatorService.cs index e939bacf6a..823de8ce65 100644 --- a/common/services/ASC.Feed.Aggregator/Service/FeedAggregatorService.cs +++ b/common/services/ASC.Feed.Aggregator/Service/FeedAggregatorService.cs @@ -116,11 +116,8 @@ namespace ASC.Feed.Aggregator { var cfg = FeedSettings.GetInstance(Configuration); using var scope = ServiceProvider.CreateScope(); - var commonLinkUtility = scope.ServiceProvider.GetService(); - commonLinkUtility.Initialize(cfg.ServerRoot); - - var tenantManager = scope.ServiceProvider.GetService(); - var feedAggregateDataProvider = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); + scopeClass.BaseCommonLinkUtility.Initialize(cfg.ServerRoot); var start = DateTime.UtcNow; Log.DebugFormat("Start of collecting feeds..."); @@ -132,7 +129,7 @@ namespace ASC.Feed.Aggregator foreach (var module in modules) { var result = new List(); - var fromTime = feedAggregateDataProvider.GetLastTimeAggregate(module.GetType().Name); + var fromTime = scopeClass.FeedAggregateDataProvider.GetLastTimeAggregate(module.GetType().Name); if (fromTime == default) fromTime = DateTime.UtcNow.Subtract((TimeSpan)interval); var toTime = DateTime.UtcNow; @@ -150,16 +147,13 @@ namespace ASC.Feed.Aggregator try { - if (tenantManager.GetTenant(tenant) == null) + if (scopeClass.TenantManager.GetTenant(tenant) == null) { continue; } - tenantManager.SetCurrentTenant(tenant); - var userManager = scope.ServiceProvider.GetService(); - var securityContext = scope.ServiceProvider.GetService(); - var authManager = scope.ServiceProvider.GetService(); - var users = userManager.GetUsers(); + scopeClass.TenantManager.SetCurrentTenant(tenant); + var users = scopeClass.UserManager.GetUsers(); var feeds = Attempt(10, () => module.GetFeeds(new FeedFilter(fromTime, toTime) { Tenant = tenant }).Where(r => r.Item1 != null).ToList()); Log.DebugFormat("{0} feeds in {1} tenant.", feeds.Count, tenant); @@ -180,7 +174,7 @@ namespace ASC.Feed.Aggregator { return; } - if (!TryAuthenticate(securityContext, authManager, tenant1, u.ID)) + if (!TryAuthenticate(scopeClass.SecurityContext, scopeClass.AuthManager, tenant1, u.ID)) { continue; } @@ -196,7 +190,7 @@ namespace ASC.Feed.Aggregator } } - feedAggregateDataProvider.SaveFeeds(result, module.GetType().Name, toTime); + scopeClass.FeedAggregateDataProvider.SaveFeeds(result, module.GetType().Name, toTime); foreach (var res in result) { @@ -286,6 +280,31 @@ namespace ASC.Feed.Aggregator return false; } } + + class Scope + { + internal BaseCommonLinkUtility BaseCommonLinkUtility { get; } + internal TenantManager TenantManager { get; } + internal FeedAggregateDataProvider FeedAggregateDataProvider { get; } + internal UserManager UserManager { get; } + internal SecurityContext SecurityContext { get; } + internal AuthManager AuthManager { get; } + + public Scope(BaseCommonLinkUtility baseCommonLinkUtility, + TenantManager tenantManager, + FeedAggregateDataProvider feedAggregateDataProvider, + UserManager userManager, + SecurityContext securityContext, + AuthManager authManager) + { + BaseCommonLinkUtility = baseCommonLinkUtility; + TenantManager = tenantManager; + FeedAggregateDataProvider = feedAggregateDataProvider; + UserManager = userManager; + SecurityContext = securityContext; + AuthManager = authManager; + } + } } public static class FeedAggregatorServiceExtension diff --git a/common/services/ASC.Notify/NotifyService.cs b/common/services/ASC.Notify/NotifyService.cs index 52e498de9e..bc27060c62 100644 --- a/common/services/ASC.Notify/NotifyService.cs +++ b/common/services/ASC.Notify/NotifyService.cs @@ -79,6 +79,7 @@ namespace ASC.Notify log.Error(e); } } + public void InvokeSendMethod(string service, string method, int tenant, params object[] parameters) { @@ -98,11 +99,9 @@ namespace ASC.Notify } using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - var tenantWhiteLabelSettingsHelper = scope.ServiceProvider.GetService(); - var settingsManager = scope.ServiceProvider.GetService(); - tenantManager.SetCurrentTenant(tenant); - tenantWhiteLabelSettingsHelper.Apply(settingsManager.Load(), tenant); + var scopeClass = scope.ServiceProvider.GetService(); + scopeClass.TenantManager.SetCurrentTenant(tenant); + scopeClass.TenantWhiteLabelSettingsHelper.Apply(scopeClass.SettingsManager.Load(), tenant); methodInfo.Invoke(instance, parameters); } @@ -123,4 +122,18 @@ namespace ASC.Notify .AddDbWorker(); } } + + class Scope + { + internal TenantManager TenantManager { get; } + internal TenantWhiteLabelSettingsHelper TenantWhiteLabelSettingsHelper { get; } + internal SettingsManager SettingsManager { get; } + + public Scope(TenantManager tenantManager, TenantWhiteLabelSettingsHelper tenantWhiteLabelSettingsHelper, SettingsManager settingsManager) + { + TenantManager = tenantManager; + TenantWhiteLabelSettingsHelper = tenantWhiteLabelSettingsHelper; + SettingsManager = settingsManager; + } + } } diff --git a/products/ASC.Files/Core/ASC.Files.Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs b/products/ASC.Files/Core/ASC.Files.Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs index 79cfeaac10..820a4bf42c 100644 --- a/products/ASC.Files/Core/ASC.Files.Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs +++ b/products/ASC.Files/Core/ASC.Files.Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs @@ -125,17 +125,17 @@ namespace ASC.Files.Thirdparty.ProviderDao toFolderId, toSelector.GetFileDao(toFolderId), toSelector.ConvertId, deleteSourceFile); } - + protected File PerformCrossDaoFileCopy(string fromFileId, int toFolderId, bool deleteSourceFile) { var fromSelector = GetSelector(fromFileId); using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - tenantManager.SetCurrentTenant(TenantID); + var scopeClass = scope.ServiceProvider.GetService(); + scopeClass.TenantManager.SetCurrentTenant(TenantID); return CrossDao.PerformCrossDaoFileCopy( fromFileId, fromSelector.GetFileDao(fromFileId), fromSelector.ConvertId, - toFolderId, scope.ServiceProvider.GetService>(), r => r, + toFolderId, scopeClass.FileDao, r => r, deleteSourceFile); } @@ -153,17 +153,32 @@ namespace ASC.Files.Thirdparty.ProviderDao protected Folder PerformCrossDaoFolderCopy(string fromFolderId, int toRootFolderId, bool deleteSourceFolder, CancellationToken? cancellationToken) { var fromSelector = GetSelector(fromFolderId); - using var scope = ServiceProvider.CreateScope(); + using var scope = ServiceProvider.CreateScope(); + var scopeClass = scope.ServiceProvider.GetService(); return CrossDao.PerformCrossDaoFolderCopy( fromFolderId, fromSelector.GetFolderDao(fromFolderId), fromSelector.GetFileDao(fromFolderId), fromSelector.ConvertId, - toRootFolderId, scope.ServiceProvider.GetService(), scope.ServiceProvider.GetService>(), r => r, + toRootFolderId, scopeClass.FolderDao, scopeClass.FileDao, r => r, deleteSourceFolder, cancellationToken); } public void Dispose() { Selectors.ForEach(r => r.Dispose()); + } + + class Scope + { + internal TenantManager TenantManager { get; } + internal FolderDao FolderDao { get; } + internal IFileDao FileDao { get; } + + public Scope(TenantManager tenantManager, FolderDao folderDao, IFileDao fileDao) + { + TenantManager = tenantManager; + FolderDao = folderDao; + FileDao = fileDao; + } } } diff --git a/products/ASC.Files/Core/ASC.Files.Core/Services/DocumentService/DocbuilderReportsUtility.cs b/products/ASC.Files/Core/ASC.Files.Core/Services/DocumentService/DocbuilderReportsUtility.cs index b0a6ed2f90..dac5e9ff88 100644 --- a/products/ASC.Files/Core/ASC.Files.Core/Services/DocumentService/DocbuilderReportsUtility.cs +++ b/products/ASC.Files/Core/ASC.Files.Core/Services/DocumentService/DocbuilderReportsUtility.cs @@ -150,19 +150,15 @@ namespace ASC.Web.Files.Services.DocumentService }; } - + public void GenerateReport(DistributedTask task, CancellationToken cancellationToken) { using var scope = ServiceProvider.CreateScope(); - var logger = scope.ServiceProvider.GetService>().CurrentValue; - + var scopeClass = scope.ServiceProvider.GetService(); + var logger = scopeClass.Options.CurrentValue; try { - var tenantManager = scope.ServiceProvider.GetService(); - tenantManager.SetCurrentTenant(TenantId); - var authContext = scope.ServiceProvider.GetService(); - var securityContext = scope.ServiceProvider.GetService(); - var documentServiceConnector = scope.ServiceProvider.GetService(); + scopeClass.TenantManager.SetCurrentTenant(TenantId); Status = ReportStatus.Started; PublishTaskInfo(logger); @@ -174,10 +170,10 @@ namespace ASC.Web.Files.Services.DocumentService // new HttpResponse(new System.IO.StringWriter())); //} - tenantManager.SetCurrentTenant(TenantId); - securityContext.AuthenticateMe(UserId); + scopeClass.TenantManager.SetCurrentTenant(TenantId); + scopeClass.SecurityContext.AuthenticateMe(UserId); - BuilderKey = documentServiceConnector.DocbuilderRequest(null, Script, true, out var urls); + BuilderKey = scopeClass.DocumentServiceConnector.DocbuilderRequest(null, Script, true, out var urls); while (true) { @@ -187,7 +183,7 @@ namespace ASC.Web.Files.Services.DocumentService } Task.Delay(1500, cancellationToken).Wait(cancellationToken); - var builderKey = documentServiceConnector.DocbuilderRequest(BuilderKey, null, true, out urls); + var builderKey = scopeClass.DocumentServiceConnector.DocbuilderRequest(BuilderKey, null, true, out urls); if (builderKey == null) throw new NullReferenceException(); @@ -252,6 +248,25 @@ namespace ASC.Web.Files.Services.DocumentService TaskInfo.SetProperty("reportOrigin", Origin); TaskInfo.SetProperty("exception", Exception); } + + class Scope + { + internal IOptionsMonitor Options { get; } + internal TenantManager TenantManager { get; } + internal AuthContext AuthContext { get; } + internal SecurityContext SecurityContext { get; } + internal DocumentServiceConnector DocumentServiceConnector { get; } + + public Scope(IOptionsMonitor options, TenantManager tenantManager, AuthContext authContext, SecurityContext securityContext, DocumentServiceConnector documentServiceConnector) + { + Options = options; + TenantManager = tenantManager; + AuthContext = authContext; + SecurityContext = securityContext; + DocumentServiceConnector = documentServiceConnector; + } + + } } public class DocbuilderReportsUtility diff --git a/products/ASC.Files/Core/ASC.Files.Core/Services/NotifyService/NotifyClient.cs b/products/ASC.Files/Core/ASC.Files.Core/Services/NotifyService/NotifyClient.cs index d95c8f048f..24f633ff7d 100644 --- a/products/ASC.Files/Core/ASC.Files.Core/Services/NotifyService/NotifyClient.cs +++ b/products/ASC.Files/Core/ASC.Files.Core/Services/NotifyService/NotifyClient.cs @@ -51,25 +51,21 @@ namespace ASC.Web.Files.Services.NotifyService { ServiceProvider = serviceProvider; } - + public void SendDocuSignComplete(File file, string sourceTitle) { using var scope = ServiceProvider.CreateScope(); - var notifySource = scope.ServiceProvider.GetService(); - var securityContext = scope.ServiceProvider.GetService(); - var filesLinkUtility = scope.ServiceProvider.GetService(); - var fileUtility = scope.ServiceProvider.GetService(); - var baseCommonLinkUtility = scope.ServiceProvider.GetService(); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(notifySource, scope); + var scopeClass = scope.ServiceProvider.GetService(); + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.NotifySource, scope); - var recipient = notifySource.GetRecipientsProvider().GetRecipient(securityContext.CurrentAccount.ID.ToString()); + var recipient = scopeClass.NotifySource.GetRecipientsProvider().GetRecipient(scopeClass.SecurityContext.CurrentAccount.ID.ToString()); client.SendNoticeAsync( NotifyConstants.Event_DocuSignComplete, file.UniqID, recipient, true, - new TagValue(NotifyConstants.Tag_DocumentUrl, baseCommonLinkUtility.GetFullAbsolutePath(filesLinkUtility.GetFileWebPreviewUrl(fileUtility, file.Title, file.ID))), + new TagValue(NotifyConstants.Tag_DocumentUrl, scopeClass.BaseCommonLinkUtility.GetFullAbsolutePath(scopeClass.FilesLinkUtility.GetFileWebPreviewUrl(scopeClass.FileUtility, file.Title, file.ID))), new TagValue(NotifyConstants.Tag_DocumentTitle, file.Title), new TagValue(NotifyConstants.Tag_Message, sourceTitle) ); @@ -78,11 +74,10 @@ namespace ASC.Web.Files.Services.NotifyService public void SendDocuSignStatus(string subject, string status) { using var scope = ServiceProvider.CreateScope(); - var notifySource = scope.ServiceProvider.GetService(); - var securityContext = scope.ServiceProvider.GetService(); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(notifySource, scope); + var scopeClass = scope.ServiceProvider.GetService(); + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.NotifySource, scope); - var recipient = notifySource.GetRecipientsProvider().GetRecipient(securityContext.CurrentAccount.ID.ToString()); + var recipient = scopeClass.NotifySource.GetRecipientsProvider().GetRecipient(scopeClass.SecurityContext.CurrentAccount.ID.ToString()); client.SendNoticeAsync( NotifyConstants.Event_DocuSignStatus, @@ -117,30 +112,23 @@ namespace ASC.Web.Files.Services.NotifyService if (fileEntry == null || recipients.Count == 0) return; using var scope = ServiceProvider.CreateScope(); - var notifySource = scope.ServiceProvider.GetService(); - var daoFactory = scope.ServiceProvider.GetService(); - var filesLinkUtility = scope.ServiceProvider.GetService(); - var fileUtility = scope.ServiceProvider.GetService(); - var pathProvider = scope.ServiceProvider.GetService(); - var userManager = scope.ServiceProvider.GetService(); - var tenantManager = scope.ServiceProvider.GetService(); - var baseCommonLinkUtility = scope.ServiceProvider.GetService(); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(notifySource, scope); + var scopeClass = scope.ServiceProvider.GetService(); + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.NotifySource, scope); - var folderDao = daoFactory.GetFolderDao(); + var folderDao = scopeClass.DaoFactory.GetFolderDao(); if (fileEntry.FileEntryType == FileEntryType.File && folderDao.GetFolder(((File)fileEntry).FolderID) == null) return; var url = fileEntry.FileEntryType == FileEntryType.File - ? filesLinkUtility.GetFileWebPreviewUrl(fileUtility, fileEntry.Title, fileEntry.ID) - : pathProvider.GetFolderUrl(((Folder)fileEntry)); + ? scopeClass.FilesLinkUtility.GetFileWebPreviewUrl(scopeClass.FileUtility, fileEntry.Title, fileEntry.ID) + : scopeClass.PathProvider.GetFolderUrl(((Folder)fileEntry)); - var recipientsProvider = notifySource.GetRecipientsProvider(); + var recipientsProvider = scopeClass.NotifySource.GetRecipientsProvider(); foreach (var recipientPair in recipients) { - var u = userManager.GetUsers(recipientPair.Key); + var u = scopeClass.UserManager.GetUsers(recipientPair.Key); var culture = string.IsNullOrEmpty(u.CultureName) - ? tenantManager.GetCurrentTenant().GetCulture() + ? scopeClass.TenantManager.GetCurrentTenant().GetCulture() : CultureInfo.GetCultureInfo(u.CultureName); var aceString = GetAccessString(recipientPair.Value, culture); @@ -153,7 +141,7 @@ namespace ASC.Web.Files.Services.NotifyService true, new TagValue(NotifyConstants.Tag_DocumentTitle, fileEntry.Title), new TagValue(NotifyConstants.Tag_FolderID, fileEntry.ID), - new TagValue(NotifyConstants.Tag_DocumentUrl, baseCommonLinkUtility.GetFullAbsolutePath(url)), + new TagValue(NotifyConstants.Tag_DocumentUrl, scopeClass.BaseCommonLinkUtility.GetFullAbsolutePath(url)), new TagValue(NotifyConstants.Tag_AccessRights, aceString), new TagValue(NotifyConstants.Tag_Message, message.HtmlEncode()) ); @@ -165,16 +153,14 @@ namespace ASC.Web.Files.Services.NotifyService if (file == null || recipientIds.Count == 0) return; using var scope = ServiceProvider.CreateScope(); - var notifySource = scope.ServiceProvider.GetService(); - var userManager = scope.ServiceProvider.GetService(); - var baseCommonLinkUtility = scope.ServiceProvider.GetService(); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(notifySource, scope); + var scopeClass = scope.ServiceProvider.GetService(); + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.NotifySource, scope); - var recipientsProvider = notifySource.GetRecipientsProvider(); + var recipientsProvider = scopeClass.NotifySource.GetRecipientsProvider(); foreach (var recipientId in recipientIds) { - var u = userManager.GetUsers(recipientId); + var u = scopeClass.UserManager.GetUsers(recipientId); var recipient = recipientsProvider.GetRecipient(u.ID.ToString()); @@ -184,7 +170,7 @@ namespace ASC.Web.Files.Services.NotifyService recipient, true, new TagValue(NotifyConstants.Tag_DocumentTitle, file.Title), - new TagValue(NotifyConstants.Tag_DocumentUrl, baseCommonLinkUtility.GetFullAbsolutePath(documentUrl)), + new TagValue(NotifyConstants.Tag_DocumentUrl, scopeClass.BaseCommonLinkUtility.GetFullAbsolutePath(documentUrl)), new TagValue(NotifyConstants.Tag_Message, message.HtmlEncode()) ); } @@ -207,6 +193,40 @@ namespace ASC.Web.Files.Services.NotifyService default: return string.Empty; } + } + + class Scope + { + internal NotifySource NotifySource { get; } + internal SecurityContext SecurityContext { get; } + internal FilesLinkUtility FilesLinkUtility { get; } + internal FileUtility FileUtility { get; } + internal BaseCommonLinkUtility BaseCommonLinkUtility { get; } + internal IDaoFactory DaoFactory { get; } + internal PathProvider PathProvider { get; } + internal UserManager UserManager { get; } + internal TenantManager TenantManager { get; } + + public Scope(NotifySource notifySource, + SecurityContext securityContext, + FilesLinkUtility filesLinkUtility, + FileUtility fileUtility, + BaseCommonLinkUtility baseCommonLinkUtility, + IDaoFactory daoFactory, + PathProvider pathProvider, + UserManager userManager, + TenantManager tenantManager) + { + NotifySource = notifySource; + SecurityContext = securityContext; + FilesLinkUtility = filesLinkUtility; + FileUtility = fileUtility; + BaseCommonLinkUtility = baseCommonLinkUtility; + DaoFactory = daoFactory; + PathProvider = pathProvider; + UserManager = userManager; + TenantManager = tenantManager; + } } } diff --git a/products/ASC.Files/Core/ASC.Files.Core/Services/WCFService/FileOperations/FileDeleteOperation.cs b/products/ASC.Files/Core/ASC.Files.Core/Services/WCFService/FileOperations/FileDeleteOperation.cs index 2576512888..7b1e870168 100644 --- a/products/ASC.Files/Core/ASC.Files.Core/Services/WCFService/FileOperations/FileDeleteOperation.cs +++ b/products/ASC.Files/Core/ASC.Files.Core/Services/WCFService/FileOperations/FileDeleteOperation.cs @@ -120,11 +120,10 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations DeleteFiles(Files, scope); DeleteFolders(Folders, scope); } - + private void DeleteFolders(IEnumerable folderIds, IServiceScope scope) { - var fileMarker = scope.ServiceProvider.GetService(); - var filesMessageService = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); foreach (var folderId in folderIds) { @@ -150,13 +149,13 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations { canCalculate = FolderDao.CanCalculateSubitems(folderId) ? default : folderId; - fileMarker.RemoveMarkAsNewForAll(folder); + scopeClass.FileMarker.RemoveMarkAsNewForAll(folder); if (folder.ProviderEntry && folder.ID.Equals(folder.RootFolderId)) { if (ProviderDao != null) { ProviderDao.RemoveProviderInfo(folder.ProviderId); - filesMessageService.Send(folder, _headers, MessageAction.ThirdPartyDeleted, folder.ID.ToString(), folder.ProviderKey); + scopeClass.FilesMessageService.Send(folder, _headers, MessageAction.ThirdPartyDeleted, folder.ID.ToString(), folder.ProviderKey); } ProcessedFolder(folderId); @@ -172,7 +171,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations if (FolderDao.IsEmpty(folder.ID)) { FolderDao.DeleteFolder(folder.ID); - filesMessageService.Send(folder, _headers, MessageAction.FolderDeleted, folder.Title); + scopeClass.FilesMessageService.Send(folder, _headers, MessageAction.FolderDeleted, folder.Title); ProcessedFolder(folderId); } @@ -189,12 +188,12 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations if (immediately) { FolderDao.DeleteFolder(folder.ID); - filesMessageService.Send(folder, _headers, MessageAction.FolderDeleted, folder.Title); + scopeClass.FilesMessageService.Send(folder, _headers, MessageAction.FolderDeleted, folder.Title); } else { FolderDao.MoveFolder(folder.ID, _trashId, CancellationToken); - filesMessageService.Send(folder, _headers, MessageAction.FolderMovedToTrash, folder.Title); + scopeClass.FilesMessageService.Send(folder, _headers, MessageAction.FolderMovedToTrash, folder.Title); } ProcessedFolder(folderId); @@ -208,8 +207,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations private void DeleteFiles(IEnumerable fileIds, IServiceScope scope) { - var fileMarker = scope.ServiceProvider.GetService(); - var filesMessageService = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); foreach (var fileId in fileIds) { @@ -226,18 +224,18 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations } else { - fileMarker.RemoveMarkAsNewForAll(file); + scopeClass.FileMarker.RemoveMarkAsNewForAll(file); if (!_immediately && FileDao.UseTrashForRemove(file)) { FileDao.MoveFile(file.ID, _trashId); - filesMessageService.Send(file, _headers, MessageAction.FileMovedToTrash, file.Title); + scopeClass.FilesMessageService.Send(file, _headers, MessageAction.FileMovedToTrash, file.Title); } else { try { FileDao.DeleteFile(file.ID); - filesMessageService.Send(file, _headers, MessageAction.FileDeleted, file.Title); + scopeClass.FilesMessageService.Send(file, _headers, MessageAction.FileDeleted, file.Title); } catch (Exception ex) { @@ -276,5 +274,17 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations } return false; } + + class Scope + { + internal FileMarker FileMarker { get; } + internal FilesMessageService FilesMessageService { get; } + + public Scope(FileMarker fileMarker, FilesMessageService filesMessageService) + { + FileMarker = fileMarker; + FilesMessageService = filesMessageService; + } + } } } \ No newline at end of file diff --git a/products/ASC.Files/Core/ASC.Files.Core/Services/WCFService/FileOperations/FileDownloadOperation.cs b/products/ASC.Files/Core/ASC.Files.Core/Services/WCFService/FileOperations/FileDownloadOperation.cs index 58564aa8e8..9cfefe29e5 100644 --- a/products/ASC.Files/Core/ASC.Files.Core/Services/WCFService/FileOperations/FileDownloadOperation.cs +++ b/products/ASC.Files/Core/ASC.Files.Core/Services/WCFService/FileOperations/FileDownloadOperation.cs @@ -81,8 +81,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations base.RunJob(_, cancellationToken); using var scope = ThirdPartyOperation.CreateScope(); - var globalStore = scope.ServiceProvider.GetService(); - var filesLinkUtility = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); using var stream = TempStream.Create(); using (var zip = new ZipOutputStream(stream, true) @@ -100,14 +99,14 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations { stream.Position = 0; const string fileName = FileConstant.DownloadTitle + ".zip"; - var store = globalStore.GetStore(); + var store = scopeClass.GlobalStore.GetStore(); store.Save( FileConstant.StorageDomainTmp, string.Format(@"{0}\{1}", ((IAccount)Thread.CurrentPrincipal.Identity).ID, fileName), stream, "application/zip", "attachment; filename=\"" + fileName + "\""); - Status = string.Format("{0}?{1}=bulk", filesLinkUtility.FileHandlerPath, FilesLinkUtility.Action); + Status = string.Format("{0}?{1}=bulk", scopeClass.FilesLinkUtility.FileHandlerPath, FilesLinkUtility.Action); } FillDistributedTask(); @@ -135,7 +134,6 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations Compress = compress; } - protected override void Do(IServiceScope scope) { if (!Compress && !Files.Any() && !Folders.Any()) return; @@ -151,8 +149,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations throw new DirectoryNotFoundException(FilesCommonResource.ErrorMassage_FolderNotFound); } - var globalStore = scope.ServiceProvider.GetService(); - var filesLinkUtility = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); ReplaceLongPath(entriesPathId); @@ -172,14 +169,14 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations { stream.Position = 0; const string fileName = FileConstant.DownloadTitle + ".zip"; - var store = globalStore.GetStore(); + var store = scopeClass.GlobalStore.GetStore(); store.Save( FileConstant.StorageDomainTmp, string.Format(@"{0}\{1}", ((IAccount)Thread.CurrentPrincipal.Identity).ID, fileName), stream, "application/zip", "attachment; filename=\"" + fileName + "\""); - Status = string.Format("{0}?{1}=bulk", filesLinkUtility.FileHandlerPath, FilesLinkUtility.Action); + Status = string.Format("{0}?{1}=bulk", scopeClass.FilesLinkUtility.FileHandlerPath, FilesLinkUtility.Action); } } } @@ -265,9 +262,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations internal void CompressToZip(ZipOutputStream zip, Stream stream, IServiceScope scope) { if (entriesPathId == null) return; - var setupInfo = scope.ServiceProvider.GetService(); - var fileConverter = scope.ServiceProvider.GetService(); - var filesMessageService = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var FileDao = scope.ServiceProvider.GetService>(); foreach (var path in entriesPathId.AllKeys) @@ -298,9 +293,9 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations continue; } - if (file.ContentLength > setupInfo.AvailableFileSize) + if (file.ContentLength > scopeClass.SetupInfo.AvailableFileSize) { - Error = string.Format(FilesCommonResource.ErrorMassage_FileSizeZip, FileSizeComment.FilesSizeToString(setupInfo.AvailableFileSize)); + Error = string.Format(FilesCommonResource.ErrorMassage_FileSizeZip, FileSizeComment.FilesSizeToString(scopeClass.SetupInfo.AvailableFileSize)); continue; } @@ -334,25 +329,25 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations { try { - if (fileConverter.EnableConvert(file, convertToExt)) + if (scopeClass.FileConverter.EnableConvert(file, convertToExt)) { //Take from converter - using var readStream = fileConverter.Exec(file, convertToExt); + using var readStream = scopeClass.FileConverter.Exec(file, convertToExt); readStream.CopyTo(zip); if (!string.IsNullOrEmpty(convertToExt)) { - filesMessageService.Send(file, headers, MessageAction.FileDownloadedAs, file.Title, convertToExt); + scopeClass.FilesMessageService.Send(file, headers, MessageAction.FileDownloadedAs, file.Title, convertToExt); } else { - filesMessageService.Send(file, headers, MessageAction.FileDownloaded, file.Title); + scopeClass.FilesMessageService.Send(file, headers, MessageAction.FileDownloaded, file.Title); } } else { using var readStream = FileDao.GetFileStream(file); readStream.CopyTo(zip); - filesMessageService.Send(file, headers, MessageAction.FileDownloaded, file.Title); + scopeClass.FilesMessageService.Send(file, headers, MessageAction.FileDownloaded, file.Title); } } catch (Exception ex) @@ -439,4 +434,22 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations dic.Remove(name); } } + + internal class Scope + { + internal GlobalStore GlobalStore { get; } + internal FilesLinkUtility FilesLinkUtility { get; } + internal SetupInfo SetupInfo { get; } + internal FileConverter FileConverter { get; } + internal FilesMessageService FilesMessageService { get; } + + public Scope(GlobalStore globalStore, FilesLinkUtility filesLinkUtility, SetupInfo setupInfo, FileConverter fileConverter, FilesMessageService filesMessageService) + { + GlobalStore = globalStore; + FilesLinkUtility = filesLinkUtility; + SetupInfo = setupInfo; + FileConverter = fileConverter; + FilesMessageService = filesMessageService; + } + } } \ No newline at end of file diff --git a/products/ASC.Files/Core/ASC.Files.Core/Services/WCFService/FileOperations/FileMarkAsReadOperation.cs b/products/ASC.Files/Core/ASC.Files.Core/Services/WCFService/FileOperations/FileMarkAsReadOperation.cs index c707ed1947..cc3b80faa4 100644 --- a/products/ASC.Files/Core/ASC.Files.Core/Services/WCFService/FileOperations/FileMarkAsReadOperation.cs +++ b/products/ASC.Files/Core/ASC.Files.Core/Services/WCFService/FileOperations/FileMarkAsReadOperation.cs @@ -84,7 +84,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations protected override void Do(IServiceScope scope) { - var fileMarker = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var entries = new List>(); if (Folders.Any()) { @@ -98,7 +98,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations { CancellationToken.ThrowIfCancellationRequested(); - fileMarker.RemoveMarkAsNew(x, ((IAccount)Thread.CurrentPrincipal.Identity).ID); + scopeClass.FileMarker.RemoveMarkAsNew(x, ((IAccount)Thread.CurrentPrincipal.Identity).ID); if (x.FileEntryType == FileEntryType.File) { @@ -111,21 +111,33 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations ProgressStep(); }); - var globalFolder = scope.ServiceProvider.GetService(); - var daoFactory = scope.ServiceProvider.GetService(); var rootIds = new List { - globalFolder.GetFolderMy(fileMarker, daoFactory), - globalFolder.GetFolderCommon(fileMarker, daoFactory), - globalFolder.GetFolderShare(daoFactory), - globalFolder.GetFolderProjects(daoFactory), + scopeClass.GlobalFolder.GetFolderMy(scopeClass.FileMarker, scopeClass.DaoFactory), + scopeClass.GlobalFolder.GetFolderCommon(scopeClass.FileMarker, scopeClass.DaoFactory), + scopeClass.GlobalFolder.GetFolderShare(scopeClass.DaoFactory), + scopeClass.GlobalFolder.GetFolderProjects(scopeClass.DaoFactory), }; var newrootfolder = - rootIds.Select(r => new KeyValuePair(r, fileMarker.GetRootFoldersIdMarkedAsNew(r))) + rootIds.Select(r => new KeyValuePair(r, scopeClass.FileMarker.GetRootFoldersIdMarkedAsNew(r))) .Select(item => string.Format("new_{{\"key\"? \"{0}\", \"value\"? \"{1}\"}}", item.Key, item.Value)); Status += string.Join(SPLIT_CHAR, newrootfolder.ToArray()); } + + class Scope + { + internal FileMarker FileMarker { get; } + internal GlobalFolder GlobalFolder { get; } + internal IDaoFactory DaoFactory { get; } + + public Scope(FileMarker fileMarker, GlobalFolder globalFolder, IDaoFactory daoFactory) + { + FileMarker = fileMarker; + GlobalFolder = globalFolder; + DaoFactory = daoFactory; + } + } } } \ No newline at end of file diff --git a/products/ASC.Files/Core/ASC.Files.Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs b/products/ASC.Files/Core/ASC.Files.Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs index f2e9166998..fa7e54f559 100644 --- a/products/ASC.Files/Core/ASC.Files.Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs +++ b/products/ASC.Files/Core/ASC.Files.Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs @@ -130,7 +130,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations Do(scope, ThirdpartyFolderId); } } - + private void Do(IServiceScope scope, TTo tto) { var fileMarker = scope.ServiceProvider.GetService(); @@ -165,15 +165,14 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations needToMark.Distinct().ToList().ForEach(x => fileMarker.MarkAsNew(x)); } - + private List> MoveOrCopyFolders(IServiceScope scope, List folderIds, Folder toFolder, bool copy) { var needToMark = new List>(); if (folderIds.Count == 0) return needToMark; - var filesMessageService = scope.ServiceProvider.GetService(); - var fileMarker = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var folderDao = scope.ServiceProvider.GetService>(); var toFolderId = toFolder.ID; @@ -213,7 +212,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations else { newFolder = FolderDao.CopyFolder(folder.ID, toFolderId, CancellationToken); - filesMessageService.Send(newFolder, toFolder, _headers, MessageAction.FolderCopied, newFolder.Title, toFolder.Title); + scopeClass.FilesMessageService.Send(newFolder, toFolder, _headers, MessageAction.FolderCopied, newFolder.Title, toFolder.Title); if (isToFolder) needToMark.Add(newFolder); @@ -254,7 +253,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations { newFolder = FolderDao.CopyFolder(folder.ID, toFolderId, CancellationToken); newFolderId = newFolder.ID; - filesMessageService.Send(newFolder, toFolder, _headers, MessageAction.FolderCopiedWithOverwriting, newFolder.Title, toFolder.Title); + scopeClass.FilesMessageService.Send(newFolder, toFolder, _headers, MessageAction.FolderCopiedWithOverwriting, newFolder.Title, toFolder.Title); if (isToFolder) needToMark.Add(newFolder); @@ -274,18 +273,18 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations } else { - fileMarker.RemoveMarkAsNewForAll(folder); + scopeClass.FileMarker.RemoveMarkAsNewForAll(folder); newFolderId = FolderDao.MoveFolder(folder.ID, toFolderId, CancellationToken); newFolder = folderDao.GetFolder(newFolderId); if (folder.RootFolderType != FolderType.USER) { - filesMessageService.Send(folder, toFolder, _headers, MessageAction.FolderMovedWithOverwriting, folder.Title, toFolder.Title); + scopeClass.FilesMessageService.Send(folder, toFolder, _headers, MessageAction.FolderMovedWithOverwriting, folder.Title, toFolder.Title); } else { - filesMessageService.Send(newFolder, toFolder, _headers, MessageAction.FolderMovedWithOverwriting, folder.Title, toFolder.Title); + scopeClass.FilesMessageService.Send(newFolder, toFolder, _headers, MessageAction.FolderMovedWithOverwriting, folder.Title, toFolder.Title); } if (isToFolder) @@ -311,18 +310,18 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations } else { - fileMarker.RemoveMarkAsNewForAll(folder); + scopeClass.FileMarker.RemoveMarkAsNewForAll(folder); var newFolderId = FolderDao.MoveFolder(folder.ID, toFolderId, CancellationToken); newFolder = folderDao.GetFolder(newFolderId); if (folder.RootFolderType != FolderType.USER) { - filesMessageService.Send(folder, toFolder, _headers, MessageAction.FolderMoved, folder.Title, toFolder.Title); + scopeClass.FilesMessageService.Send(folder, toFolder, _headers, MessageAction.FolderMoved, folder.Title, toFolder.Title); } else { - filesMessageService.Send(newFolder, toFolder, _headers, MessageAction.FolderMoved, folder.Title, toFolder.Title); + scopeClass.FilesMessageService.Send(newFolder, toFolder, _headers, MessageAction.FolderMoved, folder.Title, toFolder.Title); } if (isToFolder) @@ -354,11 +353,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations if (fileIds.Count == 0) return needToMark; - var filesMessageService = scope.ServiceProvider.GetService(); - var fileMarker = scope.ServiceProvider.GetService(); - var fileUtility = scope.ServiceProvider.GetService(); - var global = scope.ServiceProvider.GetService(); - var entryManager = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var fileDao = scope.ServiceProvider.GetService>(); var toFolderId = toFolder.ID; @@ -375,8 +370,8 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations { Error = FilesCommonResource.ErrorMassage_SecurityException_ReadFile; } - else if (global.EnableUploadFilter - && !fileUtility.ExtsUploadable.Contains(FileUtility.GetFileExtension(file.Title))) + else if (scopeClass.Global.EnableUploadFilter + && !scopeClass.FileUtility.ExtsUploadable.Contains(FileUtility.GetFileExtension(file.Title))) { Error = FilesCommonResource.ErrorMassage_NotSupportedFormat; } @@ -396,7 +391,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations try { newFile = FileDao.CopyFile(file.ID, toFolderId); //Stream copy will occur inside dao - filesMessageService.Send(newFile, toFolder, _headers, MessageAction.FileCopied, newFile.Title, parentFolder.Title, toFolder.Title); + scopeClass.FilesMessageService.Send(newFile, toFolder, _headers, MessageAction.FileCopied, newFile.Title, parentFolder.Title, toFolder.Title); if (Equals(newFile.FolderID.ToString(), DaoFolderId)) { @@ -425,18 +420,18 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations } else { - fileMarker.RemoveMarkAsNewForAll(file); + scopeClass.FileMarker.RemoveMarkAsNewForAll(file); var newFileId = FileDao.MoveFile(file.ID, toFolderId); newFile = fileDao.GetFile(newFileId); if (file.RootFolderType != FolderType.USER) { - filesMessageService.Send(file, toFolder, _headers, MessageAction.FileMoved, file.Title, parentFolder.Title, toFolder.Title); + scopeClass.FilesMessageService.Send(file, toFolder, _headers, MessageAction.FileMoved, file.Title, parentFolder.Title, toFolder.Title); } else { - filesMessageService.Send(newFile, toFolder, _headers, MessageAction.FileMoved, file.Title, parentFolder.Title, toFolder.Title); + scopeClass.FilesMessageService.Send(newFile, toFolder, _headers, MessageAction.FileMoved, file.Title, parentFolder.Title, toFolder.Title); } if (Equals(toFolderId.ToString(), DaoFolderId)) @@ -459,7 +454,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations { Error = FilesCommonResource.ErrorMassage_SecurityException; } - else if (entryManager.FileLockedForMe(conflict.ID)) + else if (scopeClass.EntryManager.FileLockedForMe(conflict.ID)) { Error = FilesCommonResource.ErrorMassage_LockedFile; } @@ -488,7 +483,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations if (copy) { - filesMessageService.Send(newFile, toFolder, _headers, MessageAction.FileCopiedWithOverwriting, newFile.Title, parentFolder.Title, toFolder.Title); + scopeClass.FilesMessageService.Send(newFile, toFolder, _headers, MessageAction.FileCopiedWithOverwriting, newFile.Title, parentFolder.Title, toFolder.Title); if (ProcessedFile(fileId)) { Status += string.Format("file_{0}{1}", newFile.ID, SPLIT_CHAR); @@ -515,11 +510,11 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations if (file.RootFolderType != FolderType.USER) { - filesMessageService.Send(file, toFolder, _headers, MessageAction.FileMovedWithOverwriting, file.Title, parentFolder.Title, toFolder.Title); + scopeClass.FilesMessageService.Send(file, toFolder, _headers, MessageAction.FileMovedWithOverwriting, file.Title, parentFolder.Title, toFolder.Title); } else { - filesMessageService.Send(newFile, toFolder, _headers, MessageAction.FileMovedWithOverwriting, file.Title, parentFolder.Title, toFolder.Title); + scopeClass.FilesMessageService.Send(newFile, toFolder, _headers, MessageAction.FileMovedWithOverwriting, file.Title, parentFolder.Title, toFolder.Title); } if (ProcessedFile(fileId)) @@ -573,5 +568,23 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations } return false; } + + class Scope + { + internal FilesMessageService FilesMessageService { get; } + internal FileMarker FileMarker { get; } + internal FileUtility FileUtility { get; } + internal Global Global { get; } + internal EntryManager EntryManager { get; } + + public Scope(FilesMessageService filesMessageService, FileMarker fileMarker, FileUtility fileUtility, Global global, EntryManager entryManager) + { + FilesMessageService = filesMessageService; + FileMarker = fileMarker; + FileUtility = fileUtility; + Global = global; + EntryManager = entryManager; + } + } } } \ No newline at end of file diff --git a/products/ASC.Files/Core/ASC.Files.Core/Services/WCFService/FileOperations/FileOperation.cs b/products/ASC.Files/Core/ASC.Files.Core/Services/WCFService/FileOperations/FileOperation.cs index b04cc72a21..9f2c7efdc7 100644 --- a/products/ASC.Files/Core/ASC.Files.Core/Services/WCFService/FileOperations/FileOperation.cs +++ b/products/ASC.Files/Core/ASC.Files.Core/Services/WCFService/FileOperations/FileOperation.cs @@ -274,7 +274,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations Total = InitTotalProgressSteps(); Source = string.Join(SPLIT_CHAR, Folders.Select(f => "folder_" + f).Concat(Files.Select(f => "file_" + f)).ToArray()); } - + public override void RunJob(DistributedTask _, CancellationToken cancellationToken) { try @@ -283,24 +283,21 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations CancellationToken = cancellationToken; using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - tenantManager.SetCurrentTenant(CurrentTenant); - var daoFactory = scope.ServiceProvider.GetService(); - var fileSecurity = scope.ServiceProvider.GetService(); - var logger = scope.ServiceProvider.GetService>().CurrentValue; + var scopeClass = scope.ServiceProvider.GetService(); + scopeClass.TenantManager.SetCurrentTenant(CurrentTenant); Thread.CurrentPrincipal = principal; Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(culture); Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(culture); - FolderDao = daoFactory.GetFolderDao(); - FileDao = daoFactory.GetFileDao(); - TagDao = daoFactory.GetTagDao(); - ProviderDao = daoFactory.ProviderDao; - FilesSecurity = fileSecurity; + FolderDao = scopeClass.DaoFactory.GetFolderDao(); + FileDao = scopeClass.DaoFactory.GetFileDao(); + TagDao = scopeClass.DaoFactory.GetTagDao(); + ProviderDao = scopeClass.DaoFactory.ProviderDao; + FilesSecurity = scopeClass.FileSecurity; - Logger = logger; + Logger = scopeClass.Options.CurrentValue; Do(scope); } @@ -391,5 +388,22 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations FillDistributedTask(); TaskInfo.PublishChanges(); } + + class Scope + { + internal TenantManager TenantManager { get; } + internal IDaoFactory DaoFactory { get; } + internal FileSecurity FileSecurity { get; } + internal IOptionsMonitor Options { get; } + + public Scope(TenantManager tenantManager, IDaoFactory daoFactory, FileSecurity fileSecurity, IOptionsMonitor options) + { + TenantManager = tenantManager; + DaoFactory = daoFactory; + FileSecurity = fileSecurity; + Options = options; + } + } } + } \ No newline at end of file diff --git a/products/ASC.Files/Core/ASC.Files.Core/Utils/FileConverter.cs b/products/ASC.Files/Core/ASC.Files.Core/Utils/FileConverter.cs index efae42bacf..e81c9d3eab 100644 --- a/products/ASC.Files/Core/ASC.Files.Core/Utils/FileConverter.cs +++ b/products/ASC.Files/Core/ASC.Files.Core/Utils/FileConverter.cs @@ -138,25 +138,14 @@ namespace ASC.Web.Files.Utils var result = cache.Get(GetKey(file)); return result != null && result.Progress != 100 && string.IsNullOrEmpty(result.Error); } - + private void CheckConvertFilesStatus(object _) { if (Monitor.TryEnter(singleThread)) { using var scope = ServiceProvider.CreateScope(); - var logger = scope.ServiceProvider.GetService>().CurrentValue; - var tenantManager = scope.ServiceProvider.GetService(); - UserManager userManager; - SecurityContext securityContext; - IDaoFactory daoFactory; - FileSecurity fileSecurity; - PathProvider pathProvider; - SetupInfo setupInfo; - FileUtility fileUtility; - DocumentServiceHelper documentServiceHelper; - DocumentServiceConnector documentServiceConnector; - EntryManager entryManager; - FileConverter fileConverter; + var scopeClass = scope.ServiceProvider.GetService(); + var logger = scopeClass.Options.CurrentValue; try { @@ -222,45 +211,33 @@ namespace ASC.Web.Files.Utils cache.Insert(GetKey(file), operationResult, TimeSpan.FromMinutes(10)); } - tenantManager.SetCurrentTenant(tenantId); + scopeClass.TenantManager.SetCurrentTenant(tenantId); - userManager = scope.ServiceProvider.GetService(); - securityContext = scope.ServiceProvider.GetService(); - daoFactory = scope.ServiceProvider.GetService(); - fileSecurity = scope.ServiceProvider.GetService(); - pathProvider = scope.ServiceProvider.GetService(); - setupInfo = scope.ServiceProvider.GetService(); - fileUtility = scope.ServiceProvider.GetService(); - documentServiceHelper = scope.ServiceProvider.GetService(); - documentServiceConnector = scope.ServiceProvider.GetService(); - entryManager = scope.ServiceProvider.GetService(); - fileConverter = scope.ServiceProvider.GetService(); + scopeClass.SecurityContext.AuthenticateMe(account); - securityContext.AuthenticateMe(account); - - var user = userManager.GetUsers(account.ID); - var culture = string.IsNullOrEmpty(user.CultureName) ? tenantManager.GetCurrentTenant().GetCulture() : CultureInfo.GetCultureInfo(user.CultureName); + var user = scopeClass.UserManager.GetUsers(account.ID); + var culture = string.IsNullOrEmpty(user.CultureName) ? scopeClass.TenantManager.GetCurrentTenant().GetCulture() : CultureInfo.GetCultureInfo(user.CultureName); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; - if (!fileSecurity.CanRead(file) && file.RootFolderType != FolderType.BUNCH) + if (!scopeClass.FileSecurity.CanRead(file) && file.RootFolderType != FolderType.BUNCH) { //No rights in CRM after upload before attach throw new SecurityException(FilesCommonResource.ErrorMassage_SecurityException_ReadFile); } - if (file.ContentLength > setupInfo.AvailableFileSize) + if (file.ContentLength > scopeClass.SetupInfo.AvailableFileSize) { - throw new Exception(string.Format(FilesCommonResource.ErrorMassage_FileSizeConvert, FileSizeComment.FilesSizeToString(setupInfo.AvailableFileSize))); + throw new Exception(string.Format(FilesCommonResource.ErrorMassage_FileSizeConvert, FileSizeComment.FilesSizeToString(scopeClass.SetupInfo.AvailableFileSize))); } - fileUri = pathProvider.GetFileStreamUrl(file); + fileUri = scopeClass.PathProvider.GetFileStreamUrl(file); - var toExtension = fileUtility.GetInternalExtension(file.Title); + var toExtension = scopeClass.FileUtility.GetInternalExtension(file.Title); var fileExtension = file.ConvertedExtension; - var docKey = documentServiceHelper.GetDocKey(file); + var docKey = scopeClass.DocumentServiceHelper.GetDocKey(file); - fileUri = documentServiceConnector.ReplaceCommunityAdress(fileUri); - operationResultProgress = documentServiceConnector.GetConvertedUri(fileUri, fileExtension, toExtension, docKey, password, true, out convertedFileUrl); + fileUri = scopeClass.DocumentServiceConnector.ReplaceCommunityAdress(fileUri); + operationResultProgress = scopeClass.DocumentServiceConnector.GetConvertedUri(fileUri, fileExtension, toExtension, docKey, password, true, out convertedFileUrl); } catch (Exception exception) { @@ -325,7 +302,7 @@ namespace ASC.Web.Files.Utils try { - newFile = fileConverter.SaveConvertedFile(file, convertedFileUrl); + newFile = scopeClass.FileConverter.SaveConvertedFile(file, convertedFileUrl); } catch (Exception e) { @@ -350,10 +327,10 @@ namespace ASC.Web.Files.Utils { if (newFile != null) { - var folderDao = daoFactory.GetFolderDao(); + var folderDao = scopeClass.DaoFactory.GetFolderDao(); var folder = folderDao.GetFolder(newFile.FolderID); - var folderTitle = fileSecurity.CanRead(folder) ? folder.Title : null; - operationResult.Result = FileJsonSerializer(entryManager, newFile, folderTitle); + var folderTitle = scopeClass.FileSecurity.CanRead(folder) ? folder.Title : null; + operationResult.Result = FileJsonSerializer(scopeClass.EntryManager, newFile, folderTitle); } operationResult.Progress = 100; @@ -421,6 +398,52 @@ namespace ASC.Web.Files.Utils FileJson = JsonSerializer.Serialize(file, options) }, options); } + + class Scope + { + internal IOptionsMonitor Options { get; } + internal TenantManager TenantManager { get; } + internal UserManager UserManager { get; } + internal SecurityContext SecurityContext { get; } + internal IDaoFactory DaoFactory { get; } + internal FileSecurity FileSecurity { get; } + internal PathProvider PathProvider { get; } + internal SetupInfo SetupInfo { get; } + internal FileUtility FileUtility { get; } + internal DocumentServiceHelper DocumentServiceHelper { get; } + internal DocumentServiceConnector DocumentServiceConnector { get; } + internal EntryManager EntryManager { get; } + internal FileConverter FileConverter { get; } + + public Scope(IOptionsMonitor options, + TenantManager tenantManager, + UserManager userManager, + SecurityContext securityContext, + IDaoFactory daoFactory, + FileSecurity fileSecurity, + PathProvider pathProvider, + SetupInfo setupInfo, + FileUtility fileUtility, + DocumentServiceHelper documentServiceHelper, + DocumentServiceConnector documentServiceConnector, + EntryManager entryManager, + FileConverter fileConverter) + { + Options = options; + TenantManager = tenantManager; + UserManager = userManager; + SecurityContext = securityContext; + DaoFactory = daoFactory; + FileSecurity = fileSecurity; + PathProvider = pathProvider; + SetupInfo = setupInfo; + FileUtility = fileUtility; + DocumentServiceHelper = documentServiceHelper; + DocumentServiceConnector = documentServiceConnector; + EntryManager = entryManager; + FileConverter = fileConverter; + } + } } public class FileJsonSerializerData @@ -758,6 +781,7 @@ namespace ASC.Web.Files.Utils } private FileConverterQueue GetFileConverter() => ServiceProvider.GetService>(); + } internal class FileComparer : IEqualityComparer> From f89c3eefe631bd77261922dac61520e282197c16 Mon Sep 17 00:00:00 2001 From: SuhorukovAnton <62381554+SuhorukovAnton@users.noreply.github.com> Date: Thu, 30 Jul 2020 16:33:54 +0300 Subject: [PATCH 04/18] scope: refactoring --- .../Notify/NotifyConfiguration.cs | 114 ++++--- .../Notify/StudioNotifyService.cs | 20 +- .../Notify/StudioNotifyServiceSender.cs | 63 ++-- .../Notify/StudioPeriodicNotify.cs | 317 ++++++++++-------- .../Notify/StudioWhatsNewNotify.cs | 99 ++++-- web/ASC.Web.Core/QuotaSync.cs | 30 +- 6 files changed, 392 insertions(+), 251 deletions(-) diff --git a/web/ASC.Web.Core/Notify/NotifyConfiguration.cs b/web/ASC.Web.Core/Notify/NotifyConfiguration.cs index dd2bb7ac2c..a4bd04984b 100644 --- a/web/ASC.Web.Core/Notify/NotifyConfiguration.cs +++ b/web/ASC.Web.Core/Notify/NotifyConfiguration.cs @@ -80,7 +80,6 @@ namespace ASC.Web.Studio.Core.Notify } } - private static void NotifyClientRegisterCallback(Context context, INotifyClient client) { #region url correction @@ -131,15 +130,12 @@ namespace ASC.Web.Studio.Core.Notify InterceptorLifetime.Global, (r, p, scope) => { + var scopeClass = scope.ServiceProvider.GetService(); try { - //fix - var tenantManager = scope.ServiceProvider.GetService(); - var webItemSecurity = scope.ServiceProvider.GetService(); - var userManager = scope.ServiceProvider.GetService(); // culture var u = Constants.LostUser; - var tenant = tenantManager.GetCurrentTenant(); + var tenant = scopeClass.TenantManager.GetCurrentTenant(); if (32 <= r.Recipient.ID.Length) { @@ -153,18 +149,18 @@ namespace ASC.Web.Studio.Core.Notify if (guid != default) { - u = userManager.GetUsers(guid); + u = scopeClass.UserManager.GetUsers(guid); } } if (Constants.LostUser.Equals(u)) { - u = userManager.GetUserByEmail(r.Recipient.ID); + u = scopeClass.UserManager.GetUserByEmail(r.Recipient.ID); } if (Constants.LostUser.Equals(u)) { - u = userManager.GetUserByUserName(r.Recipient.ID); + u = scopeClass.UserManager.GetUserByUserName(r.Recipient.ID); } if (!Constants.LostUser.Equals(u)) @@ -187,7 +183,7 @@ namespace ASC.Web.Studio.Core.Notify } if (productId != Guid.Empty && productId != new Guid("f4d98afdd336433287783c6945c81ea0") /* ignore people product */) { - return !webItemSecurity.IsAvailableForUser(productId, u.ID); + return !scopeClass.WebItemSecurity.IsAvailableForUser(productId, u.ID); } } @@ -201,7 +197,7 @@ namespace ASC.Web.Studio.Core.Notify } catch (Exception error) { - scope.ServiceProvider.GetService>().CurrentValue.Error(error); + scopeClass.Options.CurrentValue.Error(error); } return false; }); @@ -241,7 +237,6 @@ namespace ASC.Web.Studio.Core.Notify #endregion } - private static void BeforeTransferRequest(NotifyEngine sender, NotifyRequest request, IServiceScope serviceScope) { var aid = Guid.Empty; @@ -263,49 +258,39 @@ namespace ASC.Web.Studio.Core.Notify } } using var scope = ServiceProvider.CreateScope(); - var tenantExtra = scope.ServiceProvider.GetService(); - var webItemManagerSecurity = scope.ServiceProvider.GetService(); - var webItemManager = scope.ServiceProvider.GetService(); - var configuration = scope.ServiceProvider.GetService(); - var tenantLogoManager = scope.ServiceProvider.GetService(); - var additionalWhiteLabelSettingsHelper = scope.ServiceProvider.GetService(); - var tenantUtil = scope.ServiceProvider.GetService(); - var coreBaseSettings = scope.ServiceProvider.GetService(); - var commonLinkUtility = scope.ServiceProvider.GetService(); - var settingsManager = scope.ServiceProvider.GetService(); - var studioNotifyHelper = scope.ServiceProvider.GetService(); - var log = scope.ServiceProvider.GetService>().CurrentValue; + var scopeClass = scope.ServiceProvider.GetService(); + var log = scopeClass.Options.CurrentValue; - commonLinkUtility.GetLocationByRequest(out var product, out var module); + scopeClass.CommonLinkUtility.GetLocationByRequest(out var product, out var module); if (product == null && CallContext.GetData("asc.web.product_id") != null) { - product = webItemManager[(Guid)CallContext.GetData("asc.web.product_id")] as IProduct; + product = scopeClass.WebItemManager[(Guid)CallContext.GetData("asc.web.product_id")] as IProduct; } var logoText = TenantWhiteLabelSettings.DefaultLogoText; - if ((tenantExtra.Enterprise || coreBaseSettings.CustomMode) && !MailWhiteLabelSettings.IsDefault(settingsManager, configuration)) + if ((scopeClass.TenantExtra.Enterprise || scopeClass.CoreBaseSettings.CustomMode) && !MailWhiteLabelSettings.IsDefault(scopeClass.SettingsManager, scopeClass.Configuration)) { - logoText = tenantLogoManager.GetLogoText(); + logoText = scopeClass.TenantLogoManager.GetLogoText(); } request.Arguments.Add(new TagValue(CommonTags.AuthorID, aid)); request.Arguments.Add(new TagValue(CommonTags.AuthorName, aname)); - request.Arguments.Add(new TagValue(CommonTags.AuthorUrl, commonLinkUtility.GetFullAbsolutePath(commonLinkUtility.GetUserProfile(aid)))); - request.Arguments.Add(new TagValue(CommonTags.VirtualRootPath, commonLinkUtility.GetFullAbsolutePath("~").TrimEnd('/'))); + request.Arguments.Add(new TagValue(CommonTags.AuthorUrl, scopeClass.CommonLinkUtility.GetFullAbsolutePath(scopeClass.CommonLinkUtility.GetUserProfile(aid)))); + request.Arguments.Add(new TagValue(CommonTags.VirtualRootPath, scopeClass.CommonLinkUtility.GetFullAbsolutePath("~").TrimEnd('/'))); request.Arguments.Add(new TagValue(CommonTags.ProductID, product != null ? product.ID : Guid.Empty)); request.Arguments.Add(new TagValue(CommonTags.ModuleID, module != null ? module.ID : Guid.Empty)); - request.Arguments.Add(new TagValue(CommonTags.ProductUrl, commonLinkUtility.GetFullAbsolutePath(product != null ? product.StartURL : "~"))); - request.Arguments.Add(new TagValue(CommonTags.DateTime, tenantUtil.DateTimeNow())); + request.Arguments.Add(new TagValue(CommonTags.ProductUrl, scopeClass.CommonLinkUtility.GetFullAbsolutePath(product != null ? product.StartURL : "~"))); + request.Arguments.Add(new TagValue(CommonTags.DateTime, scopeClass.TenantUtil.DateTimeNow())); request.Arguments.Add(new TagValue(CommonTags.RecipientID, Context.SYS_RECIPIENT_ID)); - request.Arguments.Add(new TagValue(CommonTags.ProfileUrl, commonLinkUtility.GetFullAbsolutePath(commonLinkUtility.GetMyStaff()))); - request.Arguments.Add(new TagValue(CommonTags.RecipientSubscriptionConfigURL, commonLinkUtility.GetMyStaff())); - request.Arguments.Add(new TagValue(CommonTags.HelpLink, commonLinkUtility.GetHelpLink(settingsManager, additionalWhiteLabelSettingsHelper, false))); + request.Arguments.Add(new TagValue(CommonTags.ProfileUrl, scopeClass.CommonLinkUtility.GetFullAbsolutePath(scopeClass.CommonLinkUtility.GetMyStaff()))); + request.Arguments.Add(new TagValue(CommonTags.RecipientSubscriptionConfigURL, scopeClass.CommonLinkUtility.GetMyStaff())); + request.Arguments.Add(new TagValue(CommonTags.HelpLink, scopeClass.CommonLinkUtility.GetHelpLink(scopeClass.SettingsManager, scopeClass.AdditionalWhiteLabelSettingsHelper, false))); request.Arguments.Add(new TagValue(CommonTags.LetterLogoText, logoText)); - request.Arguments.Add(new TagValue(CommonTags.MailWhiteLabelSettings, MailWhiteLabelSettings.Instance(settingsManager))); + request.Arguments.Add(new TagValue(CommonTags.MailWhiteLabelSettings, MailWhiteLabelSettings.Instance(scopeClass.SettingsManager))); request.Arguments.Add(new TagValue(CommonTags.SendFrom, tenant.Name)); - request.Arguments.Add(new TagValue(CommonTags.ImagePath, studioNotifyHelper.GetNotificationImageUrl("").TrimEnd('/'))); + request.Arguments.Add(new TagValue(CommonTags.ImagePath, scopeClass.StudioNotifyHelper.GetNotificationImageUrl("").TrimEnd('/'))); - AddLetterLogo(request, tenantExtra, tenantLogoManager, coreBaseSettings, commonLinkUtility, log); + AddLetterLogo(request, scopeClass.TenantExtra, scopeClass.TenantLogoManager, scopeClass.CoreBaseSettings, scopeClass.CommonLinkUtility, log); } private static void AddLetterLogo(NotifyRequest request, TenantExtra tenantExtra, TenantLogoManager tenantLogoManager, CoreBaseSettings coreBaseSettings, CommonLinkUtility commonLinkUtility, ILog Log) @@ -368,6 +353,59 @@ namespace ASC.Web.Studio.Core.Notify return File.Exists(filePath) ? File.ReadAllBytes(filePath) : null; } + + class Scope + { + internal TenantManager TenantManager { get; } + internal WebItemSecurity WebItemSecurity { get; } + internal UserManager UserManager { get; } + internal IOptionsMonitor Options { get; } + internal TenantExtra TenantExtra { get; } + internal WebItemManagerSecurity WebItemManagerSecurity { get; } + internal WebItemManager WebItemManager { get; } + internal IConfiguration Configuration { get; } + internal TenantLogoManager TenantLogoManager { get; } + internal AdditionalWhiteLabelSettingsHelper AdditionalWhiteLabelSettingsHelper { get; } + internal TenantUtil TenantUtil { get; } + internal CoreBaseSettings CoreBaseSettings { get; } + internal CommonLinkUtility CommonLinkUtility { get; } + internal SettingsManager SettingsManager { get; } + internal StudioNotifyHelper StudioNotifyHelper { get; } + + public Scope(TenantManager tenantManager, + WebItemSecurity webItemSecurity, + UserManager userManager, + IOptionsMonitor options, + TenantExtra tenantExtra, + WebItemManagerSecurity webItemManagerSecurity, + WebItemManager webItemManager, + IConfiguration configuration, + TenantLogoManager tenantLogoManager, + AdditionalWhiteLabelSettingsHelper additionalWhiteLabelSettingsHelper, + TenantUtil tenantUtil, + CoreBaseSettings coreBaseSettings, + CommonLinkUtility commonLinkUtility, + SettingsManager settingsManager, + StudioNotifyHelper studioNotifyHelper + ) + { + TenantManager = tenantManager; + WebItemSecurity = webItemSecurity; + UserManager = userManager; + Options = options; + TenantExtra = tenantExtra; + WebItemManagerSecurity = webItemManagerSecurity; + WebItemManager = webItemManager; + Configuration = configuration; + TenantLogoManager = tenantLogoManager; + AdditionalWhiteLabelSettingsHelper = additionalWhiteLabelSettingsHelper; + TenantUtil = tenantUtil; + CoreBaseSettings = coreBaseSettings; + CommonLinkUtility = commonLinkUtility; + SettingsManager = settingsManager; + StudioNotifyHelper = studioNotifyHelper; + } + } } public static class NotifyConfigurationExtension diff --git a/web/ASC.Web.Core/Notify/StudioNotifyService.cs b/web/ASC.Web.Core/Notify/StudioNotifyService.cs index c1f53b013a..aa5af17488 100644 --- a/web/ASC.Web.Core/Notify/StudioNotifyService.cs +++ b/web/ASC.Web.Core/Notify/StudioNotifyService.cs @@ -828,10 +828,8 @@ namespace ASC.Web.Studio.Core.Notify try { var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - TenantManager.SetCurrentTenant(tenant); - - var client = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); + scopeClass.TenantManager.SetCurrentTenant(tenant); foreach (var u in users) { @@ -839,7 +837,7 @@ namespace ASC.Web.Studio.Core.Notify Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; - client.SendNoticeToAsync( + scopeClass.StudioNotifyServiceHelper.SendNoticeToAsync( Actions.PortalRename, new[] { StudioNotifyHelper.ToRecipient(u.ID) }, new[] { EMailSenderName }, @@ -881,6 +879,18 @@ namespace ASC.Web.Studio.Core.Notify return confirmUrl + $"&firstname={HttpUtility.UrlEncode(user.FirstName)}&lastname={HttpUtility.UrlEncode(user.LastName)}"; } + class Scope + { + internal TenantManager TenantManager { get; } + internal StudioNotifyServiceHelper StudioNotifyServiceHelper { get; } + + public Scope(TenantManager tenantManager, StudioNotifyServiceHelper studioNotifyServiceHelper) + { + TenantManager = tenantManager; + StudioNotifyServiceHelper = studioNotifyServiceHelper; + } + } + #endregion } diff --git a/web/ASC.Web.Core/Notify/StudioNotifyServiceSender.cs b/web/ASC.Web.Core/Notify/StudioNotifyServiceSender.cs index 96dda2d4e2..4bb9f018f1 100644 --- a/web/ASC.Web.Core/Notify/StudioNotifyServiceSender.cs +++ b/web/ASC.Web.Core/Notify/StudioNotifyServiceSender.cs @@ -57,23 +57,18 @@ namespace ASC.Web.Studio.Core.Notify ServiceProvider = serviceProvider; Configuration = configuration; } - + public void OnMessage(NotifyItem item) { using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - var userManager = scope.ServiceProvider.GetService(); - var securityContext = scope.ServiceProvider.GetService(); - var authContext = scope.ServiceProvider.GetService(); - var studioNotifyHelper = scope.ServiceProvider.GetService(); - var displayUserSettings = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); - tenantManager.SetCurrentTenant(item.TenantId); + scopeClass.TenantManager.SetCurrentTenant(item.TenantId); CultureInfo culture = null; - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(studioNotifyHelper.NotifySource, scope); + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifyHelper.NotifySource, scope); - var tenant = tenantManager.GetCurrentTenant(false); + var tenant = scopeClass.TenantManager.GetCurrentTenant(false); if (tenant != null) { @@ -82,8 +77,8 @@ namespace ASC.Web.Studio.Core.Notify if (Guid.TryParse(item.UserId, out var userId) && !userId.Equals(Constants.Guest.ID) && !userId.Equals(Guid.Empty)) { - securityContext.AuthenticateMe(Guid.Parse(item.UserId)); - var user = userManager.GetUsers(userId); + scopeClass.SecurityContext.AuthenticateMe(Guid.Parse(item.UserId)); + var user = scopeClass.UserManager.GetUsers(userId); if (!string.IsNullOrEmpty(user.CultureName)) { culture = CultureInfo.GetCultureInfo(user.CultureName); @@ -113,22 +108,21 @@ namespace ASC.Web.Studio.Core.Notify var cron = Configuration["core:notify:cron"] ?? "0 0 5 ? * *"; // 5am every day using var scope = ServiceProvider.CreateScope(); - var tenantExtra = scope.ServiceProvider.GetService(); - var coreBaseSettings = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); if (Configuration["core:notify:tariff"] != "false") { - if (tenantExtra.Enterprise) + if (scopeClass.TenantExtra.Enterprise) { WorkContext.RegisterSendMethod(SendEnterpriseTariffLetters, cron); } - else if (tenantExtra.Opensource) + else if (scopeClass.TenantExtra.Opensource) { WorkContext.RegisterSendMethod(SendOpensourceTariffLetters, cron); } - else if (tenantExtra.Saas) + else if (scopeClass.TenantExtra.Saas) { - if (coreBaseSettings.Personal) + if (scopeClass.CoreBaseSettings.Personal) { WorkContext.RegisterSendMethod(SendLettersPersonal, cron); } @@ -139,7 +133,7 @@ namespace ASC.Web.Studio.Core.Notify } } - if (!coreBaseSettings.Personal) + if (!scopeClass.CoreBaseSettings.Personal) { WorkContext.RegisterSendMethod(SendMsgWhatsNew, "0 0 * ? * *"); // every hour } @@ -175,6 +169,37 @@ namespace ASC.Web.Studio.Core.Notify using var scope = ServiceProvider.CreateScope(); scope.ServiceProvider.GetService().SendMsgWhatsNew(scheduleDate); } + + class Scope + { + internal TenantManager TenantManager { get; } + internal UserManager UserManager { get; } + internal SecurityContext SecurityContext { get; } + internal AuthContext AuthContext { get; } + internal StudioNotifyHelper StudioNotifyHelper { get; } + internal DisplayUserSettings DisplayUserSettings { get; } + internal TenantExtra TenantExtra { get; } + internal CoreBaseSettings CoreBaseSettings { get; } + + public Scope(TenantManager tenantManager, + UserManager userManager, + SecurityContext securityContext, + AuthContext authContext, + StudioNotifyHelper studioNotifyHelper, + DisplayUserSettings displayUserSettings, + TenantExtra tenantExtra, + CoreBaseSettings coreBaseSettings) + { + TenantManager = tenantManager; + UserManager = userManager; + SecurityContext = securityContext; + AuthContext = authContext; + StudioNotifyHelper = studioNotifyHelper; + DisplayUserSettings = displayUserSettings; + TenantExtra = tenantExtra; + CoreBaseSettings = coreBaseSettings; + } + } } public static class ServiceLauncherExtension diff --git a/web/ASC.Web.Core/Notify/StudioPeriodicNotify.cs b/web/ASC.Web.Core/Notify/StudioPeriodicNotify.cs index ae61eaa227..1509d502a7 100644 --- a/web/ASC.Web.Core/Notify/StudioPeriodicNotify.cs +++ b/web/ASC.Web.Core/Notify/StudioPeriodicNotify.cs @@ -88,30 +88,18 @@ namespace ASC.Web.Studio.Core.Notify } } - foreach (var tenant in activeTenants) { try { using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); - tenantManager.SetCurrentTenant(tenant.TenantId); + scopeClass.TenantManager.SetCurrentTenant(tenant.TenantId); + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifyHelper.NotifySource, scope); - var userManager = scope.ServiceProvider.GetService(); - var studioNotifyHelper = scope.ServiceProvider.GetService(); - var paymentManager = scope.ServiceProvider.GetService(); - var tenantExtra = scope.ServiceProvider.GetService(); - var authContext = scope.ServiceProvider.GetService(); - var commonLinkUtility = scope.ServiceProvider.GetService(); - var apiSystemHelper = scope.ServiceProvider.GetService(); - var setupInfo = scope.ServiceProvider.GetService(); - var context = scope.ServiceProvider.GetService>(); - var couponManager = scope.ServiceProvider.GetService(); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(studioNotifyHelper.NotifySource, scope); - - var tariff = paymentManager.GetTariff(tenant.TenantId); - var quota = tenantManager.GetTenantQuota(tenant.TenantId); + var tariff = scopeClass.PaymentManager.GetTariff(tenant.TenantId); + var quota = scopeClass.TenantManager.GetTenantQuota(tenant.TenantId); var createdDate = tenant.CreatedDateTime.Date; var dueDateIsNotMax = tariff.DueDate != DateTime.MaxValue; @@ -188,14 +176,14 @@ namespace ASC.Web.Studio.Core.Notify #region 3 days after registration to admins SAAS TRIAL + only 1 user - if (createdDate.AddDays(3) == nowDate && userManager.GetUsers().Count() == 1) + if (createdDate.AddDays(3) == nowDate && scopeClass.UserManager.GetUsers().Count() == 1) { action = Actions.SaasAdminInviteTeammatesV10; paymentMessage = false; toadmins = true; greenButtonText = () => WebstudioNotifyPatternResource.ButtonInviteRightNow; - greenButtonUrl = string.Format("{0}/products/people/", commonLinkUtility.GetFullAbsolutePath("~").TrimEnd('/')); + greenButtonUrl = string.Format("{0}/products/people/", scopeClass.CommonLinkUtility.GetFullAbsolutePath("~").TrimEnd('/')); } #endregion @@ -207,8 +195,8 @@ namespace ASC.Web.Studio.Core.Notify List datesWithActivity; datesWithActivity = - context.Get(dbid).FeedAggregates - .Where(r => r.Tenant == tenantManager.GetCurrentTenant().TenantId) + scopeClass.DbContextManager.Get(dbid).FeedAggregates + .Where(r => r.Tenant == scopeClass.TenantManager.GetCurrentTenant().TenantId) .Where(r => r.CreatedDate <= nowDate.AddDays(-1)) .GroupBy(r => r.CreatedDate.Date) .Select(r => r.Key) @@ -233,38 +221,38 @@ namespace ASC.Web.Studio.Core.Notify toadmins = true; tousers = true; - tableItemImg1 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-formatting-100.png"); + tableItemImg1 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-formatting-100.png"); tableItemText1 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_formatting_hdr; tableItemComment1 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_formatting; - tableItemLearnMoreUrl1 = studioNotifyHelper.Helplink + "/onlyoffice-editors/index.aspx"; + tableItemLearnMoreUrl1 = scopeClass.StudioNotifyHelper.Helplink + "/onlyoffice-editors/index.aspx"; tableItemLearnMoreText1 = () => WebstudioNotifyPatternResource.LinkLearnMore; - tableItemImg2 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-share-100.png"); + tableItemImg2 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-share-100.png"); tableItemText2 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_share_hdr; tableItemComment2 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_share; - tableItemImg3 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-coediting-100.png"); + tableItemImg3 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-coediting-100.png"); tableItemText3 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_coediting_hdr; tableItemComment3 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_coediting; - tableItemImg4 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-review-100.png"); + tableItemImg4 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-review-100.png"); tableItemText4 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_review_hdr; tableItemComment4 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_review; - tableItemImg5 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-3rdparty-100.png"); + tableItemImg5 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-3rdparty-100.png"); tableItemText5 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_3rdparty_hdr; tableItemComment5 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_3rdparty; - tableItemImg6 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-attach-100.png"); + tableItemImg6 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-attach-100.png"); tableItemText6 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_attach_hdr; tableItemComment6 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_attach; - tableItemImg7 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-apps-100.png"); + tableItemImg7 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-apps-100.png"); tableItemText7 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_apps_hdr; tableItemComment7 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_apps; greenButtonText = () => WebstudioNotifyPatternResource.ButtonAccessYouWebOffice; - greenButtonUrl = string.Format("{0}/products/files/", commonLinkUtility.GetFullAbsolutePath("~").TrimEnd('/')); + greenButtonUrl = string.Format("{0}/products/files/", scopeClass.CommonLinkUtility.GetFullAbsolutePath("~").TrimEnd('/')); } #endregion @@ -311,9 +299,9 @@ namespace ASC.Web.Studio.Core.Notify { Log.InfoFormat("start CreateCoupon to {0}", tenant.TenantAlias); - coupon = SetupInfo.IsSecretEmail(userManager.GetUsers(tenant.OwnerId).Email) + coupon = SetupInfo.IsSecretEmail(scopeClass.UserManager.GetUsers(tenant.OwnerId).Email) ? tenant.TenantAlias - : couponManager.CreateCoupon(tenantManager); + : scopeClass.CouponManager.CreateCoupon(scopeClass.TenantManager); Log.InfoFormat("end CreateCoupon to {0} coupon = {1}", tenant.TenantAlias, coupon); } @@ -329,7 +317,7 @@ namespace ASC.Web.Studio.Core.Notify } greenButtonText = () => WebstudioNotifyPatternResource.ButtonUseDiscount; - greenButtonUrl = commonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); + greenButtonUrl = scopeClass.CommonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); } #endregion @@ -358,7 +346,7 @@ namespace ASC.Web.Studio.Core.Notify #region 30 days after SAAS TRIAL expired + only 1 user - else if (dueDateIsNotMax && dueDate.AddDays(30) == nowDate && userManager.GetUsers().Count() == 1) + else if (dueDateIsNotMax && dueDate.AddDays(30) == nowDate && scopeClass.UserManager.GetUsers().Count() == 1) { action = Actions.SaasAdminTrialWarningAfter30V10; toadmins = true; @@ -377,8 +365,8 @@ namespace ASC.Web.Studio.Core.Notify greenButtonText = () => WebstudioNotifyPatternResource.ButtonLeaveFeedback; - var owner = userManager.GetUsers(tenant.OwnerId); - greenButtonUrl = setupInfo.TeamlabSiteRedirect + "/remove-portal-feedback-form.aspx#" + + var owner = scopeClass.UserManager.GetUsers(tenant.OwnerId); + greenButtonUrl = scopeClass.SetupInfo.TeamlabSiteRedirect + "/remove-portal-feedback-form.aspx#" + System.Web.HttpUtility.UrlEncode(Convert.ToBase64String( System.Text.Encoding.UTF8.GetBytes("{\"firstname\":\"" + owner.FirstName + "\",\"lastname\":\"" + owner.LastName + @@ -387,11 +375,11 @@ namespace ASC.Web.Studio.Core.Notify } else if (dueDateIsNotMax && dueDate.AddMonths(6).AddDays(7) <= nowDate) { - tenantManager.RemoveTenant(tenant.TenantId, true); + scopeClass.TenantManager.RemoveTenant(tenant.TenantId, true); - if (!string.IsNullOrEmpty(apiSystemHelper.ApiCacheUrl)) + if (!string.IsNullOrEmpty(scopeClass.ApiSystemHelper.ApiCacheUrl)) { - apiSystemHelper.RemoveTenantFromCache(tenant.TenantAlias, authContext.CurrentAccount.ID); + scopeClass.ApiSystemHelper.RemoveTenantFromCache(tenant.TenantAlias, scopeClass.AuthContext.CurrentAccount.ID); } } @@ -411,7 +399,7 @@ namespace ASC.Web.Studio.Core.Notify toadmins = true; greenButtonText = () => WebstudioNotifyPatternResource.ButtonRenewNow; - greenButtonUrl = commonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); + greenButtonUrl = scopeClass.CommonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); } #endregion @@ -424,7 +412,7 @@ namespace ASC.Web.Studio.Core.Notify toadmins = true; greenButtonText = () => WebstudioNotifyPatternResource.ButtonRenewNow; - greenButtonUrl = commonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); + greenButtonUrl = scopeClass.CommonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); } #endregion @@ -437,7 +425,7 @@ namespace ASC.Web.Studio.Core.Notify toadmins = true; greenButtonText = () => WebstudioNotifyPatternResource.ButtonBuyNow; - greenButtonUrl = commonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); + greenButtonUrl = scopeClass.CommonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); } #endregion @@ -451,8 +439,8 @@ namespace ASC.Web.Studio.Core.Notify greenButtonText = () => WebstudioNotifyPatternResource.ButtonLeaveFeedback; - var owner = userManager.GetUsers(tenant.OwnerId); - greenButtonUrl = setupInfo.TeamlabSiteRedirect + "/remove-portal-feedback-form.aspx#" + + var owner = scopeClass.UserManager.GetUsers(tenant.OwnerId); + greenButtonUrl = scopeClass.SetupInfo.TeamlabSiteRedirect + "/remove-portal-feedback-form.aspx#" + System.Web.HttpUtility.UrlEncode(Convert.ToBase64String( System.Text.Encoding.UTF8.GetBytes("{\"firstname\":\"" + owner.FirstName + "\",\"lastname\":\"" + owner.LastName + @@ -461,11 +449,11 @@ namespace ASC.Web.Studio.Core.Notify } else if (tariff.State == TariffState.NotPaid && dueDateIsNotMax && dueDate.AddMonths(6).AddDays(7) <= nowDate) { - tenantManager.RemoveTenant(tenant.TenantId, true); + scopeClass.TenantManager.RemoveTenant(tenant.TenantId, true); - if (!string.IsNullOrEmpty(apiSystemHelper.ApiCacheUrl)) + if (!string.IsNullOrEmpty(scopeClass.ApiSystemHelper.ApiCacheUrl)) { - apiSystemHelper.RemoveTenantFromCache(tenant.TenantAlias, authContext.CurrentAccount.ID); + scopeClass.ApiSystemHelper.RemoveTenantFromCache(tenant.TenantAlias, scopeClass.AuthContext.CurrentAccount.ID); } } @@ -478,26 +466,26 @@ namespace ASC.Web.Studio.Core.Notify if (action == null) continue; var users = toowner - ? new List { userManager.GetUsers(tenant.OwnerId) } - : studioNotifyHelper.GetRecipients(toadmins, tousers, false); + ? new List { scopeClass.UserManager.GetUsers(tenant.OwnerId) } + : scopeClass.StudioNotifyHelper.GetRecipients(toadmins, tousers, false); - var analytics = studioNotifyHelper.GetNotifyAnalytics(action, toowner, toadmins, tousers, false); + var analytics = scopeClass.StudioNotifyHelper.GetNotifyAnalytics(action, toowner, toadmins, tousers, false); - foreach (var u in users.Where(u => paymentMessage || studioNotifyHelper.IsSubscribedToNotify(u, Actions.PeriodicNotify))) + foreach (var u in users.Where(u => paymentMessage || scopeClass.StudioNotifyHelper.IsSubscribedToNotify(u, Actions.PeriodicNotify))) { var culture = string.IsNullOrEmpty(u.CultureName) ? tenant.GetCulture() : u.GetCulture(); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; - var rquota = tenantExtra.GetRightQuota() ?? TenantQuota.Default; + var rquota = scopeClass.TenantExtra.GetRightQuota() ?? TenantQuota.Default; client.SendNoticeToAsync( action, - new[] { studioNotifyHelper.ToRecipient(u.ID) }, + new[] { scopeClass.StudioNotifyHelper.ToRecipient(u.ID) }, new[] { senderName }, new TagValue(Tags.UserName, u.FirstName.HtmlEncode()), - new TagValue(Tags.PricingPage, commonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx")), - new TagValue(Tags.ActiveUsers, userManager.GetUsers().Count()), + new TagValue(Tags.PricingPage, scopeClass.CommonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx")), + new TagValue(Tags.ActiveUsers, scopeClass.UserManager.GetUsers().Count()), new TagValue(Tags.Price, rquota.Price), new TagValue(Tags.PricePeriod, rquota.Year3 ? UserControlsCommonResource.TariffPerYear3 : rquota.Year ? UserControlsCommonResource.TariffPerYear : UserControlsCommonResource.TariffPerMonth), new TagValue(Tags.DueDate, dueDate.ToLongDateString()), @@ -513,7 +501,7 @@ namespace ASC.Web.Studio.Core.Notify TagValues.TableItem(6, tableItemText6, tableItemUrl6, tableItemImg6, tableItemComment6, tableItemLearnMoreText6, tableItemLearnMoreUrl6), TagValues.TableItem(7, tableItemText7, tableItemUrl7, tableItemImg7, tableItemComment7, tableItemLearnMoreText7, tableItemLearnMoreUrl7), TagValues.TableBottom(), - new TagValue(CommonTags.Footer, u.IsAdmin(userManager) ? "common" : "social"), + new TagValue(CommonTags.Footer, u.IsAdmin(scopeClass.UserManager) ? "common" : "social"), new TagValue(CommonTags.Analytics, analytics), new TagValue(Tags.Coupon, coupon)); } @@ -525,8 +513,8 @@ namespace ASC.Web.Studio.Core.Notify } Log.Info("End SendSaasTariffLetters"); - } - + } + public void SendEnterpriseLetters(string senderName, DateTime scheduleDate) { var nowDate = scheduleDate.Date; @@ -554,23 +542,14 @@ namespace ASC.Web.Studio.Core.Notify try { using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - var configuration = scope.ServiceProvider.GetService(); - var settingsManager = scope.ServiceProvider.GetService(); - var defaultRebranding = MailWhiteLabelSettings.IsDefault(settingsManager, configuration); - tenantManager.SetCurrentTenant(tenant.TenantId); + var scopeClass = scope.ServiceProvider.GetService(); - var userManager = scope.ServiceProvider.GetService(); - var studioNotifyHelper = scope.ServiceProvider.GetService(); - var paymentManager = scope.ServiceProvider.GetService(); - var tenantExtra = scope.ServiceProvider.GetService(); - var coreBaseSettings = scope.ServiceProvider.GetService(); - var commonLinkUtility = scope.ServiceProvider.GetService(); - var context = scope.ServiceProvider.GetService>(); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(studioNotifyHelper.NotifySource, scope); + var defaultRebranding = MailWhiteLabelSettings.IsDefault(scopeClass.SettingsManager, scopeClass.Configuration); + scopeClass.TenantManager.SetCurrentTenant(tenant.TenantId); + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifyHelper.NotifySource, scope); - var tariff = paymentManager.GetTariff(tenant.TenantId); - var quota = tenantManager.GetTenantQuota(tenant.TenantId); + var tariff = scopeClass.PaymentManager.GetTariff(tenant.TenantId); + var quota = scopeClass.TenantManager.GetTenantQuota(tenant.TenantId); var createdDate = tenant.CreatedDateTime.Date; var dueDateIsNotMax = tariff.DueDate != DateTime.MaxValue; @@ -650,42 +629,42 @@ namespace ASC.Web.Studio.Core.Notify paymentMessage = false; toadmins = true; - tableItemImg1 = studioNotifyHelper.GetNotificationImageUrl("tips-customize-brand-100.png"); + tableItemImg1 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-customize-brand-100.png"); tableItemText1 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_brand_hdr; tableItemComment1 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_brand; - tableItemImg2 = studioNotifyHelper.GetNotificationImageUrl("tips-customize-regional-100.png"); + tableItemImg2 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-customize-regional-100.png"); tableItemText2 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_regional_hdr; tableItemComment2 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_regional; - tableItemImg3 = studioNotifyHelper.GetNotificationImageUrl("tips-customize-customize-100.png"); + tableItemImg3 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-customize-customize-100.png"); tableItemText3 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_customize_hdr; tableItemComment3 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_customize; - tableItemImg4 = studioNotifyHelper.GetNotificationImageUrl("tips-customize-modules-100.png"); + tableItemImg4 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-customize-modules-100.png"); tableItemText4 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_modules_hdr; tableItemComment4 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_modules; - tableItemImg5 = studioNotifyHelper.GetNotificationImageUrl("tips-customize-3rdparty-100.png"); + tableItemImg5 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-customize-3rdparty-100.png"); tableItemText5 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_3rdparty_hdr; tableItemComment5 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_3rdparty; greenButtonText = () => WebstudioNotifyPatternResource.ButtonConfigureRightNow; - greenButtonUrl = commonLinkUtility.GetFullAbsolutePath(commonLinkUtility.GetAdministration(ManagementType.General)); + greenButtonUrl = scopeClass.CommonLinkUtility.GetFullAbsolutePath(scopeClass.CommonLinkUtility.GetAdministration(ManagementType.General)); } #endregion #region 4 days after registration to admins ENTERPRISE TRIAL + only 1 user + defaultRebranding - else if (createdDate.AddDays(4) == nowDate && userManager.GetUsers().Count() == 1) + else if (createdDate.AddDays(4) == nowDate && scopeClass.UserManager.GetUsers().Count() == 1) { action = Actions.EnterpriseAdminInviteTeammatesV10; paymentMessage = false; toadmins = true; greenButtonText = () => WebstudioNotifyPatternResource.ButtonInviteRightNow; - greenButtonUrl = string.Format("{0}/products/people/", commonLinkUtility.GetFullAbsolutePath("~").TrimEnd('/')); + greenButtonUrl = string.Format("{0}/products/people/", scopeClass.CommonLinkUtility.GetFullAbsolutePath("~").TrimEnd('/')); } #endregion @@ -697,8 +676,8 @@ namespace ASC.Web.Studio.Core.Notify List datesWithActivity; datesWithActivity = - context.Get(dbid).FeedAggregates - .Where(r => r.Tenant == tenantManager.GetCurrentTenant().TenantId) + scopeClass.DbContextManager.Get(dbid).FeedAggregates + .Where(r => r.Tenant == scopeClass.TenantManager.GetCurrentTenant().TenantId) .Where(r => r.CreatedDate <= nowDate.AddDays(-1)) .GroupBy(r => r.CreatedDate.Date) .Select(r => r.Key) @@ -723,38 +702,38 @@ namespace ASC.Web.Studio.Core.Notify toadmins = true; tousers = true; - tableItemImg1 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-formatting-100.png"); + tableItemImg1 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-formatting-100.png"); tableItemText1 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_formatting_hdr; tableItemComment1 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_formatting; - tableItemLearnMoreUrl1 = studioNotifyHelper.Helplink + "/onlyoffice-editors/index.aspx"; + tableItemLearnMoreUrl1 = scopeClass.StudioNotifyHelper.Helplink + "/onlyoffice-editors/index.aspx"; tableItemLearnMoreText1 = () => WebstudioNotifyPatternResource.LinkLearnMore; - tableItemImg2 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-share-100.png"); + tableItemImg2 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-share-100.png"); tableItemText2 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_share_hdr; tableItemComment2 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_share; - tableItemImg3 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-coediting-100.png"); + tableItemImg3 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-coediting-100.png"); tableItemText3 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_coediting_hdr; tableItemComment3 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_coediting; - tableItemImg4 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-review-100.png"); + tableItemImg4 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-review-100.png"); tableItemText4 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_review_hdr; tableItemComment4 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_review; - tableItemImg5 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-3rdparty-100.png"); + tableItemImg5 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-3rdparty-100.png"); tableItemText5 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_3rdparty_hdr; tableItemComment5 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_3rdparty; - tableItemImg6 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-attach-100.png"); + tableItemImg6 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-attach-100.png"); tableItemText6 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_attach_hdr; tableItemComment6 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_attach; - tableItemImg7 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-apps-100.png"); + tableItemImg7 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-apps-100.png"); tableItemText7 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_apps_hdr; tableItemComment7 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_apps; greenButtonText = () => WebstudioNotifyPatternResource.ButtonAccessYouWebOffice; - greenButtonUrl = string.Format("{0}/products/files/", commonLinkUtility.GetFullAbsolutePath("~").TrimEnd('/')); + greenButtonUrl = string.Format("{0}/products/files/", scopeClass.CommonLinkUtility.GetFullAbsolutePath("~").TrimEnd('/')); } #endregion @@ -812,31 +791,31 @@ namespace ASC.Web.Studio.Core.Notify paymentMessage = false; toadmins = true; - tableItemImg1 = studioNotifyHelper.GetNotificationImageUrl("tips-customize-brand-100.png"); + tableItemImg1 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-customize-brand-100.png"); tableItemText1 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_brand_hdr; tableItemComment1 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_brand; - tableItemImg2 = studioNotifyHelper.GetNotificationImageUrl("tips-customize-regional-100.png"); + tableItemImg2 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-customize-regional-100.png"); tableItemText2 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_regional_hdr; tableItemComment2 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_regional; - tableItemImg3 = studioNotifyHelper.GetNotificationImageUrl("tips-customize-customize-100.png"); + tableItemImg3 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-customize-customize-100.png"); tableItemText3 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_customize_hdr; tableItemComment3 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_customize; - tableItemImg4 = studioNotifyHelper.GetNotificationImageUrl("tips-customize-modules-100.png"); + tableItemImg4 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-customize-modules-100.png"); tableItemText4 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_modules_hdr; tableItemComment4 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_modules; - if (!coreBaseSettings.CustomMode) + if (!scopeClass.CoreBaseSettings.CustomMode) { - tableItemImg5 = studioNotifyHelper.GetNotificationImageUrl("tips-customize-3rdparty-100.png"); + tableItemImg5 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-customize-3rdparty-100.png"); tableItemText5 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_3rdparty_hdr; tableItemComment5 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_3rdparty; } greenButtonText = () => WebstudioNotifyPatternResource.ButtonConfigureRightNow; - greenButtonUrl = commonLinkUtility.GetFullAbsolutePath(commonLinkUtility.GetAdministration(ManagementType.General)); + greenButtonUrl = scopeClass.CommonLinkUtility.GetFullAbsolutePath(scopeClass.CommonLinkUtility.GetAdministration(ManagementType.General)); } #endregion @@ -856,7 +835,7 @@ namespace ASC.Web.Studio.Core.Notify : Actions.EnterpriseWhitelabelAdminPaymentWarningBefore7V10; toadmins = true; greenButtonText = () => WebstudioNotifyPatternResource.ButtonSelectPricingPlans; - greenButtonUrl = commonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); + greenButtonUrl = scopeClass.CommonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); } #endregion @@ -870,7 +849,7 @@ namespace ASC.Web.Studio.Core.Notify : Actions.EnterpriseWhitelabelAdminPaymentWarningV10; toadmins = true; greenButtonText = () => WebstudioNotifyPatternResource.ButtonSelectPricingPlans; - greenButtonUrl = commonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); + greenButtonUrl = scopeClass.CommonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); } #endregion @@ -881,23 +860,23 @@ namespace ASC.Web.Studio.Core.Notify if (action == null) continue; - var users = studioNotifyHelper.GetRecipients(toadmins, tousers, false); + var users = scopeClass.StudioNotifyHelper.GetRecipients(toadmins, tousers, false); - foreach (var u in users.Where(u => paymentMessage || studioNotifyHelper.IsSubscribedToNotify(u, Actions.PeriodicNotify))) + foreach (var u in users.Where(u => paymentMessage || scopeClass.StudioNotifyHelper.IsSubscribedToNotify(u, Actions.PeriodicNotify))) { var culture = string.IsNullOrEmpty(u.CultureName) ? tenant.GetCulture() : u.GetCulture(); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; - var rquota = tenantExtra.GetRightQuota() ?? TenantQuota.Default; + var rquota = scopeClass.TenantExtra.GetRightQuota() ?? TenantQuota.Default; client.SendNoticeToAsync( action, - new[] { studioNotifyHelper.ToRecipient(u.ID) }, + new[] { scopeClass.StudioNotifyHelper.ToRecipient(u.ID) }, new[] { senderName }, new TagValue(Tags.UserName, u.FirstName.HtmlEncode()), - new TagValue(Tags.PricingPage, commonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx")), - new TagValue(Tags.ActiveUsers, userManager.GetUsers().Count()), + new TagValue(Tags.PricingPage, scopeClass.CommonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx")), + new TagValue(Tags.ActiveUsers, scopeClass.UserManager.GetUsers().Count()), new TagValue(Tags.Price, rquota.Price), new TagValue(Tags.PricePeriod, rquota.Year3 ? UserControlsCommonResource.TariffPerYear3 : rquota.Year ? UserControlsCommonResource.TariffPerYear : UserControlsCommonResource.TariffPerMonth), new TagValue(Tags.DueDate, dueDate.ToLongDateString()), @@ -950,14 +929,10 @@ namespace ASC.Web.Studio.Core.Notify try { using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); - tenantManager.SetCurrentTenant(tenant.TenantId); - - var userManager = scope.ServiceProvider.GetService(); - var displayUserSettingsHelper = scope.ServiceProvider.GetService(); - var studioNotifyHelper = scope.ServiceProvider.GetService(); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(studioNotifyHelper.NotifySource, scope); + scopeClass.TenantManager.SetCurrentTenant(tenant.TenantId); + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifyHelper.NotifySource, scope); var createdDate = tenant.CreatedDateTime.Date; @@ -1035,37 +1010,37 @@ namespace ASC.Web.Studio.Core.Notify { action = Actions.OpensourceAdminDocsTips; - tableItemImg1 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-coediting-100.png"); + tableItemImg1 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-coediting-100.png"); tableItemComment1 = () => WebstudioNotifyPatternResource.ItemOpensourceDocsTips1; - tableItemLearnMoreUrl1 = studioNotifyHelper.Helplink + "/ONLYOFFICE-Editors/ONLYOFFICE-Document-Editor/HelpfulHints/CollaborativeEditing.aspx"; + tableItemLearnMoreUrl1 = scopeClass.StudioNotifyHelper.Helplink + "/ONLYOFFICE-Editors/ONLYOFFICE-Document-Editor/HelpfulHints/CollaborativeEditing.aspx"; tableItemLearnMoreText1 = () => WebstudioNotifyPatternResource.LinkLearnMore; - tableItemImg2 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-docinfo-100.png"); + tableItemImg2 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-docinfo-100.png"); tableItemComment2 = () => WebstudioNotifyPatternResource.ItemOpensourceDocsTips2; - tableItemLearnMoreUrl2 = studioNotifyHelper.Helplink + "/ONLYOFFICE-Editors/ONLYOFFICE-Document-Editor/UsageInstructions/ViewDocInfo.aspx"; + tableItemLearnMoreUrl2 = scopeClass.StudioNotifyHelper.Helplink + "/ONLYOFFICE-Editors/ONLYOFFICE-Document-Editor/UsageInstructions/ViewDocInfo.aspx"; tableItemLearnMoreText2 = () => WebstudioNotifyPatternResource.LinkLearnMore; - tableItemImg3 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-review-100.png"); + tableItemImg3 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-review-100.png"); tableItemComment3 = () => WebstudioNotifyPatternResource.ItemOpensourceDocsTips3; - tableItemLearnMoreUrl3 = studioNotifyHelper.Helplink + "/ONLYOFFICE-Editors/ONLYOFFICE-Document-Editor/HelpfulHints/Review.aspx"; + tableItemLearnMoreUrl3 = scopeClass.StudioNotifyHelper.Helplink + "/ONLYOFFICE-Editors/ONLYOFFICE-Document-Editor/HelpfulHints/Review.aspx"; tableItemLearnMoreText3 = () => WebstudioNotifyPatternResource.LinkLearnMore; - tableItemImg4 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-share-100.png"); + tableItemImg4 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-share-100.png"); tableItemComment4 = () => WebstudioNotifyPatternResource.ItemOpensourceDocsTips4; - tableItemLearnMoreUrl4 = studioNotifyHelper.Helplink + "/gettingstarted/documents.aspx#SharingDocuments_block"; + tableItemLearnMoreUrl4 = scopeClass.StudioNotifyHelper.Helplink + "/gettingstarted/documents.aspx#SharingDocuments_block"; tableItemLearnMoreText4 = () => WebstudioNotifyPatternResource.LinkLearnMore; - tableItemImg5 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-mailmerge-100.png"); + tableItemImg5 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-mailmerge-100.png"); tableItemComment5 = () => WebstudioNotifyPatternResource.ItemOpensourceDocsTips5; - tableItemLearnMoreUrl5 = studioNotifyHelper.Helplink + "/ONLYOFFICE-Editors/ONLYOFFICE-Document-Editor/UsageInstructions/UseMailMerge.aspx"; + tableItemLearnMoreUrl5 = scopeClass.StudioNotifyHelper.Helplink + "/ONLYOFFICE-Editors/ONLYOFFICE-Document-Editor/UsageInstructions/UseMailMerge.aspx"; tableItemLearnMoreText5 = () => WebstudioNotifyPatternResource.LinkLearnMore; - tableItemImg6 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-desktop-100.png"); + tableItemImg6 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-desktop-100.png"); tableItemComment6 = () => WebstudioNotifyPatternResource.ItemOpensourceDocsTips6; tableItemLearnMoreUrl6 = "http://www.onlyoffice.com/desktop.aspx"; tableItemLearnMoreText6 = () => WebstudioNotifyPatternResource.ButtonDownloadNow; - tableItemImg7 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-apps-100.png"); + tableItemImg7 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-apps-100.png"); tableItemComment7 = () => WebstudioNotifyPatternResource.ItemOpensourceDocsTips7; tableItemLearnMoreUrl7 = "https://itunes.apple.com/us/app/onlyoffice-documents/id944896972"; tableItemLearnMoreText7 = () => WebstudioNotifyPatternResource.ButtonGoToAppStore; @@ -1078,9 +1053,9 @@ namespace ASC.Web.Studio.Core.Notify if (action == null) continue; - var users = studioNotifyHelper.GetRecipients(true, false, false); + var users = scopeClass.StudioNotifyHelper.GetRecipients(true, false, false); - foreach (var u in users.Where(u => studioNotifyHelper.IsSubscribedToNotify(u, Actions.PeriodicNotify))) + foreach (var u in users.Where(u => scopeClass.StudioNotifyHelper.IsSubscribedToNotify(u, Actions.PeriodicNotify))) { var culture = string.IsNullOrEmpty(u.CultureName) ? tenant.GetCulture() : u.GetCulture(); Thread.CurrentThread.CurrentCulture = culture; @@ -1088,9 +1063,9 @@ namespace ASC.Web.Studio.Core.Notify client.SendNoticeToAsync( action, - new[] { studioNotifyHelper.ToRecipient(u.ID) }, + new[] { scopeClass.StudioNotifyHelper.ToRecipient(u.ID) }, new[] { senderName }, - new TagValue(Tags.UserName, u.DisplayUserName(displayUserSettingsHelper)), + new TagValue(Tags.UserName, u.DisplayUserName(scopeClass.DisplayUserSettingsHelper)), TagValues.GreenButton(greenButtonText, greenButtonUrl), TagValues.TableTop(), TagValues.TableItem(1, tableItemText1, tableItemUrl1, tableItemImg1, tableItemComment1, tableItemLearnMoreText1, tableItemLearnMoreUrl1), @@ -1137,26 +1112,20 @@ namespace ASC.Web.Studio.Core.Notify var sendCount = 0; using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); - tenantManager.SetCurrentTenant(tenant.TenantId); - - var userManager = scope.ServiceProvider.GetService(); - var studioNotifyHelper = scope.ServiceProvider.GetService(); - var securityContext = scope.ServiceProvider.GetService(); - var authentication = scope.ServiceProvider.GetService(); - var coreBaseSettings = scope.ServiceProvider.GetService(); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(studioNotifyHelper.NotifySource, scope); + scopeClass.TenantManager.SetCurrentTenant(tenant.TenantId); + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifyHelper.NotifySource, scope); Log.InfoFormat("Current tenant: {0}", tenant.TenantId); - var users = userManager.GetUsers(EmployeeStatus.Active); + var users = scopeClass.UserManager.GetUsers(EmployeeStatus.Active); - foreach (var user in users.Where(u => studioNotifyHelper.IsSubscribedToNotify(u, Actions.PeriodicNotify))) + foreach (var user in users.Where(u => scopeClass.StudioNotifyHelper.IsSubscribedToNotify(u, Actions.PeriodicNotify))) { INotifyAction action; - securityContext.AuthenticateMe(authentication.GetAccountByID(tenant.TenantId, user.ID)); + scopeClass.SecurityContext.AuthenticateMe(scopeClass.AuthManager.GetAccountByID(tenant.TenantId, user.ID)); var culture = tenant.GetCulture(); if (!string.IsNullOrEmpty(user.CultureName)) @@ -1177,7 +1146,7 @@ namespace ASC.Web.Studio.Core.Notify var dayAfterRegister = (int)scheduleDate.Date.Subtract(user.CreateDate.Date).TotalDays; - if (coreBaseSettings.CustomMode) + if (scopeClass.CoreBaseSettings.CustomMode) { switch (dayAfterRegister) { @@ -1222,12 +1191,12 @@ namespace ASC.Web.Studio.Core.Notify client.SendNoticeToAsync( action, null, - studioNotifyHelper.RecipientFromEmail(user.Email, true), + scopeClass.StudioNotifyHelper.RecipientFromEmail(user.Email, true), new[] { senderName }, TagValues.PersonalHeaderStart(), TagValues.PersonalHeaderEnd(), TagValues.GreenButton(greenButtonText, greenButtonUrl), - new TagValue(CommonTags.Footer, coreBaseSettings.CustomMode ? "personalCustomMode" : "personal")); + new TagValue(CommonTags.Footer, scopeClass.CoreBaseSettings.CustomMode ? "personalCustomMode" : "personal")); } Log.InfoFormat("Total send count: {0}", sendCount); @@ -1251,6 +1220,64 @@ namespace ASC.Web.Studio.Core.Notify return !isSubscribe; } + + class Scope + { + internal TenantManager TenantManager { get; } + internal UserManager UserManager { get; } + internal StudioNotifyHelper StudioNotifyHelper { get; } + internal PaymentManager PaymentManager { get; } + internal TenantExtra TenantExtra { get; } + internal AuthContext AuthContext { get; } + internal CommonLinkUtility CommonLinkUtility { get; } + internal ApiSystemHelper ApiSystemHelper { get; } + internal SetupInfo SetupInfo { get; } + internal DbContextManager DbContextManager { get; } + internal CouponManager CouponManager { get; } + internal IConfiguration Configuration { get; } + internal SettingsManager SettingsManager { get; } + internal CoreBaseSettings CoreBaseSettings { get; } + internal DisplayUserSettingsHelper DisplayUserSettingsHelper { get; } + internal AuthManager AuthManager { get; } + internal SecurityContext SecurityContext { get; } + + public Scope(TenantManager tenantManager, + UserManager userManager, + StudioNotifyHelper studioNotifyHelper, + PaymentManager paymentManager, + TenantExtra tenantExtra, + AuthContext authContext, + CommonLinkUtility commonLinkUtility, + ApiSystemHelper apiSystemHelper, + SetupInfo setupInfo, + DbContextManager dbContextManager, + CouponManager couponManager, + IConfiguration configuration, + SettingsManager settingsManager, + CoreBaseSettings coreBaseSettings, + DisplayUserSettingsHelper displayUserSettingsHelper, + AuthManager authManager, + SecurityContext securityContext) + { + TenantManager = tenantManager; + UserManager = userManager; + StudioNotifyHelper = studioNotifyHelper; + PaymentManager = paymentManager; + TenantExtra = tenantExtra; + AuthContext = authContext; + CommonLinkUtility = commonLinkUtility; + ApiSystemHelper = apiSystemHelper; + SetupInfo = setupInfo; + DbContextManager = dbContextManager; + CouponManager = couponManager; + Configuration = configuration; + SettingsManager = settingsManager; + CoreBaseSettings = coreBaseSettings; + DisplayUserSettingsHelper = displayUserSettingsHelper; + AuthManager = authManager; + SecurityContext = securityContext; + } + } } public static class StudioPeriodicNotifyExtension { diff --git a/web/ASC.Web.Core/Notify/StudioWhatsNewNotify.cs b/web/ASC.Web.Core/Notify/StudioWhatsNewNotify.cs index f4c2c537bb..ed60465295 100644 --- a/web/ASC.Web.Core/Notify/StudioWhatsNewNotify.cs +++ b/web/ASC.Web.Core/Notify/StudioWhatsNewNotify.cs @@ -61,7 +61,7 @@ namespace ASC.Web.Studio.Core.Notify ServiceProvider = serviceProvider; Confuguration = confuguration; } - + public void SendMsgWhatsNew(DateTime scheduleDate) { var log = ServiceProvider.GetService>().Get("ASC.Notify"); @@ -82,55 +82,43 @@ namespace ASC.Web.Studio.Core.Notify try { using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - var paymentManager = scope.ServiceProvider.GetService(); - var tenantUtil = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); - var tenant = tenantManager.GetTenant(tenantid); + var tenant = scopeClass.TenantManager.GetTenant(tenantid); if (tenant == null || tenant.Status != TenantStatus.Active || - !TimeToSendWhatsNew(tenantUtil.DateTimeFromUtc(tenant.TimeZone, scheduleDate)) || - TariffState.NotPaid <= paymentManager.GetTariff(tenantid).State) + !TimeToSendWhatsNew(scopeClass.TenantUtil.DateTimeFromUtc(tenant.TimeZone, scheduleDate)) || + TariffState.NotPaid <= scopeClass.PaymentManager.GetTariff(tenantid).State) { continue; } - tenantManager.SetCurrentTenant(tenant); + scopeClass.TenantManager.SetCurrentTenant(tenant); + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifyHelper.NotifySource, scope); - var studioNotifyHelper = scope.ServiceProvider.GetService(); - var userManager = scope.ServiceProvider.GetService(); - var securityContext = scope.ServiceProvider.GetService(); - var authContext = scope.ServiceProvider.GetService(); - var authentication = scope.ServiceProvider.GetService(); - var commonLinkUtility = scope.ServiceProvider.GetService(); - var displayUserSettingsHelper = scope.ServiceProvider.GetService(); - var feedAggregateDataProvider = scope.ServiceProvider.GetService(); - var coreSettings = scope.ServiceProvider.GetService(); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(studioNotifyHelper.NotifySource, scope); - - log.InfoFormat("Start send whats new in {0} ({1}).", tenant.GetTenantDomain(coreSettings), tenantid); - foreach (var user in userManager.GetUsers()) + log.InfoFormat("Start send whats new in {0} ({1}).", tenant.GetTenantDomain(scopeClass.CoreSettings), tenantid); + foreach (var user in scopeClass.UserManager.GetUsers()) { - if (!studioNotifyHelper.IsSubscribedToNotify(user, Actions.SendWhatsNew)) + if (!scopeClass.StudioNotifyHelper.IsSubscribedToNotify(user, Actions.SendWhatsNew)) { continue; } - securityContext.AuthenticateMe(authentication.GetAccountByID(tenant.TenantId, user.ID)); + scopeClass.SecurityContext.AuthenticateMe(scopeClass.AuthManager.GetAccountByID(tenant.TenantId, user.ID)); var culture = string.IsNullOrEmpty(user.CultureName) ? tenant.GetCulture() : user.GetCulture(); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; - var feeds = feedAggregateDataProvider.GetFeeds(new FeedApiFilter + var feeds = scopeClass.FeedAggregateDataProvider.GetFeeds(new FeedApiFilter { From = scheduleDate.Date.AddDays(-1), To = scheduleDate.Date.AddSeconds(-1), Max = 100, }); - var feedMinWrappers = feeds.ConvertAll(f => f.ToFeedMin(userManager)); + var feedMinWrappers = feeds.ConvertAll(f => f.ToFeedMin(scopeClass.UserManager)); var feedMinGroupedWrappers = feedMinWrappers .Where(f => @@ -149,10 +137,10 @@ namespace ASC.Web.Studio.Core.Notify g => g.Select(f => new WhatsNewUserActivity { Date = f.CreatedDate, - UserName = f.Author != null && f.Author.UserInfo != null ? f.Author.UserInfo.DisplayUserName(displayUserSettingsHelper) : string.Empty, - UserAbsoluteURL = f.Author != null && f.Author.UserInfo != null ? commonLinkUtility.GetFullAbsolutePath(f.Author.UserInfo.GetUserProfilePageURL(commonLinkUtility)) : string.Empty, + UserName = f.Author != null && f.Author.UserInfo != null ? f.Author.UserInfo.DisplayUserName(scopeClass.DisplayUserSettingsHelper) : string.Empty, + UserAbsoluteURL = f.Author != null && f.Author.UserInfo != null ? scopeClass.CommonLinkUtility.GetFullAbsolutePath(f.Author.UserInfo.GetUserProfilePageURL(scopeClass.CommonLinkUtility)) : string.Empty, Title = HtmlUtil.GetText(f.Title, 512), - URL = commonLinkUtility.GetFullAbsolutePath(f.ItemUrl), + URL = scopeClass.CommonLinkUtility.GetFullAbsolutePath(f.ItemUrl), BreadCrumbs = new string[0], Action = getWhatsNewActionText(f) }).ToList()); @@ -172,10 +160,10 @@ namespace ASC.Web.Studio.Core.Notify new WhatsNewUserActivity { Date = prawbc.CreatedDate, - UserName = prawbc.Author != null && prawbc.Author.UserInfo != null ? prawbc.Author.UserInfo.DisplayUserName(displayUserSettingsHelper) : string.Empty, - UserAbsoluteURL = prawbc.Author != null && prawbc.Author.UserInfo != null ? commonLinkUtility.GetFullAbsolutePath(prawbc.Author.UserInfo.GetUserProfilePageURL(commonLinkUtility)) : string.Empty, + UserName = prawbc.Author != null && prawbc.Author.UserInfo != null ? prawbc.Author.UserInfo.DisplayUserName(scopeClass.DisplayUserSettingsHelper) : string.Empty, + UserAbsoluteURL = prawbc.Author != null && prawbc.Author.UserInfo != null ? scopeClass.CommonLinkUtility.GetFullAbsolutePath(prawbc.Author.UserInfo.GetUserProfilePageURL(scopeClass.CommonLinkUtility)) : string.Empty, Title = HtmlUtil.GetText(prawbc.Title, 512), - URL = commonLinkUtility.GetFullAbsolutePath(prawbc.ItemUrl), + URL = scopeClass.CommonLinkUtility.GetFullAbsolutePath(prawbc.ItemUrl), BreadCrumbs = new string[0], Action = getWhatsNewActionText(prawbc) }); @@ -192,10 +180,10 @@ namespace ASC.Web.Studio.Core.Notify new WhatsNewUserActivity { Date = ls.CreatedDate, - UserName = ls.Author != null && ls.Author.UserInfo != null ? ls.Author.UserInfo.DisplayUserName(displayUserSettingsHelper) : string.Empty, - UserAbsoluteURL = ls.Author != null && ls.Author.UserInfo != null ? commonLinkUtility.GetFullAbsolutePath(ls.Author.UserInfo.GetUserProfilePageURL(commonLinkUtility)) : string.Empty, + UserName = ls.Author != null && ls.Author.UserInfo != null ? ls.Author.UserInfo.DisplayUserName(scopeClass.DisplayUserSettingsHelper) : string.Empty, + UserAbsoluteURL = ls.Author != null && ls.Author.UserInfo != null ? scopeClass.CommonLinkUtility.GetFullAbsolutePath(ls.Author.UserInfo.GetUserProfilePageURL(scopeClass.CommonLinkUtility)) : string.Empty, Title = HtmlUtil.GetText(ls.Title, 512), - URL = commonLinkUtility.GetFullAbsolutePath(ls.ItemUrl), + URL = scopeClass.CommonLinkUtility.GetFullAbsolutePath(ls.ItemUrl), BreadCrumbs = i == 0 ? new string[1] { gr.Key } : new string[0], Action = getWhatsNewActionText(ls) }); @@ -303,6 +291,49 @@ namespace ASC.Web.Studio.Core.Notify public DateTime Date { get; set; } public string Action { get; set; } } + + class Scope + { + internal TenantManager TenantManager { get; } + internal PaymentManager PaymentManager { get; } + internal TenantUtil TenantUtil { get; } + internal StudioNotifyHelper StudioNotifyHelper { get; } + internal UserManager UserManager { get; } + internal SecurityContext SecurityContext { get; } + internal AuthContext AuthContext { get; } + internal AuthManager AuthManager { get; } + internal CommonLinkUtility CommonLinkUtility { get; } + internal DisplayUserSettingsHelper DisplayUserSettingsHelper { get; } + internal FeedAggregateDataProvider FeedAggregateDataProvider { get; } + internal CoreSettings CoreSettings { get; } + + public Scope(TenantManager tenantManager, + PaymentManager paymentManager, + TenantUtil tenantUtil, + StudioNotifyHelper studioNotifyHelper, + UserManager userManager, + SecurityContext securityContext, + AuthContext authContext, + AuthManager authManager, + CommonLinkUtility commonLinkUtility, + DisplayUserSettingsHelper displayUserSettingsHelper, + FeedAggregateDataProvider feedAggregateDataProvider, + CoreSettings coreSettings) + { + TenantManager = tenantManager; + PaymentManager = paymentManager; + TenantUtil = tenantUtil; + StudioNotifyHelper = studioNotifyHelper; + UserManager = userManager; + SecurityContext = securityContext; + AuthContext = authContext; + AuthManager = authManager; + CommonLinkUtility = commonLinkUtility; + DisplayUserSettingsHelper = displayUserSettingsHelper; + FeedAggregateDataProvider = feedAggregateDataProvider; + CoreSettings = coreSettings; + } + } } public static class StudioWhatsNewNotifyExtension diff --git a/web/ASC.Web.Core/QuotaSync.cs b/web/ASC.Web.Core/QuotaSync.cs index 6a7324a179..7a4409e35c 100644 --- a/web/ASC.Web.Core/QuotaSync.cs +++ b/web/ASC.Web.Core/QuotaSync.cs @@ -47,24 +47,21 @@ namespace ASC.Web.Studio.Core.Quota TaskInfo = new DistributedTask(); ServiceProvider = serviceProvider; } - + public void RunJob(DistributedTask _, CancellationToken cancellationToken) { using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - tenantManager.SetCurrentTenant(TenantId); - - var storageFactoryConfig = scope.ServiceProvider.GetService(); - var storageFactory = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); + scopeClass.TenantManager.SetCurrentTenant(TenantId); - var storageModules = storageFactoryConfig.GetModuleList(string.Empty).ToList(); + var storageModules = scopeClass.StorageFactoryConfig.GetModuleList(string.Empty).ToList(); foreach (var module in storageModules) { - var storage = storageFactory.GetStorage(TenantId.ToString(), module); + var storage = scopeClass.StorageFactory.GetStorage(TenantId.ToString(), module); storage.ResetQuota(""); - var domains = storageFactoryConfig.GetDomainList(string.Empty, module).ToList(); + var domains = scopeClass.StorageFactoryConfig.GetDomainList(string.Empty, module).ToList(); foreach (var domain in domains) { storage.ResetQuota(domain); @@ -73,11 +70,24 @@ namespace ASC.Web.Studio.Core.Quota } } - public virtual DistributedTask GetDistributedTask() { TaskInfo.SetProperty(TenantIdKey, TenantId); return TaskInfo; } + + class Scope + { + internal TenantManager TenantManager { get; } + internal StorageFactoryConfig StorageFactoryConfig { get; } + internal StorageFactory StorageFactory { get; } + + public Scope(TenantManager tenantManager, StorageFactoryConfig storageFactoryConfig, StorageFactory storageFactory) + { + TenantManager = tenantManager; + StorageFactoryConfig = storageFactoryConfig; + StorageFactory = storageFactory; + } + } } } \ No newline at end of file From eef5c3e4f3b701e4b960689e4b686fe36d41cf81 Mon Sep 17 00:00:00 2001 From: SuhorukovAnton <62381554+SuhorukovAnton@users.noreply.github.com> Date: Sun, 16 Aug 2020 13:11:15 +0300 Subject: [PATCH 05/18] scope: merge fix --- .../Configuration/StorageSettings.cs | 26 +++- .../ASC.Data.Backup/Service/BackupWorker.cs | 143 ++++++++++-------- 2 files changed, 103 insertions(+), 66 deletions(-) diff --git a/common/ASC.Data.Storage/Configuration/StorageSettings.cs b/common/ASC.Data.Storage/Configuration/StorageSettings.cs index c83bbf7c78..5553f50158 100644 --- a/common/ASC.Data.Storage/Configuration/StorageSettings.cs +++ b/common/ASC.Data.Storage/Configuration/StorageSettings.cs @@ -50,19 +50,17 @@ namespace ASC.Data.Storage.Configuration { using var scope = ServiceProvider.CreateScope(); - var storageSettingsHelper = scope.ServiceProvider.GetService(); - var storageSettings = scope.ServiceProvider.GetService(); - var settings = storageSettings.LoadForTenant(i.TenantId); + var scopeClass = scope.ServiceProvider.GetService(); + var settings = scopeClass.SettingsManager.LoadForTenant(i.TenantId); if (i.Name == settings.Module) { - storageSettingsHelper.Clear(settings); + scopeClass.StorageSettingsHelper.Clear(settings); } - var cdnStorageSettings = scope.ServiceProvider.GetService(); - var cdnSettings = storageSettings.LoadForTenant(i.TenantId); + var cdnSettings = scopeClass.SettingsManager.LoadForTenant(i.TenantId); if (i.Name == cdnSettings.Module) { - storageSettingsHelper.Clear(cdnSettings); + scopeClass.StorageSettingsHelper.Clear(cdnSettings); } }, CacheNotifyAction.Remove); } @@ -209,6 +207,20 @@ namespace ASC.Data.Storage.Configuration Activator.CreateInstance(DataStoreConsumer(baseStorageSettings).HandlerType, TenantManager, PathUtils, HttpContextAccessor, Options)) .Configure(TenantManager.GetCurrentTenant().TenantId.ToString(), null, null, DataStoreConsumer(baseStorageSettings)); } + + class Scope + { + internal StorageSettingsHelper StorageSettingsHelper { get; } + internal SettingsManager SettingsManager { get; } + internal CdnStorageSettings CdnStorageSettings { get; } + + public Scope(StorageSettingsHelper storageSettingsHelper, SettingsManager settingsManager, CdnStorageSettings cdnStorageSettings) + { + StorageSettingsHelper = storageSettingsHelper; + SettingsManager = settingsManager; + CdnStorageSettings = cdnStorageSettings; + } + } } public static class StorageSettingsExtension diff --git a/common/services/ASC.Data.Backup/Service/BackupWorker.cs b/common/services/ASC.Data.Backup/Service/BackupWorker.cs index 574a97f6de..6a12fd27df 100644 --- a/common/services/ASC.Data.Backup/Service/BackupWorker.cs +++ b/common/services/ASC.Data.Backup/Service/BackupWorker.cs @@ -369,20 +369,16 @@ namespace ASC.Data.Backup.Service } using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - var backupStorageFactory = scope.ServiceProvider.GetService(); - var backupRepository = scope.ServiceProvider.GetService(); - var notifyHelper = scope.ServiceProvider.GetService(); - var backupWorker = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); - var tenant = tenantManager.GetTenant(TenantId); + var tenant = scopeClass.TenantManager.GetTenant(TenantId); var backupName = string.Format("{0}_{1:yyyy-MM-dd_HH-mm-ss}.{2}", tenant.TenantAlias, DateTime.UtcNow, ArchiveFormat); var tempFile = Path.Combine(TempFolder, backupName); var storagePath = tempFile; try { - var backupTask = scope.ServiceProvider.GetService(); + var backupTask = scopeClass.BackupPortalTask; backupTask.Init(TenantId, ConfigPaths[CurrentRegion], tempFile, Limit); if (!BackupMail) @@ -393,19 +389,19 @@ namespace ASC.Data.Backup.Service backupTask.ProgressChanged += (sender, args) => { Percentage = 0.9 * args.Progress; - backupWorker.PublishProgress(this); + scopeClass.BackupWorker.PublishProgress(this); }; backupTask.RunJob(); - var backupStorage = backupStorageFactory.GetBackupStorage(StorageType, TenantId, StorageParams); + var backupStorage = scopeClass.BackupStorageFactory.GetBackupStorage(StorageType, TenantId, StorageParams); if (backupStorage != null) { storagePath = backupStorage.Upload(StorageBasePath, tempFile, UserId); Link = backupStorage.GetPublicLink(storagePath); } - var repo = backupRepository; + var repo = scopeClass.BackupRepository; repo.SaveBackupRecord( new BackupRecord { @@ -425,11 +421,11 @@ namespace ASC.Data.Backup.Service if (UserId != Guid.Empty && !IsScheduled) { - notifyHelper.SendAboutBackupCompleted(UserId); + scopeClass.NotifyHelper.SendAboutBackupCompleted(UserId); } IsCompleted = true; - backupWorker.PublishProgress(this); + scopeClass.BackupWorker.PublishProgress(this); } catch (Exception error) { @@ -441,7 +437,7 @@ namespace ASC.Data.Backup.Service { try { - backupWorker.PublishProgress(this); + scopeClass.BackupWorker.PublishProgress(this); } catch (Exception error) { @@ -505,35 +501,32 @@ namespace ASC.Data.Backup.Service public override void RunJob() { using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - var backupStorageFactory = scope.ServiceProvider.GetService(); - var notifyHelper = scope.ServiceProvider.GetService(); - var backupWorker = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); Tenant tenant = null; var tempFile = PathHelper.GetTempFileName(TempFolder); try { - tenant = tenantManager.GetTenant(TenantId); - notifyHelper.SendAboutRestoreStarted(tenant, Notify); - var storage = backupStorageFactory.GetBackupStorage(StorageType, TenantId, StorageParams); + tenant = scopeClass.TenantManager.GetTenant(TenantId); + scopeClass.NotifyHelper.SendAboutRestoreStarted(tenant, Notify); + var storage = scopeClass.BackupStorageFactory.GetBackupStorage(StorageType, TenantId, StorageParams); storage.Download(StoragePath, tempFile); Percentage = 10; tenant.SetStatus(TenantStatus.Restoring); - tenantManager.SaveTenant(tenant); + scopeClass.TenantManager.SaveTenant(tenant); var columnMapper = new ColumnMapper(); columnMapper.SetMapping("tenants_tenants", "alias", tenant.TenantAlias, ((Guid)Id).ToString("N")); columnMapper.Commit(); - var restoreTask = scope.ServiceProvider.GetService(); + var restoreTask = scopeClass.RestorePortalTask; restoreTask.Init(ConfigPaths[CurrentRegion], tempFile, TenantId, columnMapper, UpgradesPath); restoreTask.ProgressChanged += (sender, args) => { Percentage = Percentage = (10d + 0.65 * args.Progress); - backupWorker.PublishProgress(this); + scopeClass.BackupWorker.PublishProgress(this); }; restoreTask.RunJob(); @@ -544,18 +537,18 @@ namespace ASC.Data.Backup.Service if (Notify) { AscCacheNotify.OnClearCache(); - var tenants = tenantManager.GetTenants(); + var tenants = scopeClass.TenantManager.GetTenants(); foreach (var t in tenants) { - notifyHelper.SendAboutRestoreCompleted(t, Notify); + scopeClass.NotifyHelper.SendAboutRestoreCompleted(t, Notify); } } } else { - tenantManager.RemoveTenant(tenant.TenantId); + scopeClass.TenantManager.RemoveTenant(tenant.TenantId); - restoredTenant = tenantManager.GetTenant(columnMapper.GetTenantMapping()); + restoredTenant = scopeClass.TenantManager.GetTenant(columnMapper.GetTenantMapping()); restoredTenant.SetStatus(TenantStatus.Active); restoredTenant.TenantAlias = tenant.TenantAlias; restoredTenant.PaymentId = string.Empty; @@ -563,22 +556,22 @@ namespace ASC.Data.Backup.Service { restoredTenant.MappedDomain = tenant.MappedDomain; } - tenantManager.SaveTenant(restoredTenant); + scopeClass.TenantManager.SaveTenant(restoredTenant); // sleep until tenants cache expires Thread.Sleep(TimeSpan.FromMinutes(2)); - notifyHelper.SendAboutRestoreCompleted(restoredTenant, Notify); + scopeClass.NotifyHelper.SendAboutRestoreCompleted(restoredTenant, Notify); } Percentage = 75; - backupWorker.PublishProgress(this); + scopeClass.BackupWorker.PublishProgress(this); File.Delete(tempFile); Percentage = 100; - backupWorker.PublishProgress(this); + scopeClass.BackupWorker.PublishProgress(this); } catch (Exception error) { @@ -588,14 +581,14 @@ namespace ASC.Data.Backup.Service if (tenant != null) { tenant.SetStatus(TenantStatus.Active); - tenantManager.SaveTenant(tenant); + scopeClass.TenantManager.SaveTenant(tenant); } } finally { try { - backupWorker.PublishProgress(this); + scopeClass.BackupWorker.PublishProgress(this); } catch (Exception error) { @@ -667,23 +660,21 @@ namespace ASC.Data.Backup.Service public override void RunJob() { using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - var notifyHelper = scope.ServiceProvider.GetService(); - var backupWorker = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var tempFile = PathHelper.GetTempFileName(TempFolder); - var tenant = tenantManager.GetTenant(TenantId); + var tenant = scopeClass.TenantManager.GetTenant(TenantId); var alias = tenant.TenantAlias; try { - notifyHelper.SendAboutTransferStart(tenant, TargetRegion, Notify); - var transferProgressItem = scope.ServiceProvider.GetService(); + scopeClass.NotifyHelper.SendAboutTransferStart(tenant, TargetRegion, Notify); + var transferProgressItem = scopeClass.TransferPortalTask; transferProgressItem.Init(TenantId, ConfigPaths[CurrentRegion], ConfigPaths[TargetRegion], Limit, TempFolder); transferProgressItem.ProgressChanged += (sender, args) => { Percentage = args.Progress; - backupWorker.PublishProgress(this); + scopeClass.BackupWorker.PublishProgress(this); }; if (!TransferMail) { @@ -692,8 +683,8 @@ namespace ASC.Data.Backup.Service transferProgressItem.RunJob(); Link = GetLink(alias, false); - notifyHelper.SendAboutTransferComplete(tenant, TargetRegion, Link, !Notify); - backupWorker.PublishProgress(this); + scopeClass.NotifyHelper.SendAboutTransferComplete(tenant, TargetRegion, Link, !Notify); + scopeClass.BackupWorker.PublishProgress(this); } catch (Exception error) { @@ -701,13 +692,13 @@ namespace ASC.Data.Backup.Service Error = error; Link = GetLink(alias, true); - notifyHelper.SendAboutTransferError(tenant, TargetRegion, Link, !Notify); + scopeClass.NotifyHelper.SendAboutTransferError(tenant, TargetRegion, Link, !Notify); } finally { try { - backupWorker.PublishProgress(this); + scopeClass.BackupWorker.PublishProgress(this); } catch (Exception error) { @@ -735,13 +726,19 @@ namespace ASC.Data.Backup.Service public class FactoryProgressItem { - private IServiceProvider ServiceProvider { get; set; } + public BackupProgressItem BackupProgressItem { get; set; } + public RestoreProgressItem RestoreProgressItem { get; set; } + public TransferProgressItem TransferProgressItem { get; set; } public FactoryProgressItem( - IServiceProvider serviceProvider + BackupProgressItem backupProgressItem, + RestoreProgressItem restoreProgressItem, + TransferProgressItem transferProgressItem ) { - ServiceProvider = serviceProvider; + BackupProgressItem = backupProgressItem; + RestoreProgressItem = restoreProgressItem; + TransferProgressItem = transferProgressItem; } public BackupProgressItem CreateBackupProgressItem( @@ -752,9 +749,8 @@ namespace ASC.Data.Backup.Service string currentRegion, Dictionary configPaths) { - var item = ServiceProvider.GetService(); - item.Init(request, isScheduled, tempFolder, limit, currentRegion, configPaths); - return item; + BackupProgressItem.Init(request, isScheduled, tempFolder, limit, currentRegion, configPaths); + return BackupProgressItem; } public BackupProgressItem CreateBackupProgressItem( @@ -766,9 +762,8 @@ namespace ASC.Data.Backup.Service Dictionary configPaths ) { - var item = ServiceProvider.GetService(); - item.Init(schedule, isScheduled, tempFolder, limit, currentRegion, configPaths); - return item; + BackupProgressItem.Init(schedule, isScheduled, tempFolder, limit, currentRegion, configPaths); + return BackupProgressItem; } public RestoreProgressItem CreateRestoreProgressItem( StartRestoreRequest request, @@ -778,9 +773,8 @@ namespace ASC.Data.Backup.Service Dictionary configPaths ) { - var item = ServiceProvider.GetService(); - item.Init(request, tempFolder, upgradesPath, currentRegion, configPaths); - return item; + RestoreProgressItem.Init(request, tempFolder, upgradesPath, currentRegion, configPaths); + return RestoreProgressItem; } public TransferProgressItem CreateTransferProgressItem( @@ -794,11 +788,42 @@ namespace ASC.Data.Backup.Service Dictionary configPaths ) { - var item = ServiceProvider.GetService(); - item.Init(targetRegion, transferMail, tenantId, tempFolder, limit, notify, currentRegion, configPaths); - return item; + TransferProgressItem.Init(targetRegion, transferMail, tenantId, tempFolder, limit, notify, currentRegion, configPaths); + return TransferProgressItem; } } + + internal class Scope + { + internal TenantManager TenantManager { get; } + internal BackupStorageFactory BackupStorageFactory { get; } + internal NotifyHelper NotifyHelper { get; } + internal BackupRepository BackupRepository { get; } + internal BackupWorker BackupWorker { get; } + internal BackupPortalTask BackupPortalTask { get; } + internal RestorePortalTask RestorePortalTask { get; } + internal TransferPortalTask TransferPortalTask { get; } + + public Scope(TenantManager tenantManager, + BackupStorageFactory backupStorageFactory, + NotifyHelper notifyHelper, + BackupRepository backupRepository, + BackupWorker backupWorker, + BackupPortalTask backupPortalTask, + RestorePortalTask restorePortalTask, + TransferPortalTask transferPortalTask) + { + TenantManager = tenantManager; + BackupStorageFactory = backupStorageFactory; + NotifyHelper = notifyHelper; + BackupRepository = backupRepository; + BackupWorker = backupWorker; + BackupPortalTask = backupPortalTask; + RestorePortalTask = restorePortalTask; + TransferPortalTask = transferPortalTask; + } + } + public static class BackupWorkerExtension { public static DIHelper AddBackupWorkerService(this DIHelper services) From 06e897d9829d70bda00066dfb2fe7265fa6301fd Mon Sep 17 00:00:00 2001 From: SuhorukovAnton <62381554+SuhorukovAnton@users.noreply.github.com> Date: Sun, 16 Aug 2020 17:11:34 +0300 Subject: [PATCH 06/18] scope: fix --- common/ASC.Core.Common/Notify/Context.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/common/ASC.Core.Common/Notify/Context.cs b/common/ASC.Core.Common/Notify/Context.cs index 42bd5eaced..620bdff919 100644 --- a/common/ASC.Core.Common/Notify/Context.cs +++ b/common/ASC.Core.Common/Notify/Context.cs @@ -27,11 +27,13 @@ using System; using System.Collections.Generic; using System.Linq; + using ASC.Common.Logging; using ASC.Notify.Channels; using ASC.Notify.Engine; using ASC.Notify.Model; using ASC.Notify.Sinks; + using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; From 055e787d63c749d6520815ba282501864a11871e Mon Sep 17 00:00:00 2001 From: SuhorukovAnton <62381554+SuhorukovAnton@users.noreply.github.com> Date: Mon, 24 Aug 2020 21:41:06 +0300 Subject: [PATCH 07/18] scope: fix --- ASC.Web.sln | 112 +++++++++++++++ .../Configuration/AmiPublicDnsSyncService.cs | 26 ++-- .../ASC.Core.Common/Notify/EmailSenderSink.cs | 33 +++-- .../Notify/JabberSenderSink.cs | 35 +++-- .../Notify/Senders/AWSSender.cs | 25 ++-- .../Notify/Senders/SmtpSender.cs | 27 ++-- .../Tests/TopSubscriptionProviderTest.cs | 30 ++-- .../ASC.Core.Common/Tests/UserManagerTest.cs | 10 +- .../Users/DisplayUserSettings.cs | 1 + .../ReassignProgressItem.cs | 77 +++++------ .../ASC.Data.Reassigns/RemoveProgressItem.cs | 79 +++++------ .../Configuration/StorageSettings.cs | 28 ++-- common/ASC.Data.Storage/StaticUploader.cs | 17 ++- common/ASC.Data.Storage/StorageHandler.cs | 36 ++--- common/ASC.Data.Storage/StorageUploader.cs | 43 +++--- common/ASC.Resource.Manager/Program.cs | 36 +++-- common/ASC.Resource.Manager/Startup.cs | 1 + .../ASC.Data.Backup/Core/NotifyHelper.cs | 42 +++--- .../ASC.Data.Backup/Service/BackupWorker.cs | 16 +-- .../Tasks/TransferPortalTask.cs | 15 ++ .../ASC.ElasticSearch/Service/Launcher.cs | 23 ++-- .../ASC.ElasticSearch/Service/Service.cs | 26 ++-- .../Service/FeedAggregatorService.cs | 9 +- common/services/ASC.Notify/NotifyService.cs | 31 +++-- .../Core/Core/Dao/TeamlabDao/FolderDao.cs | 2 +- .../Core/Core/Dao/TeamlabDao/SecurityDao.cs | 4 +- .../Core/Core/Dao/TeamlabDao/TagDao.cs | 2 +- .../Core/Core/Thirdparty/CrossDao.cs | 2 +- .../Core/Core/Thirdparty/IDaoSelector.cs | 2 +- .../Thirdparty/ProviderDao/ProviderDaoBase.cs | 38 +++--- .../ProviderDao/ProviderFolderDao.cs | 2 +- .../DocbuilderReportsUtility.cs | 44 +++--- .../Services/NotifyService/NotifyClient.cs | 78 +++++------ .../FileOperations/FileDeleteOperation.cs | 22 +-- .../FileOperations/FileDownloadOperation.cs | 11 +- .../FileOperations/FileMarkAsReadOperation.cs | 24 ++-- .../FileOperations/FileMoveCopyOperation.cs | 34 ++--- .../FileOperations/FileOperation.cs | 34 ++--- .../FileOperations/FileOperationsManager.cs | 5 + .../Notify/NotifyConfiguration.cs | 108 ++++++++------- .../Notify/StudioNotifyService.cs | 29 ++-- .../Notify/StudioNotifyServiceSender.cs | 64 ++++----- .../Notify/StudioPeriodicNotify.cs | 128 +++++++++--------- .../Notify/StudioWhatsNewNotify.cs | 88 ++++++------ web/ASC.Web.Core/QuotaSync.cs | 26 ++-- 45 files changed, 863 insertions(+), 662 deletions(-) diff --git a/ASC.Web.sln b/ASC.Web.sln index 7fd7c12d98..5985b09899 100644 --- a/ASC.Web.sln +++ b/ASC.Web.sln @@ -70,116 +70,228 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {90183112-BCD6-4E16-9CA2-12231930DAB4}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {90183112-BCD6-4E16-9CA2-12231930DAB4}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {90183112-BCD6-4E16-9CA2-12231930DAB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {90183112-BCD6-4E16-9CA2-12231930DAB4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {90183112-BCD6-4E16-9CA2-12231930DAB4}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {90183112-BCD6-4E16-9CA2-12231930DAB4}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {90183112-BCD6-4E16-9CA2-12231930DAB4}.Release|Any CPU.ActiveCfg = Release|Any CPU {90183112-BCD6-4E16-9CA2-12231930DAB4}.Release|Any CPU.Build.0 = Release|Any CPU + {4AA9F8E3-2F48-44DA-B6C5-37ED7A4739C1}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {4AA9F8E3-2F48-44DA-B6C5-37ED7A4739C1}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {4AA9F8E3-2F48-44DA-B6C5-37ED7A4739C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4AA9F8E3-2F48-44DA-B6C5-37ED7A4739C1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4AA9F8E3-2F48-44DA-B6C5-37ED7A4739C1}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {4AA9F8E3-2F48-44DA-B6C5-37ED7A4739C1}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {4AA9F8E3-2F48-44DA-B6C5-37ED7A4739C1}.Release|Any CPU.ActiveCfg = Release|Any CPU {4AA9F8E3-2F48-44DA-B6C5-37ED7A4739C1}.Release|Any CPU.Build.0 = Release|Any CPU + {EB8F47B3-39DE-4B7D-8EC6-01726368B45D}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {EB8F47B3-39DE-4B7D-8EC6-01726368B45D}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {EB8F47B3-39DE-4B7D-8EC6-01726368B45D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EB8F47B3-39DE-4B7D-8EC6-01726368B45D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EB8F47B3-39DE-4B7D-8EC6-01726368B45D}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {EB8F47B3-39DE-4B7D-8EC6-01726368B45D}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {EB8F47B3-39DE-4B7D-8EC6-01726368B45D}.Release|Any CPU.ActiveCfg = Release|Any CPU {EB8F47B3-39DE-4B7D-8EC6-01726368B45D}.Release|Any CPU.Build.0 = Release|Any CPU + {A51D0454-4AFA-46DE-89D4-B03D37E1816C}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {A51D0454-4AFA-46DE-89D4-B03D37E1816C}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {A51D0454-4AFA-46DE-89D4-B03D37E1816C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A51D0454-4AFA-46DE-89D4-B03D37E1816C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A51D0454-4AFA-46DE-89D4-B03D37E1816C}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {A51D0454-4AFA-46DE-89D4-B03D37E1816C}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {A51D0454-4AFA-46DE-89D4-B03D37E1816C}.Release|Any CPU.ActiveCfg = Release|Any CPU {A51D0454-4AFA-46DE-89D4-B03D37E1816C}.Release|Any CPU.Build.0 = Release|Any CPU + {BE4816E7-7CD2-4D9B-ABC6-D9E5C04E3926}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {BE4816E7-7CD2-4D9B-ABC6-D9E5C04E3926}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {BE4816E7-7CD2-4D9B-ABC6-D9E5C04E3926}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BE4816E7-7CD2-4D9B-ABC6-D9E5C04E3926}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BE4816E7-7CD2-4D9B-ABC6-D9E5C04E3926}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {BE4816E7-7CD2-4D9B-ABC6-D9E5C04E3926}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {BE4816E7-7CD2-4D9B-ABC6-D9E5C04E3926}.Release|Any CPU.ActiveCfg = Release|Any CPU {BE4816E7-7CD2-4D9B-ABC6-D9E5C04E3926}.Release|Any CPU.Build.0 = Release|Any CPU + {62C49C91-1A5A-4C0D-A3B3-A9AE8C9718CE}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {62C49C91-1A5A-4C0D-A3B3-A9AE8C9718CE}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {62C49C91-1A5A-4C0D-A3B3-A9AE8C9718CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {62C49C91-1A5A-4C0D-A3B3-A9AE8C9718CE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {62C49C91-1A5A-4C0D-A3B3-A9AE8C9718CE}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {62C49C91-1A5A-4C0D-A3B3-A9AE8C9718CE}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {62C49C91-1A5A-4C0D-A3B3-A9AE8C9718CE}.Release|Any CPU.ActiveCfg = Release|Any CPU {62C49C91-1A5A-4C0D-A3B3-A9AE8C9718CE}.Release|Any CPU.Build.0 = Release|Any CPU + {3ABB21D3-D990-4005-9EEF-701A93948C27}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {3ABB21D3-D990-4005-9EEF-701A93948C27}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {3ABB21D3-D990-4005-9EEF-701A93948C27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3ABB21D3-D990-4005-9EEF-701A93948C27}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3ABB21D3-D990-4005-9EEF-701A93948C27}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {3ABB21D3-D990-4005-9EEF-701A93948C27}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {3ABB21D3-D990-4005-9EEF-701A93948C27}.Release|Any CPU.ActiveCfg = Release|Any CPU {3ABB21D3-D990-4005-9EEF-701A93948C27}.Release|Any CPU.Build.0 = Release|Any CPU + {481B0D9C-B2F8-4DE9-8597-BA8D24585099}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {481B0D9C-B2F8-4DE9-8597-BA8D24585099}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {481B0D9C-B2F8-4DE9-8597-BA8D24585099}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {481B0D9C-B2F8-4DE9-8597-BA8D24585099}.Debug|Any CPU.Build.0 = Debug|Any CPU + {481B0D9C-B2F8-4DE9-8597-BA8D24585099}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {481B0D9C-B2F8-4DE9-8597-BA8D24585099}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {481B0D9C-B2F8-4DE9-8597-BA8D24585099}.Release|Any CPU.ActiveCfg = Release|Any CPU {481B0D9C-B2F8-4DE9-8597-BA8D24585099}.Release|Any CPU.Build.0 = Release|Any CPU + {02C40A64-FE22-41D0-9037-69F0D6F787A9}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {02C40A64-FE22-41D0-9037-69F0D6F787A9}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {02C40A64-FE22-41D0-9037-69F0D6F787A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {02C40A64-FE22-41D0-9037-69F0D6F787A9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {02C40A64-FE22-41D0-9037-69F0D6F787A9}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {02C40A64-FE22-41D0-9037-69F0D6F787A9}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {02C40A64-FE22-41D0-9037-69F0D6F787A9}.Release|Any CPU.ActiveCfg = Release|Any CPU {02C40A64-FE22-41D0-9037-69F0D6F787A9}.Release|Any CPU.Build.0 = Release|Any CPU + {988536C1-4B89-4649-8F77-5C16F55D95D1}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {988536C1-4B89-4649-8F77-5C16F55D95D1}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {988536C1-4B89-4649-8F77-5C16F55D95D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {988536C1-4B89-4649-8F77-5C16F55D95D1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {988536C1-4B89-4649-8F77-5C16F55D95D1}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {988536C1-4B89-4649-8F77-5C16F55D95D1}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {988536C1-4B89-4649-8F77-5C16F55D95D1}.Release|Any CPU.ActiveCfg = Release|Any CPU {988536C1-4B89-4649-8F77-5C16F55D95D1}.Release|Any CPU.Build.0 = Release|Any CPU + {BD8A18A5-60C5-4411-9719-0AA11B4BE0E9}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {BD8A18A5-60C5-4411-9719-0AA11B4BE0E9}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {BD8A18A5-60C5-4411-9719-0AA11B4BE0E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BD8A18A5-60C5-4411-9719-0AA11B4BE0E9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BD8A18A5-60C5-4411-9719-0AA11B4BE0E9}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {BD8A18A5-60C5-4411-9719-0AA11B4BE0E9}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {BD8A18A5-60C5-4411-9719-0AA11B4BE0E9}.Release|Any CPU.ActiveCfg = Release|Any CPU {BD8A18A5-60C5-4411-9719-0AA11B4BE0E9}.Release|Any CPU.Build.0 = Release|Any CPU + {2FF2177F-2D1A-4396-84EB-51F14FD99385}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {2FF2177F-2D1A-4396-84EB-51F14FD99385}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {2FF2177F-2D1A-4396-84EB-51F14FD99385}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2FF2177F-2D1A-4396-84EB-51F14FD99385}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2FF2177F-2D1A-4396-84EB-51F14FD99385}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {2FF2177F-2D1A-4396-84EB-51F14FD99385}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {2FF2177F-2D1A-4396-84EB-51F14FD99385}.Release|Any CPU.ActiveCfg = Release|Any CPU {2FF2177F-2D1A-4396-84EB-51F14FD99385}.Release|Any CPU.Build.0 = Release|Any CPU + {B0431EC9-21D8-4D96-B333-6DD430031C82}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {B0431EC9-21D8-4D96-B333-6DD430031C82}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {B0431EC9-21D8-4D96-B333-6DD430031C82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B0431EC9-21D8-4D96-B333-6DD430031C82}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B0431EC9-21D8-4D96-B333-6DD430031C82}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {B0431EC9-21D8-4D96-B333-6DD430031C82}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {B0431EC9-21D8-4D96-B333-6DD430031C82}.Release|Any CPU.ActiveCfg = Release|Any CPU {B0431EC9-21D8-4D96-B333-6DD430031C82}.Release|Any CPU.Build.0 = Release|Any CPU + {104D045A-F9CC-4DD7-B04D-8DA7543435DD}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {104D045A-F9CC-4DD7-B04D-8DA7543435DD}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {104D045A-F9CC-4DD7-B04D-8DA7543435DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {104D045A-F9CC-4DD7-B04D-8DA7543435DD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {104D045A-F9CC-4DD7-B04D-8DA7543435DD}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {104D045A-F9CC-4DD7-B04D-8DA7543435DD}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {104D045A-F9CC-4DD7-B04D-8DA7543435DD}.Release|Any CPU.ActiveCfg = Release|Any CPU {104D045A-F9CC-4DD7-B04D-8DA7543435DD}.Release|Any CPU.Build.0 = Release|Any CPU + {8484A675-1C93-4D87-8FF2-7530A5711208}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {8484A675-1C93-4D87-8FF2-7530A5711208}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {8484A675-1C93-4D87-8FF2-7530A5711208}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8484A675-1C93-4D87-8FF2-7530A5711208}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8484A675-1C93-4D87-8FF2-7530A5711208}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {8484A675-1C93-4D87-8FF2-7530A5711208}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {8484A675-1C93-4D87-8FF2-7530A5711208}.Release|Any CPU.ActiveCfg = Release|Any CPU {8484A675-1C93-4D87-8FF2-7530A5711208}.Release|Any CPU.Build.0 = Release|Any CPU + {E3567AB9-0926-444D-A0D0-A369D5890EAA}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {E3567AB9-0926-444D-A0D0-A369D5890EAA}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {E3567AB9-0926-444D-A0D0-A369D5890EAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E3567AB9-0926-444D-A0D0-A369D5890EAA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E3567AB9-0926-444D-A0D0-A369D5890EAA}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {E3567AB9-0926-444D-A0D0-A369D5890EAA}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {E3567AB9-0926-444D-A0D0-A369D5890EAA}.Release|Any CPU.ActiveCfg = Release|Any CPU {E3567AB9-0926-444D-A0D0-A369D5890EAA}.Release|Any CPU.Build.0 = Release|Any CPU + {C8F410B4-B83B-47B9-9ECD-07590A8750A7}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {C8F410B4-B83B-47B9-9ECD-07590A8750A7}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {C8F410B4-B83B-47B9-9ECD-07590A8750A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C8F410B4-B83B-47B9-9ECD-07590A8750A7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C8F410B4-B83B-47B9-9ECD-07590A8750A7}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {C8F410B4-B83B-47B9-9ECD-07590A8750A7}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {C8F410B4-B83B-47B9-9ECD-07590A8750A7}.Release|Any CPU.ActiveCfg = Release|Any CPU {C8F410B4-B83B-47B9-9ECD-07590A8750A7}.Release|Any CPU.Build.0 = Release|Any CPU + {DB50E2EF-B4D8-493A-8568-29CAC0DF9062}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {DB50E2EF-B4D8-493A-8568-29CAC0DF9062}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {DB50E2EF-B4D8-493A-8568-29CAC0DF9062}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DB50E2EF-B4D8-493A-8568-29CAC0DF9062}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DB50E2EF-B4D8-493A-8568-29CAC0DF9062}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {DB50E2EF-B4D8-493A-8568-29CAC0DF9062}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {DB50E2EF-B4D8-493A-8568-29CAC0DF9062}.Release|Any CPU.ActiveCfg = Release|Any CPU {DB50E2EF-B4D8-493A-8568-29CAC0DF9062}.Release|Any CPU.Build.0 = Release|Any CPU + {AE1A0E06-6CD4-4E1D-8209-22BBBD6D5652}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {AE1A0E06-6CD4-4E1D-8209-22BBBD6D5652}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {AE1A0E06-6CD4-4E1D-8209-22BBBD6D5652}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AE1A0E06-6CD4-4E1D-8209-22BBBD6D5652}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AE1A0E06-6CD4-4E1D-8209-22BBBD6D5652}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {AE1A0E06-6CD4-4E1D-8209-22BBBD6D5652}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {AE1A0E06-6CD4-4E1D-8209-22BBBD6D5652}.Release|Any CPU.ActiveCfg = Release|Any CPU {AE1A0E06-6CD4-4E1D-8209-22BBBD6D5652}.Release|Any CPU.Build.0 = Release|Any CPU + {77BA2F61-6155-4283-BB39-F8E42F46A0B0}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {77BA2F61-6155-4283-BB39-F8E42F46A0B0}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {77BA2F61-6155-4283-BB39-F8E42F46A0B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {77BA2F61-6155-4283-BB39-F8E42F46A0B0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {77BA2F61-6155-4283-BB39-F8E42F46A0B0}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {77BA2F61-6155-4283-BB39-F8E42F46A0B0}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {77BA2F61-6155-4283-BB39-F8E42F46A0B0}.Release|Any CPU.ActiveCfg = Release|Any CPU {77BA2F61-6155-4283-BB39-F8E42F46A0B0}.Release|Any CPU.Build.0 = Release|Any CPU + {5D41FFFF-816C-40B2-95CD-E2DDDCB83784}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {5D41FFFF-816C-40B2-95CD-E2DDDCB83784}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {5D41FFFF-816C-40B2-95CD-E2DDDCB83784}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5D41FFFF-816C-40B2-95CD-E2DDDCB83784}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5D41FFFF-816C-40B2-95CD-E2DDDCB83784}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {5D41FFFF-816C-40B2-95CD-E2DDDCB83784}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {5D41FFFF-816C-40B2-95CD-E2DDDCB83784}.Release|Any CPU.ActiveCfg = Release|Any CPU {5D41FFFF-816C-40B2-95CD-E2DDDCB83784}.Release|Any CPU.Build.0 = Release|Any CPU + {C2BB03A0-C35B-433F-96D4-3A06CBC06AD7}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {C2BB03A0-C35B-433F-96D4-3A06CBC06AD7}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {C2BB03A0-C35B-433F-96D4-3A06CBC06AD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C2BB03A0-C35B-433F-96D4-3A06CBC06AD7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C2BB03A0-C35B-433F-96D4-3A06CBC06AD7}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {C2BB03A0-C35B-433F-96D4-3A06CBC06AD7}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {C2BB03A0-C35B-433F-96D4-3A06CBC06AD7}.Release|Any CPU.ActiveCfg = Release|Any CPU {C2BB03A0-C35B-433F-96D4-3A06CBC06AD7}.Release|Any CPU.Build.0 = Release|Any CPU + {04A56018-C41E-4634-A185-A13E9250C75A}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {04A56018-C41E-4634-A185-A13E9250C75A}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {04A56018-C41E-4634-A185-A13E9250C75A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {04A56018-C41E-4634-A185-A13E9250C75A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {04A56018-C41E-4634-A185-A13E9250C75A}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {04A56018-C41E-4634-A185-A13E9250C75A}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {04A56018-C41E-4634-A185-A13E9250C75A}.Release|Any CPU.ActiveCfg = Release|Any CPU {04A56018-C41E-4634-A185-A13E9250C75A}.Release|Any CPU.Build.0 = Release|Any CPU + {07CCC11F-76CB-448E-B15A-72E09FBB348B}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {07CCC11F-76CB-448E-B15A-72E09FBB348B}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {07CCC11F-76CB-448E-B15A-72E09FBB348B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {07CCC11F-76CB-448E-B15A-72E09FBB348B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {07CCC11F-76CB-448E-B15A-72E09FBB348B}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {07CCC11F-76CB-448E-B15A-72E09FBB348B}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {07CCC11F-76CB-448E-B15A-72E09FBB348B}.Release|Any CPU.ActiveCfg = Release|Any CPU {07CCC11F-76CB-448E-B15A-72E09FBB348B}.Release|Any CPU.Build.0 = Release|Any CPU + {1D2F61B2-B1F4-45F0-83CA-03370FD6E62C}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {1D2F61B2-B1F4-45F0-83CA-03370FD6E62C}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {1D2F61B2-B1F4-45F0-83CA-03370FD6E62C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1D2F61B2-B1F4-45F0-83CA-03370FD6E62C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1D2F61B2-B1F4-45F0-83CA-03370FD6E62C}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {1D2F61B2-B1F4-45F0-83CA-03370FD6E62C}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {1D2F61B2-B1F4-45F0-83CA-03370FD6E62C}.Release|Any CPU.ActiveCfg = Release|Any CPU {1D2F61B2-B1F4-45F0-83CA-03370FD6E62C}.Release|Any CPU.Build.0 = Release|Any CPU + {DE3DAF51-FB29-41FC-AF41-A4BA8D91BFB6}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {DE3DAF51-FB29-41FC-AF41-A4BA8D91BFB6}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {DE3DAF51-FB29-41FC-AF41-A4BA8D91BFB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DE3DAF51-FB29-41FC-AF41-A4BA8D91BFB6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DE3DAF51-FB29-41FC-AF41-A4BA8D91BFB6}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {DE3DAF51-FB29-41FC-AF41-A4BA8D91BFB6}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {DE3DAF51-FB29-41FC-AF41-A4BA8D91BFB6}.Release|Any CPU.ActiveCfg = Release|Any CPU {DE3DAF51-FB29-41FC-AF41-A4BA8D91BFB6}.Release|Any CPU.Build.0 = Release|Any CPU + {F0A39728-940D-4DBE-A37A-05D4EB57F342}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {F0A39728-940D-4DBE-A37A-05D4EB57F342}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {F0A39728-940D-4DBE-A37A-05D4EB57F342}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F0A39728-940D-4DBE-A37A-05D4EB57F342}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F0A39728-940D-4DBE-A37A-05D4EB57F342}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {F0A39728-940D-4DBE-A37A-05D4EB57F342}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {F0A39728-940D-4DBE-A37A-05D4EB57F342}.Release|Any CPU.ActiveCfg = Release|Any CPU {F0A39728-940D-4DBE-A37A-05D4EB57F342}.Release|Any CPU.Build.0 = Release|Any CPU + {2DADEAD3-0FE9-4199-9817-41A32E6BF450}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU + {2DADEAD3-0FE9-4199-9817-41A32E6BF450}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {2DADEAD3-0FE9-4199-9817-41A32E6BF450}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2DADEAD3-0FE9-4199-9817-41A32E6BF450}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2DADEAD3-0FE9-4199-9817-41A32E6BF450}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU + {2DADEAD3-0FE9-4199-9817-41A32E6BF450}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {2DADEAD3-0FE9-4199-9817-41A32E6BF450}.Release|Any CPU.ActiveCfg = Release|Any CPU {2DADEAD3-0FE9-4199-9817-41A32E6BF450}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection diff --git a/common/ASC.Core.Common/Configuration/AmiPublicDnsSyncService.cs b/common/ASC.Core.Common/Configuration/AmiPublicDnsSyncService.cs index 6202a26d1b..7e69515944 100644 --- a/common/ASC.Core.Common/Configuration/AmiPublicDnsSyncService.cs +++ b/common/ASC.Core.Common/Configuration/AmiPublicDnsSyncService.cs @@ -29,6 +29,8 @@ using System.IO; using System.Linq; using System.Net; using System.Text.RegularExpressions; + +using ASC.Common; using ASC.Common.Module; using Microsoft.Extensions.DependencyInjection; @@ -50,7 +52,7 @@ namespace ASC.Core.Configuration public static void Synchronize() { using var scope = ServiceProvider.CreateScope(); - var ScopeClass = scope.ServiceProvider.GetService(); + var ScopeClass = scope.ServiceProvider.GetService(); if (ScopeClass.CoreBaseSettings.Standalone) { var tenants = ScopeClass.TenantManager.GetTenants(false).Where(t => MappedDomainNotSettedByUser(t.MappedDomain)); @@ -90,18 +92,18 @@ namespace ASC.Core.Configuration } } return null; - } + } + } - class Scope + public class AmiPublicDnsSyncServiceScope + { + internal TenantManager TenantManager { get; } + internal CoreBaseSettings CoreBaseSettings { get; } + + public AmiPublicDnsSyncServiceScope(TenantManager tenantManager, CoreBaseSettings coreBaseSettings) { - internal TenantManager TenantManager { get; } - internal CoreBaseSettings CoreBaseSettings { get; } - - public Scope(TenantManager tenantManager, CoreBaseSettings coreBaseSettings) - { - TenantManager = tenantManager; - CoreBaseSettings = coreBaseSettings; - } - } + TenantManager = tenantManager; + CoreBaseSettings = coreBaseSettings; + } } } diff --git a/common/ASC.Core.Common/Notify/EmailSenderSink.cs b/common/ASC.Core.Common/Notify/EmailSenderSink.cs index 5ba55f6823..27f74fb853 100644 --- a/common/ASC.Core.Common/Notify/EmailSenderSink.cs +++ b/common/ASC.Core.Common/Notify/EmailSenderSink.cs @@ -27,6 +27,8 @@ using System; using System.Collections.Generic; using System.Linq; + +using ASC.Common; using ASC.Common.Logging; using ASC.Common.Utils; using ASC.Core.Notify.Senders; @@ -92,7 +94,7 @@ namespace ASC.Core.Notify }; using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var tenant = scopeClass.TenantManager.GetCurrentTenant(false); m.Tenant = tenant == null ? Tenant.DEFAULT_TENANT : tenant.TenantId; @@ -144,19 +146,28 @@ namespace ASC.Core.Notify return m; } + } - class Scope + public class EmailSenderSinkScope + { + internal TenantManager TenantManager { get; } + internal CoreConfiguration CoreConfiguration { get; } + internal IOptionsMonitor Options { get; } + + public EmailSenderSinkScope(TenantManager tenantManager, CoreConfiguration coreConfiguration, IOptionsMonitor options) { - internal TenantManager TenantManager { get; } - internal CoreConfiguration CoreConfiguration { get; } - internal IOptionsMonitor Options { get; } + TenantManager = tenantManager; + CoreConfiguration = coreConfiguration; + Options = options; + } + } - public Scope(TenantManager tenantManager, CoreConfiguration coreConfiguration, IOptionsMonitor options) - { - TenantManager = tenantManager; - CoreConfiguration = coreConfiguration; - Options = options; - } + public static class EmailSenderSinkExtension + { + public static DIHelper AddEmailSenderSinkService(this DIHelper services) + { + services.TryAddScoped(); + return services; } } } \ No newline at end of file diff --git a/common/ASC.Core.Common/Notify/JabberSenderSink.cs b/common/ASC.Core.Common/Notify/JabberSenderSink.cs index 3ac73ab15a..90b85faf1f 100644 --- a/common/ASC.Core.Common/Notify/JabberSenderSink.cs +++ b/common/ASC.Core.Common/Notify/JabberSenderSink.cs @@ -25,6 +25,8 @@ using System; + +using ASC.Common; using ASC.Core.Notify.Senders; using ASC.Core.Tenants; using ASC.Notify.Messages; @@ -52,7 +54,7 @@ namespace ASC.Core.Notify try { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var result = SendResult.OK; var username = scopeClass.UserManager.GetUsers(new Guid(message.Recipient.ID)).UserName; if (string.IsNullOrEmpty(username)) @@ -83,17 +85,26 @@ namespace ASC.Core.Notify return new SendResponse(message, senderName, ex); } } - - class Scope - { - internal UserManager UserManager { get; } - internal TenantManager TenantManager { get; } + } - public Scope(UserManager userManager, TenantManager tenantManager) - { - TenantManager = tenantManager; - UserManager = userManager; - } - } + public class JabberSenderSinkScope + { + internal UserManager UserManager { get; } + internal TenantManager TenantManager { get; } + + public JabberSenderSinkScope(UserManager userManager, TenantManager tenantManager) + { + TenantManager = tenantManager; + UserManager = userManager; + } + } + + public static class JabberSenderSinkExtension + { + public static DIHelper AddJabberSenderSinkService(this DIHelper services) + { + services.TryAddScoped(); + return services; + } } } diff --git a/common/ASC.Core.Common/Notify/Senders/AWSSender.cs b/common/ASC.Core.Common/Notify/Senders/AWSSender.cs index cf9c4394a8..fd533c8229 100644 --- a/common/ASC.Core.Common/Notify/Senders/AWSSender.cs +++ b/common/ASC.Core.Common/Notify/Senders/AWSSender.cs @@ -80,7 +80,7 @@ namespace ASC.Core.Notify.Senders { Log.DebugFormat("Tenant: {0}, To: {1}", m.Tenant, m.To); using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); scopeClass.TenantManager.SetCurrentTenant(m.Tenant); if (!scopeClass.CoreConfiguration.SmtpSettings.IsDefaultSettings) @@ -226,19 +226,19 @@ namespace ASC.Core.Notify.Senders private bool IsRefreshNeeded() { return quota == null || (DateTime.UtcNow - lastRefresh) > refreshTimeout; - } + } + } - class Scope - { - internal TenantManager TenantManager { get; } - internal CoreConfiguration CoreConfiguration { get; } + public class AWSSenderScope + { + internal TenantManager TenantManager { get; } + internal CoreConfiguration CoreConfiguration { get; } - public Scope(TenantManager tenantManager, CoreConfiguration coreConfiguration) - { - TenantManager = tenantManager; - CoreConfiguration = coreConfiguration; - } - } + public AWSSenderScope(TenantManager tenantManager, CoreConfiguration coreConfiguration) + { + TenantManager = tenantManager; + CoreConfiguration = coreConfiguration; + } } public static class AWSSenderExtension @@ -246,6 +246,7 @@ namespace ASC.Core.Notify.Senders public static DIHelper AddAWSSenderService(this DIHelper services) { services.TryAddSingleton(); + services.TryAddScoped(); return services .AddTenantManagerService() .AddCoreSettingsService(); diff --git a/common/ASC.Core.Common/Notify/Senders/SmtpSender.cs b/common/ASC.Core.Common/Notify/Senders/SmtpSender.cs index 3c4d1035fb..76b61fba7a 100644 --- a/common/ASC.Core.Common/Notify/Senders/SmtpSender.cs +++ b/common/ASC.Core.Common/Notify/Senders/SmtpSender.cs @@ -112,7 +112,7 @@ namespace ASC.Core.Notify.Senders public virtual NoticeSendResult Send(NotifyMessage m) { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); scopeClass.TenantManager.SetCurrentTenant(m.Tenant); var smtpClient = GetSmtpClient(); @@ -318,26 +318,27 @@ namespace ASC.Core.Notify.Senders { return null; } - } - - class Scope - { - internal TenantManager TenantManager { get; } - internal CoreConfiguration CoreConfiguration { get; } - - public Scope(TenantManager tenantManager, CoreConfiguration coreConfiguration) - { - TenantManager = tenantManager; - CoreConfiguration = coreConfiguration; - } } } + public class SmtpSenderScope + { + internal TenantManager TenantManager { get; } + internal CoreConfiguration CoreConfiguration { get; } + + public SmtpSenderScope(TenantManager tenantManager, CoreConfiguration coreConfiguration) + { + TenantManager = tenantManager; + CoreConfiguration = coreConfiguration; + } + } + public static class SmtpSenderExtension { public static DIHelper AddSmtpSenderService(this DIHelper services) { services.TryAddSingleton(); + services.TryAddScoped(); return services .AddTenantManagerService() .AddCoreSettingsService(); diff --git a/common/ASC.Core.Common/Tests/TopSubscriptionProviderTest.cs b/common/ASC.Core.Common/Tests/TopSubscriptionProviderTest.cs index 951e0e1aef..2af8ec4254 100644 --- a/common/ASC.Core.Common/Tests/TopSubscriptionProviderTest.cs +++ b/common/ASC.Core.Common/Tests/TopSubscriptionProviderTest.cs @@ -27,6 +27,8 @@ #if DEBUG using System; using System.Linq; + +using ASC.Common; using ASC.Core.Notify; using ASC.Notify.Model; using ASC.Notify.Recipients; @@ -57,7 +59,7 @@ namespace ASC.Core.Common.Tests public void CreateProviders() { using var scope = serviceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); scopeClass.TenantManager.SetCurrentTenant(tenant); tenant = new Tenants.Tenant(0, "teamlab"); @@ -141,20 +143,20 @@ namespace ASC.Core.Common.Tests subProvider.UnSubscribe(nAction, rndObj2, everyone); } } - - class Scope - { - internal TenantManager TenantManager { get; } - internal SubscriptionManager SubscriptionManager { get; } - internal RecipientProviderImpl RecipientProviderImpl { get; } + } - public Scope(TenantManager tenantManager, SubscriptionManager subscriptionManager, RecipientProviderImpl recipientProviderImpl) - { - TenantManager = tenantManager; - SubscriptionManager = subscriptionManager; - RecipientProviderImpl = recipientProviderImpl; - } - } + public class TopSubscriptionProviderTestScope + { + internal TenantManager TenantManager { get; } + internal SubscriptionManager SubscriptionManager { get; } + internal RecipientProviderImpl RecipientProviderImpl { get; } + + public TopSubscriptionProviderTestScope(TenantManager tenantManager, SubscriptionManager subscriptionManager, RecipientProviderImpl recipientProviderImpl) + { + TenantManager = tenantManager; + SubscriptionManager = subscriptionManager; + RecipientProviderImpl = recipientProviderImpl; + } } } #endif \ No newline at end of file diff --git a/common/ASC.Core.Common/Tests/UserManagerTest.cs b/common/ASC.Core.Common/Tests/UserManagerTest.cs index 10b120bcc9..f123848dca 100644 --- a/common/ASC.Core.Common/Tests/UserManagerTest.cs +++ b/common/ASC.Core.Common/Tests/UserManagerTest.cs @@ -43,7 +43,7 @@ namespace ASC.Core.Common.Tests public void SearchUsers() { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var users = scopeClass.UserManager.Search(null, EmployeeStatus.Active); Assert.AreEqual(0, users.Length); @@ -80,7 +80,7 @@ namespace ASC.Core.Common.Tests public void DepartmentManagers() { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var tenant = scopeClass.TenantManager.SetCurrentTenant(1024); var deps = scopeClass.UserManager.GetDepartments(); @@ -108,7 +108,7 @@ namespace ASC.Core.Common.Tests public void UserGroupsPerformanceTest() { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var tenant = scopeClass.TenantManager.SetCurrentTenant(0); foreach (var u in scopeClass.UserManager.GetUsers()) @@ -143,12 +143,12 @@ namespace ASC.Core.Common.Tests } } - class Scope + public class UserManagerTestScope { internal UserManager UserManager { get; } internal TenantManager TenantManager { get; } - public Scope(UserManager userManager, TenantManager tenantManager) + public UserManagerTestScope(UserManager userManager, TenantManager tenantManager) { UserManager = userManager; TenantManager = tenantManager; diff --git a/common/ASC.Core.Common/Users/DisplayUserSettings.cs b/common/ASC.Core.Common/Users/DisplayUserSettings.cs index db7de94e6a..47b20a1038 100644 --- a/common/ASC.Core.Common/Users/DisplayUserSettings.cs +++ b/common/ASC.Core.Common/Users/DisplayUserSettings.cs @@ -98,6 +98,7 @@ namespace ASC.Web.Core.Users public static DIHelper AddDisplayUserSettingsService(this DIHelper services) { services.TryAddScoped(); + services.TryAddScoped(); return services .AddUserFormatter() diff --git a/common/ASC.Data.Reassigns/ReassignProgressItem.cs b/common/ASC.Data.Reassigns/ReassignProgressItem.cs index 81250cf4eb..064d73c726 100644 --- a/common/ASC.Data.Reassigns/ReassignProgressItem.cs +++ b/common/ASC.Data.Reassigns/ReassignProgressItem.cs @@ -101,7 +101,7 @@ namespace ASC.Data.Reassigns public void RunJob() { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var logger = scopeClass.Options.Get("ASC.Web"); var tenant = scopeClass.TenantManager.SetCurrentTenant(_tenantId); @@ -205,52 +205,53 @@ namespace ASC.Data.Reassigns messageService.Send(_httpHeaders, MessageAction.UserDeleted, messageTarget.Create(FromUser), new[] { userName }); else messageService.Send(MessageAction.UserDeleted, messageTarget.Create(FromUser), userName); - } - - class Scope - { - internal TenantManager TenantManager { get; } - internal CoreBaseSettings CoreBaseSettings { get; } - internal MessageService MessageService { get; } - internal StudioNotifyService StudioNotifyService { get; } - internal SecurityContext SecurityContext { get; } - internal UserManager UserManager { get; } - internal UserPhotoManager UserPhotoManager { get; } - internal DisplayUserSettingsHelper DisplayUserSettingsHelper { get; } - internal MessageTarget MessageTarget { get; } - internal IOptionsMonitor Options { get; } - - public Scope(TenantManager tenantManager, - CoreBaseSettings coreBaseSettings, - MessageService messageService, - StudioNotifyService studioNotifyService, - SecurityContext securityContext, - UserManager userManager, - UserPhotoManager userPhotoManager, - DisplayUserSettingsHelper displayUserSettingsHelper, - MessageTarget messageTarget, - IOptionsMonitor options) - { - TenantManager = tenantManager; - CoreBaseSettings = coreBaseSettings; - MessageService = messageService; - StudioNotifyService = studioNotifyService; - SecurityContext = securityContext; - UserManager = userManager; - UserPhotoManager = userPhotoManager; - DisplayUserSettingsHelper = displayUserSettingsHelper; - MessageTarget = messageTarget; - Options = options; - } } } + public class ReassignProgressItemScope + { + internal TenantManager TenantManager { get; } + internal CoreBaseSettings CoreBaseSettings { get; } + internal MessageService MessageService { get; } + internal StudioNotifyService StudioNotifyService { get; } + internal SecurityContext SecurityContext { get; } + internal UserManager UserManager { get; } + internal UserPhotoManager UserPhotoManager { get; } + internal DisplayUserSettingsHelper DisplayUserSettingsHelper { get; } + internal MessageTarget MessageTarget { get; } + internal IOptionsMonitor Options { get; } + + public ReassignProgressItemScope(TenantManager tenantManager, + CoreBaseSettings coreBaseSettings, + MessageService messageService, + StudioNotifyService studioNotifyService, + SecurityContext securityContext, + UserManager userManager, + UserPhotoManager userPhotoManager, + DisplayUserSettingsHelper displayUserSettingsHelper, + MessageTarget messageTarget, + IOptionsMonitor options) + { + TenantManager = tenantManager; + CoreBaseSettings = coreBaseSettings; + MessageService = messageService; + StudioNotifyService = studioNotifyService; + SecurityContext = securityContext; + UserManager = userManager; + UserPhotoManager = userPhotoManager; + DisplayUserSettingsHelper = displayUserSettingsHelper; + MessageTarget = messageTarget; + Options = options; + } + } + public static class ReassignProgressItemExtension { public static DIHelper AddReassignProgressItemService(this DIHelper services) { services.TryAddSingleton>(); services.TryAddSingleton>(); + services.TryAddScoped(); services.AddSingleton>, ConfigureProgressQueue>(); return services; } diff --git a/common/ASC.Data.Reassigns/RemoveProgressItem.cs b/common/ASC.Data.Reassigns/RemoveProgressItem.cs index 696f599b3e..d74485d665 100644 --- a/common/ASC.Data.Reassigns/RemoveProgressItem.cs +++ b/common/ASC.Data.Reassigns/RemoveProgressItem.cs @@ -97,7 +97,7 @@ namespace ASC.Data.Reassigns public void RunJob() { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var logger = scopeClass.Options.Get("ASC.Web"); var tenant = scopeClass.TenantManager.SetCurrentTenant(_tenantId); var userName = scopeClass.UserFormatter.GetUserName(User, DisplayUserNameFormat.Default); @@ -243,46 +243,46 @@ namespace ASC.Data.Reassigns studioNotifyService.SendMsgRemoveUserDataFailed(_currentUserId, User, userName, errorMessage); } + } - class Scope - { - internal TenantManager TenantManager { get; } - internal CoreBaseSettings CoreBaseSettings { get; } - internal MessageService MessageService { get; } - internal StudioNotifyService StudioNotifyService { get; } - internal SecurityContext SecurityContext { get; } - internal UserManager UserManager { get; } - internal MessageTarget MessageTarget { get; } - internal WebItemManagerSecurity WebItemManagerSecurity { get; } - internal StorageFactory StorageFactory { get; } - internal UserFormatter UserFormatter { get; } - internal IOptionsMonitor Options { get; } + public class RemoveProgressItemScope + { + internal TenantManager TenantManager { get; } + internal CoreBaseSettings CoreBaseSettings { get; } + internal MessageService MessageService { get; } + internal StudioNotifyService StudioNotifyService { get; } + internal SecurityContext SecurityContext { get; } + internal UserManager UserManager { get; } + internal MessageTarget MessageTarget { get; } + internal WebItemManagerSecurity WebItemManagerSecurity { get; } + internal StorageFactory StorageFactory { get; } + internal UserFormatter UserFormatter { get; } + internal IOptionsMonitor Options { get; } - public Scope(TenantManager tenantManager, - CoreBaseSettings coreBaseSettings, - MessageService messageService, - StudioNotifyService studioNotifyService, - SecurityContext securityContext, - UserManager userManager, - MessageTarget messageTarget, - WebItemManagerSecurity webItemManagerSecurity, - StorageFactory storageFactory, - UserFormatter userFormatter, - IOptionsMonitor options) - { - TenantManager = tenantManager; - CoreBaseSettings = coreBaseSettings; - MessageService = messageService; - StudioNotifyService = studioNotifyService; - SecurityContext = securityContext; - UserManager = userManager; - MessageTarget = messageTarget; - WebItemManagerSecurity = webItemManagerSecurity; - StorageFactory = storageFactory; - UserFormatter = userFormatter; - Options = options; - } - } + public RemoveProgressItemScope(TenantManager tenantManager, + CoreBaseSettings coreBaseSettings, + MessageService messageService, + StudioNotifyService studioNotifyService, + SecurityContext securityContext, + UserManager userManager, + MessageTarget messageTarget, + WebItemManagerSecurity webItemManagerSecurity, + StorageFactory storageFactory, + UserFormatter userFormatter, + IOptionsMonitor options) + { + TenantManager = tenantManager; + CoreBaseSettings = coreBaseSettings; + MessageService = messageService; + StudioNotifyService = studioNotifyService; + SecurityContext = securityContext; + UserManager = userManager; + MessageTarget = messageTarget; + WebItemManagerSecurity = webItemManagerSecurity; + StorageFactory = storageFactory; + UserFormatter = userFormatter; + Options = options; + } } public static class RemoveProgressItemExtension @@ -292,6 +292,7 @@ namespace ASC.Data.Reassigns services.TryAddSingleton>(); services.TryAddSingleton>(); + services.TryAddScoped(); services.AddSingleton>, ConfigureProgressQueue>(); return services; } diff --git a/common/ASC.Data.Storage/Configuration/StorageSettings.cs b/common/ASC.Data.Storage/Configuration/StorageSettings.cs index 5553f50158..a9057a0593 100644 --- a/common/ASC.Data.Storage/Configuration/StorageSettings.cs +++ b/common/ASC.Data.Storage/Configuration/StorageSettings.cs @@ -50,7 +50,7 @@ namespace ASC.Data.Storage.Configuration { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var settings = scopeClass.SettingsManager.LoadForTenant(i.TenantId); if (i.Name == settings.Module) { @@ -207,19 +207,19 @@ namespace ASC.Data.Storage.Configuration Activator.CreateInstance(DataStoreConsumer(baseStorageSettings).HandlerType, TenantManager, PathUtils, HttpContextAccessor, Options)) .Configure(TenantManager.GetCurrentTenant().TenantId.ToString(), null, null, DataStoreConsumer(baseStorageSettings)); } + } - class Scope + public class StorageSettingsHelperScope + { + internal StorageSettingsHelper StorageSettingsHelper { get; } + internal SettingsManager SettingsManager { get; } + internal CdnStorageSettings CdnStorageSettings { get; } + + public StorageSettingsHelperScope(StorageSettingsHelper storageSettingsHelper, SettingsManager settingsManager, CdnStorageSettings cdnStorageSettings) { - internal StorageSettingsHelper StorageSettingsHelper { get; } - internal SettingsManager SettingsManager { get; } - internal CdnStorageSettings CdnStorageSettings { get; } - - public Scope(StorageSettingsHelper storageSettingsHelper, SettingsManager settingsManager, CdnStorageSettings cdnStorageSettings) - { - StorageSettingsHelper = storageSettingsHelper; - SettingsManager = settingsManager; - CdnStorageSettings = cdnStorageSettings; - } + StorageSettingsHelper = storageSettingsHelper; + SettingsManager = settingsManager; + CdnStorageSettings = cdnStorageSettings; } } @@ -240,6 +240,8 @@ namespace ASC.Data.Storage.Configuration { if (services.TryAddScoped()) { + services.TryAddScoped(); + services.TryAddScoped(); return services .AddSettingsManagerService() .AddBaseStorageSettingsService() @@ -253,6 +255,8 @@ namespace ASC.Data.Storage.Configuration { if (services.TryAddScoped()) { + services.TryAddScoped(); + services.TryAddScoped(); return services .AddSettingsManagerService() .AddBaseStorageSettingsService() diff --git a/common/ASC.Data.Storage/StaticUploader.cs b/common/ASC.Data.Storage/StaticUploader.cs index f0eb371712..3abb727304 100644 --- a/common/ASC.Data.Storage/StaticUploader.cs +++ b/common/ASC.Data.Storage/StaticUploader.cs @@ -112,7 +112,7 @@ namespace ASC.Data.Storage var task = new Task(() => { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); scopeClass.TenantManager.SetCurrentTenant(tenantId); var staticUploader = scopeClass.StaticUploader; return staticUploader.UploadFile(relativePath, mappedPath, onComplete); @@ -208,7 +208,7 @@ namespace ASC.Data.Storage try { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var tenant = scopeClass.TenantManager.GetTenant(tenantId); scopeClass.TenantManager.SetCurrentTenant(tenant); scopeClass.SecurityContext.AuthenticateMe(tenant.OwnerId); @@ -281,9 +281,9 @@ namespace ASC.Data.Storage StaticUploader.UploadFileAsync(Path.Combine(relativePath, filePath), file, (res) => StepDone()).Wait(); } } - } - - internal class Scope + } + + public class UploadOperationScope { internal TenantManager TenantManager { get; } internal StaticUploader StaticUploader { get; } @@ -291,7 +291,11 @@ namespace ASC.Data.Storage internal SettingsManager SettingsManager { get; } internal StorageSettingsHelper StorageSettingsHelper { get; } - public Scope(TenantManager tenantManager, StaticUploader staticUploader, SecurityContext securityContext, SettingsManager settingsManager, StorageSettingsHelper storageSettingsHelper) + public UploadOperationScope(TenantManager tenantManager, + StaticUploader staticUploader, + SecurityContext securityContext, + SettingsManager settingsManager, + StorageSettingsHelper storageSettingsHelper) { TenantManager = tenantManager; StaticUploader = staticUploader; @@ -307,6 +311,7 @@ namespace ASC.Data.Storage { if (services.TryAddScoped()) { + services.TryAddScoped(); return services .AddTenantManagerService() .AddCdnStorageSettingsService(); diff --git a/common/ASC.Data.Storage/StorageHandler.cs b/common/ASC.Data.Storage/StorageHandler.cs index 1607bd27bc..5ca3f05728 100644 --- a/common/ASC.Data.Storage/StorageHandler.cs +++ b/common/ASC.Data.Storage/StorageHandler.cs @@ -66,7 +66,7 @@ namespace ASC.Data.Storage.DiscStorage public async Task Invoke(HttpContext context) { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); if (_checkAuth && !scopeClass.SecurityContext.IsAuthenticated) { @@ -142,26 +142,25 @@ namespace ASC.Data.Storage.DiscStorage { return (context.GetRouteValue(name) ?? "").ToString(); } - } - - class Scope - { - internal TenantManager TenantManager { get; } - internal SecurityContext SecurityContext { get; } - internal StorageFactory StorageFactory { get; } - internal EmailValidationKeyProvider EmailValidationKeyProvider { get; } - - public Scope(TenantManager tenantManager, SecurityContext securityContext, StorageFactory storageFactory, EmailValidationKeyProvider emailValidationKeyProvider) - { - TenantManager = tenantManager; - SecurityContext = securityContext; - StorageFactory = storageFactory; - EmailValidationKeyProvider = emailValidationKeyProvider; - } - } } + public class StorageHandlerScope + { + internal TenantManager TenantManager { get; } + internal SecurityContext SecurityContext { get; } + internal StorageFactory StorageFactory { get; } + internal EmailValidationKeyProvider EmailValidationKeyProvider { get; } + + public StorageHandlerScope(TenantManager tenantManager, SecurityContext securityContext, StorageFactory storageFactory, EmailValidationKeyProvider emailValidationKeyProvider) + { + TenantManager = tenantManager; + SecurityContext = securityContext; + StorageFactory = storageFactory; + EmailValidationKeyProvider = emailValidationKeyProvider; + } + } + public static class StorageHandlerExtensions { public static IEndpointRouteBuilder RegisterStorageHandler(this IEndpointRouteBuilder builder, string module, string domain, bool publicRoute = false) @@ -189,6 +188,7 @@ namespace ASC.Data.Storage.DiscStorage } public static DIHelper AddStorageHandlerService(this DIHelper services) { + services.TryAddScoped(); return services .AddTenantManagerService() .AddSecurityContextService() diff --git a/common/ASC.Data.Storage/StorageUploader.cs b/common/ASC.Data.Storage/StorageUploader.cs index 541b24a138..a0dcfeb5f3 100644 --- a/common/ASC.Data.Storage/StorageUploader.cs +++ b/common/ASC.Data.Storage/StorageUploader.cs @@ -148,7 +148,7 @@ namespace ASC.Data.Storage { Log.DebugFormat("Tenant: {0}", tenantId); using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var tenant = scopeClass.TenantManager.GetTenant(tenantId); scopeClass.TenantManager.SetCurrentTenant(tenant); @@ -200,27 +200,26 @@ namespace ASC.Data.Storage Error = e; Log.Error(e); } - } - - - class Scope - { - internal TenantManager TenantManager { get; } - internal SecurityContext SecurityContext { get; } - internal StorageFactory StorageFactory { get; } - internal IOptionsMonitor Options { get; } - internal StorageSettingsHelper StorageSettingsHelper { get; } - internal SettingsManager SettingsManager { get; } - - public Scope(TenantManager tenantManager, SecurityContext securityContext, StorageFactory storageFactory, IOptionsMonitor options, StorageSettingsHelper storageSettingsHelper, SettingsManager settingsManager) - { - TenantManager = tenantManager; - SecurityContext = securityContext; - StorageFactory = storageFactory; - Options = options; - StorageSettingsHelper = storageSettingsHelper; - SettingsManager = settingsManager; - } } } + + public class StorageUploaderScope + { + internal TenantManager TenantManager { get; } + internal SecurityContext SecurityContext { get; } + internal StorageFactory StorageFactory { get; } + internal IOptionsMonitor Options { get; } + internal StorageSettingsHelper StorageSettingsHelper { get; } + internal SettingsManager SettingsManager { get; } + + public StorageUploaderScope(TenantManager tenantManager, SecurityContext securityContext, StorageFactory storageFactory, IOptionsMonitor options, StorageSettingsHelper storageSettingsHelper, SettingsManager settingsManager) + { + TenantManager = tenantManager; + SecurityContext = securityContext; + StorageFactory = storageFactory; + Options = options; + StorageSettingsHelper = storageSettingsHelper; + SettingsManager = settingsManager; + } + } } diff --git a/common/ASC.Resource.Manager/Program.cs b/common/ASC.Resource.Manager/Program.cs index 4f93fe8497..dc428749a9 100644 --- a/common/ASC.Resource.Manager/Program.cs +++ b/common/ASC.Resource.Manager/Program.cs @@ -7,6 +7,7 @@ using System.Reflection; using System.Text.RegularExpressions; using System.Threading.Tasks; +using ASC.Common; using ASC.Common.Utils; using CommandLine; @@ -22,17 +23,7 @@ namespace ASC.Resource.Manager { Parser.Default.ParseArguments(args).WithParsed(Export); } - class Scope - { - internal ResourceData ResourceData { get; } - internal IConfiguration Configuration { get; } - - public Scope(ResourceData resourceData, IConfiguration configuration ) - { - ResourceData = resourceData; - Configuration = configuration; - } - } + public static void Export(Options options) { var services = new ServiceCollection(); @@ -40,7 +31,7 @@ namespace ASC.Resource.Manager startup.ConfigureServices(services); var serviceProvider = services.BuildServiceProvider(); using var scope = serviceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var cultures = new List(); var projects = new List(); @@ -199,4 +190,25 @@ namespace ASC.Resource.Manager return string.Join(',', bag.ToArray()); } } + + public class ProgramScope + { + internal ResourceData ResourceData { get; } + internal IConfiguration Configuration { get; } + + public ProgramScope(ResourceData resourceData, IConfiguration configuration) + { + ResourceData = resourceData; + Configuration = configuration; + } + } + + public static class ProgramExtension + { + public static DIHelper AddProgramService(this DIHelper services) + { + services.TryAddScoped(); + return services; + } + } } diff --git a/common/ASC.Resource.Manager/Startup.cs b/common/ASC.Resource.Manager/Startup.cs index 4366527090..c85f8729bf 100644 --- a/common/ASC.Resource.Manager/Startup.cs +++ b/common/ASC.Resource.Manager/Startup.cs @@ -25,6 +25,7 @@ namespace ASC.Resource.Manager var diHelper = new DIHelper(services); services.AddLogging(); diHelper.TryAddScoped(); + diHelper.TryAddScoped(); diHelper.AddDbContextManagerService(); diHelper.AddLoggerService(); diff --git a/common/services/ASC.Data.Backup/Core/NotifyHelper.cs b/common/services/ASC.Data.Backup/Core/NotifyHelper.cs index 2e0fbe5c01..13f52ef99b 100644 --- a/common/services/ASC.Data.Backup/Core/NotifyHelper.cs +++ b/common/services/ASC.Data.Backup/Core/NotifyHelper.cs @@ -69,7 +69,7 @@ namespace ASC.Data.Backup public void SendAboutBackupCompleted(Guid userId) { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifySource, scope); client.SendNoticeToAsync( @@ -82,7 +82,7 @@ namespace ASC.Data.Backup public void SendAboutRestoreStarted(Tenant tenant, bool notifyAllUsers) { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifySource, scope); var owner = scopeClass.UserManager.GetUsers(tenant.OwnerId); @@ -100,7 +100,7 @@ namespace ASC.Data.Backup public void SendAboutRestoreCompleted(Tenant tenant, bool notifyAllUsers) { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifySource, scope); var owner = scopeClass.UserManager.GetUsers(tenant.OwnerId); @@ -120,7 +120,7 @@ namespace ASC.Data.Backup private void MigrationNotify(Tenant tenant, INotifyAction action, string region, string url, bool notify) { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifySource, scope); var users = scopeClass.UserManager.GetUsers() @@ -137,29 +137,31 @@ namespace ASC.Data.Backup new TagValue(Tags.RegionName, TransferResourceHelper.GetRegionDescription(region)), new TagValue(Tags.PortalUrl, url)); } - } - - class Scope - { - internal UserManager UserManager { get; } - internal StudioNotifyHelper StudioNotifyHelper { get; } - internal StudioNotifySource StudioNotifySource { get; } - internal DisplayUserSettingsHelper DisplayUserSettingsHelper { get; } - - public Scope(UserManager userManager, StudioNotifyHelper studioNotifyHelper, StudioNotifySource studioNotifySource, DisplayUserSettingsHelper displayUserSettingsHelper) - { - UserManager = userManager; - StudioNotifyHelper = studioNotifyHelper; - StudioNotifySource = studioNotifySource; - DisplayUserSettingsHelper = displayUserSettingsHelper; - } } } + + public class NotifyHelperScope + { + internal UserManager UserManager { get; } + internal StudioNotifyHelper StudioNotifyHelper { get; } + internal StudioNotifySource StudioNotifySource { get; } + internal DisplayUserSettingsHelper DisplayUserSettingsHelper { get; } + + public NotifyHelperScope(UserManager userManager, StudioNotifyHelper studioNotifyHelper, StudioNotifySource studioNotifySource, DisplayUserSettingsHelper displayUserSettingsHelper) + { + UserManager = userManager; + StudioNotifyHelper = studioNotifyHelper; + StudioNotifySource = studioNotifySource; + DisplayUserSettingsHelper = displayUserSettingsHelper; + } + } + public static class NotifyHelperExtension { public static DIHelper AddNotifyHelperService(this DIHelper services) { services.TryAddSingleton(); + services.TryAddScoped(); return services .AddNotifyConfiguration() diff --git a/common/services/ASC.Data.Backup/Service/BackupWorker.cs b/common/services/ASC.Data.Backup/Service/BackupWorker.cs index 6a12fd27df..d7449b4a5d 100644 --- a/common/services/ASC.Data.Backup/Service/BackupWorker.cs +++ b/common/services/ASC.Data.Backup/Service/BackupWorker.cs @@ -369,7 +369,7 @@ namespace ASC.Data.Backup.Service } using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var tenant = scopeClass.TenantManager.GetTenant(TenantId); @@ -501,7 +501,7 @@ namespace ASC.Data.Backup.Service public override void RunJob() { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); Tenant tenant = null; var tempFile = PathHelper.GetTempFileName(TempFolder); @@ -660,7 +660,7 @@ namespace ASC.Data.Backup.Service public override void RunJob() { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var tempFile = PathHelper.GetTempFileName(TempFolder); var tenant = scopeClass.TenantManager.GetTenant(TenantId); @@ -793,7 +793,7 @@ namespace ASC.Data.Backup.Service } } - internal class Scope + internal class BackupWorkerScope { internal TenantManager TenantManager { get; } internal BackupStorageFactory BackupStorageFactory { get; } @@ -804,7 +804,7 @@ namespace ASC.Data.Backup.Service internal RestorePortalTask RestorePortalTask { get; } internal TransferPortalTask TransferPortalTask { get; } - public Scope(TenantManager tenantManager, + public BackupWorkerScope(TenantManager tenantManager, BackupStorageFactory backupStorageFactory, NotifyHelper notifyHelper, BackupRepository backupRepository, @@ -833,8 +833,7 @@ namespace ASC.Data.Backup.Service services.TryAddTransient(); services.TryAddTransient(); services.TryAddTransient(); - - + services.TryAddScoped(); services.TryAddSingleton>(); services.TryAddSingleton>(); services.AddSingleton>, ConfigureProgressQueue>(); @@ -848,7 +847,8 @@ namespace ASC.Data.Backup.Service .AddNotifyHelperService() .AddBackupPortalTaskService() .AddDbFactoryService() - .AddRestorePortalTaskService(); + .AddRestorePortalTaskService() + .AddTransferPortalTaskService(); } } } diff --git a/common/services/ASC.Data.Backup/Tasks/TransferPortalTask.cs b/common/services/ASC.Data.Backup/Tasks/TransferPortalTask.cs index 35aee19b01..5215686834 100644 --- a/common/services/ASC.Data.Backup/Tasks/TransferPortalTask.cs +++ b/common/services/ASC.Data.Backup/Tasks/TransferPortalTask.cs @@ -29,6 +29,7 @@ using System.Data.Common; using System.IO; using System.Linq; +using ASC.Common; using ASC.Common.Logging; using ASC.Core.Tenants; using ASC.Data.Backup.Extensions; @@ -250,5 +251,19 @@ namespace ASC.Data.Backup.Tasks return Path.Combine(BackupDirectory ?? DefaultDirectoryName, tenantAlias + DateTime.UtcNow.ToString("(yyyy-MM-dd HH-mm-ss)") + ".backup"); } + + } + + public static class TransferPortalTaskExtension + { + public static DIHelper AddTransferPortalTaskService(this DIHelper services) + { + services.TryAddScoped(); + return services + .AddStorageFactoryConfigService() + .AddBackupPortalTaskService() + .AddDbFactoryService() + .AddRestorePortalTaskService(); + } } } diff --git a/common/services/ASC.ElasticSearch/Service/Launcher.cs b/common/services/ASC.ElasticSearch/Service/Launcher.cs index b54be286ea..e93a3899d6 100644 --- a/common/services/ASC.ElasticSearch/Service/Launcher.cs +++ b/common/services/ASC.ElasticSearch/Service/Launcher.cs @@ -92,7 +92,7 @@ namespace ASC.ElasticSearch var task = new Task(async () => { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); while (!scopeClass.FactoryIndexer.CheckState(false)) { @@ -178,19 +178,18 @@ namespace ASC.ElasticSearch Log.ErrorFormat("Product {0}", product.IndexName); } } + } - class Scope + public class ServiceLauncherScope + { + internal FactoryIndexer FactoryIndexer { get; } + internal Service.Service Service { get; } + + public ServiceLauncherScope(FactoryIndexer factoryIndexer, Service.Service service) { - internal FactoryIndexer FactoryIndexer { get; } - internal Service.Service Service { get; } - - public Scope(FactoryIndexer factoryIndexer, Service.Service service) - { - FactoryIndexer = factoryIndexer; - Service = service; - } + FactoryIndexer = factoryIndexer; + Service = service; } - } public static class ServiceLauncherExtension @@ -198,7 +197,9 @@ namespace ASC.ElasticSearch public static DIHelper AddServiceLauncher(this DIHelper services) { services.TryAddSingleton(); + services.TryAddScoped(); services.TryAddSingleton(); + services.TryAddScoped(); return services .AddSettingsService() diff --git a/common/services/ASC.ElasticSearch/Service/Service.cs b/common/services/ASC.ElasticSearch/Service/Service.cs index dd9e411b53..54614202de 100644 --- a/common/services/ASC.ElasticSearch/Service/Service.cs +++ b/common/services/ASC.ElasticSearch/Service/Service.cs @@ -87,23 +87,11 @@ namespace ASC.ElasticSearch.Service { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); scopeClass.TenantManager.SetCurrentTenant(tenant); scopeClass.SettingsManager.ClearCache(); }); } - - class Scope - { - internal TenantManager TenantManager { get; } - internal SettingsManager SettingsManager { get; } - - public Scope(TenantManager tenantManager, SettingsManager settingsManager) - { - TenantManager = tenantManager; - SettingsManager = settingsManager; - } - } //public State GetState() //{ // return new State @@ -113,4 +101,16 @@ namespace ASC.ElasticSearch.Service // }; //} } + + public class ServiceScope + { + internal TenantManager TenantManager { get; } + internal SettingsManager SettingsManager { get; } + + public ServiceScope(TenantManager tenantManager, SettingsManager settingsManager) + { + TenantManager = tenantManager; + SettingsManager = settingsManager; + } + } } diff --git a/common/services/ASC.Feed.Aggregator/Service/FeedAggregatorService.cs b/common/services/ASC.Feed.Aggregator/Service/FeedAggregatorService.cs index 0301a229bc..8cba63d3b6 100644 --- a/common/services/ASC.Feed.Aggregator/Service/FeedAggregatorService.cs +++ b/common/services/ASC.Feed.Aggregator/Service/FeedAggregatorService.cs @@ -121,7 +121,7 @@ namespace ASC.Feed.Aggregator { var cfg = FeedSettings.GetInstance(Configuration); using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); scopeClass.BaseCommonLinkUtility.Initialize(cfg.ServerRoot); var start = DateTime.UtcNow; @@ -285,8 +285,9 @@ namespace ASC.Feed.Aggregator return false; } } + } - class Scope + public class FeedAggregatorServiceScope { internal BaseCommonLinkUtility BaseCommonLinkUtility { get; } internal TenantManager TenantManager { get; } @@ -295,7 +296,7 @@ namespace ASC.Feed.Aggregator internal SecurityContext SecurityContext { get; } internal AuthManager AuthManager { get; } - public Scope(BaseCommonLinkUtility baseCommonLinkUtility, + public FeedAggregatorServiceScope(BaseCommonLinkUtility baseCommonLinkUtility, TenantManager tenantManager, FeedAggregateDataProvider feedAggregateDataProvider, UserManager userManager, @@ -310,13 +311,13 @@ namespace ASC.Feed.Aggregator AuthManager = authManager; } } - } public static class FeedAggregatorServiceExtension { public static DIHelper AddFeedAggregatorService(this DIHelper services) { services.TryAddSingleton(); + services.TryAddScoped(); return services .AddBaseCommonLinkUtilityService() diff --git a/common/services/ASC.Notify/NotifyService.cs b/common/services/ASC.Notify/NotifyService.cs index 701de709d7..d333ed77b4 100644 --- a/common/services/ASC.Notify/NotifyService.cs +++ b/common/services/ASC.Notify/NotifyService.cs @@ -99,7 +99,7 @@ namespace ASC.Notify } using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); scopeClass.TenantManager.SetCurrentTenant(tenant); scopeClass.TenantWhiteLabelSettingsHelper.Apply(scopeClass.SettingsManager.Load(), tenant); methodInfo.Invoke(instance, parameters); @@ -111,29 +111,30 @@ namespace ASC.Notify } } - public static class NotifyServiceExtension - { - public static DIHelper AddNotifyService(this DIHelper services) - { - services.TryAddSingleton(); - services.TryAddSingleton(typeof(ICacheNotify<>), typeof(KafkaCache<>)); - - return services - .AddDbWorker(); - } - } - - class Scope + public class NotifyServiceScope { internal TenantManager TenantManager { get; } internal TenantWhiteLabelSettingsHelper TenantWhiteLabelSettingsHelper { get; } internal SettingsManager SettingsManager { get; } - public Scope(TenantManager tenantManager, TenantWhiteLabelSettingsHelper tenantWhiteLabelSettingsHelper, SettingsManager settingsManager) + public NotifyServiceScope(TenantManager tenantManager, TenantWhiteLabelSettingsHelper tenantWhiteLabelSettingsHelper, SettingsManager settingsManager) { TenantManager = tenantManager; TenantWhiteLabelSettingsHelper = tenantWhiteLabelSettingsHelper; SettingsManager = settingsManager; } } + + public static class NotifyServiceExtension + { + public static DIHelper AddNotifyService(this DIHelper services) + { + services.TryAddSingleton(); + services.TryAddScoped(); + services.TryAddSingleton(typeof(ICacheNotify<>), typeof(KafkaCache<>)); + + return services + .AddDbWorker(); + } + } } diff --git a/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs b/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs index 7c2242edfa..dd0db0f961 100644 --- a/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs +++ b/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs @@ -52,7 +52,7 @@ using Microsoft.Extensions.DependencyInjection; namespace ASC.Files.Core.Data { - internal class FolderDao : AbstractDao, IFolderDao + public class FolderDao : AbstractDao, IFolderDao { private const string my = "my"; private const string common = "common"; diff --git a/products/ASC.Files/Core/Core/Dao/TeamlabDao/SecurityDao.cs b/products/ASC.Files/Core/Core/Dao/TeamlabDao/SecurityDao.cs index 21d1d6e227..5b2fc2e923 100644 --- a/products/ASC.Files/Core/Core/Dao/TeamlabDao/SecurityDao.cs +++ b/products/ASC.Files/Core/Core/Dao/TeamlabDao/SecurityDao.cs @@ -42,7 +42,7 @@ using ASC.Web.Studio.Utility; namespace ASC.Files.Core.Data { - internal class SecurityDao : AbstractDao, ISecurityDao + public class SecurityDao : AbstractDao, ISecurityDao { public SecurityDao(UserManager userManager, DbContextManager dbContextManager, @@ -361,7 +361,7 @@ namespace ASC.Files.Core.Data } } - internal class SecurityTreeRecord + public class SecurityTreeRecord { public DbFilesSecurity DbFilesSecurity { get; set; } public DbFolderTree DbFolderTree { get; set; } diff --git a/products/ASC.Files/Core/Core/Dao/TeamlabDao/TagDao.cs b/products/ASC.Files/Core/Core/Dao/TeamlabDao/TagDao.cs index 27beb1ecf5..589de49258 100644 --- a/products/ASC.Files/Core/Core/Dao/TeamlabDao/TagDao.cs +++ b/products/ASC.Files/Core/Core/Dao/TeamlabDao/TagDao.cs @@ -41,7 +41,7 @@ using ASC.Web.Studio.Utility; namespace ASC.Files.Core.Data { - internal class TagDao : AbstractDao, ITagDao + public class TagDao : AbstractDao, ITagDao { private static readonly object syncRoot = new object(); diff --git a/products/ASC.Files/Core/Core/Thirdparty/CrossDao.cs b/products/ASC.Files/Core/Core/Thirdparty/CrossDao.cs index 7f519df483..25765ef2ca 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/CrossDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/CrossDao.cs @@ -11,7 +11,7 @@ using Microsoft.Extensions.DependencyInjection; namespace ASC.Files.Core.Thirdparty { - internal class CrossDao + public class CrossDao { private IServiceProvider ServiceProvider { get; } private SetupInfo SetupInfo { get; } diff --git a/products/ASC.Files/Core/Core/Thirdparty/IDaoSelector.cs b/products/ASC.Files/Core/Core/Thirdparty/IDaoSelector.cs index 9762d67257..a9f52218a9 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/IDaoSelector.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/IDaoSelector.cs @@ -31,7 +31,7 @@ using ASC.Files.Core.Security; namespace ASC.Files.Thirdparty { - internal interface IDaoSelector : IDisposable + public interface IDaoSelector : IDisposable { bool IsMatch(string id); IFileDao GetFileDao(string id); diff --git a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs index 5808a3fe6b..158e4156a6 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs @@ -45,7 +45,7 @@ using Microsoft.Extensions.DependencyInjection; namespace ASC.Files.Thirdparty.ProviderDao { - internal class ProviderDaoBase : IDisposable + public class ProviderDaoBase : IDisposable { private readonly List Selectors; @@ -130,7 +130,7 @@ namespace ASC.Files.Thirdparty.ProviderDao { var fromSelector = GetSelector(fromFileId); using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); scopeClass.TenantManager.SetCurrentTenant(TenantID); return CrossDao.PerformCrossDaoFileCopy( @@ -154,7 +154,7 @@ namespace ASC.Files.Thirdparty.ProviderDao { var fromSelector = GetSelector(fromFolderId); using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); return CrossDao.PerformCrossDaoFolderCopy( fromFolderId, fromSelector.GetFolderDao(fromFolderId), fromSelector.GetFileDao(fromFolderId), fromSelector.ConvertId, @@ -165,36 +165,38 @@ namespace ASC.Files.Thirdparty.ProviderDao public void Dispose() { Selectors.ForEach(r => r.Dispose()); - } - - class Scope - { - internal TenantManager TenantManager { get; } - internal FolderDao FolderDao { get; } - internal IFileDao FileDao { get; } - - public Scope(TenantManager tenantManager, FolderDao folderDao, IFileDao fileDao) - { - TenantManager = tenantManager; - FolderDao = folderDao; - FileDao = fileDao; - } } } + public class CrossDaoScope + { + internal TenantManager TenantManager { get; } + internal IFolderDao FolderDao { get; } + internal IFileDao FileDao { get; } + + public CrossDaoScope(TenantManager tenantManager, IFolderDao folderDao, IFileDao fileDao) + { + TenantManager = tenantManager; + FolderDao = folderDao; + FileDao = fileDao; + } + } + public static class ProviderDaoBaseExtention { public static DIHelper AddProviderDaoBaseService(this DIHelper services) { if (services.TryAddScoped()) { + services.TryAddScoped(); return services .AddSharpBoxDaoSelectorService() .AddSharePointSelectorService() .AddOneDriveSelectorService() .AddGoogleDriveSelectorService() .AddDropboxDaoSelectorService() - .AddBoxDaoSelectorService(); + .AddBoxDaoSelectorService() + .AddFolderDaoService(); } return services; diff --git a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFolderDao.cs index 7624ee7a3c..b38a299ebd 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFolderDao.cs @@ -38,7 +38,7 @@ using ASC.Files.Core.Thirdparty; namespace ASC.Files.Thirdparty.ProviderDao { - internal class ProviderFolderDao : ProviderDaoBase, IFolderDao + public class ProviderFolderDao : ProviderDaoBase, IFolderDao { public ProviderFolderDao( IServiceProvider serviceProvider, diff --git a/products/ASC.Files/Core/Services/DocumentService/DocbuilderReportsUtility.cs b/products/ASC.Files/Core/Services/DocumentService/DocbuilderReportsUtility.cs index dedea471f5..b86974e360 100644 --- a/products/ASC.Files/Core/Services/DocumentService/DocbuilderReportsUtility.cs +++ b/products/ASC.Files/Core/Services/DocumentService/DocbuilderReportsUtility.cs @@ -154,7 +154,7 @@ namespace ASC.Web.Files.Services.DocumentService public void GenerateReport(DistributedTask task, CancellationToken cancellationToken) { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var logger = scopeClass.Options.CurrentValue; try { @@ -248,25 +248,6 @@ namespace ASC.Web.Files.Services.DocumentService TaskInfo.SetProperty("reportOrigin", Origin); TaskInfo.SetProperty("exception", Exception); } - - class Scope - { - internal IOptionsMonitor Options { get; } - internal TenantManager TenantManager { get; } - internal AuthContext AuthContext { get; } - internal SecurityContext SecurityContext { get; } - internal DocumentServiceConnector DocumentServiceConnector { get; } - - public Scope(IOptionsMonitor options, TenantManager tenantManager, AuthContext authContext, SecurityContext securityContext, DocumentServiceConnector documentServiceConnector) - { - Options = options; - TenantManager = tenantManager; - AuthContext = authContext; - SecurityContext = securityContext; - DocumentServiceConnector = documentServiceConnector; - } - - } } public class DocbuilderReportsUtility @@ -376,4 +357,27 @@ namespace ASC.Web.Files.Services.DocumentService public void Terminate(ReportOrigin origin) => DocbuilderReportsUtility.Terminate(origin, TenantId, UserId); public ReportState Status(ReportOrigin origin) => DocbuilderReportsUtility.Status(origin, HttpContextAccessor, TenantId, UserId); } + + public class ReportStateScope + { + internal IOptionsMonitor Options { get; } + internal TenantManager TenantManager { get; } + internal AuthContext AuthContext { get; } + internal SecurityContext SecurityContext { get; } + internal DocumentServiceConnector DocumentServiceConnector { get; } + + public ReportStateScope( + IOptionsMonitor options, + TenantManager tenantManager, + AuthContext authContext, + SecurityContext securityContext, + DocumentServiceConnector documentServiceConnector) + { + Options = options; + TenantManager = tenantManager; + AuthContext = authContext; + SecurityContext = securityContext; + DocumentServiceConnector = documentServiceConnector; + } + } } diff --git a/products/ASC.Files/Core/Services/NotifyService/NotifyClient.cs b/products/ASC.Files/Core/Services/NotifyService/NotifyClient.cs index c7bfcc9e74..492c546baf 100644 --- a/products/ASC.Files/Core/Services/NotifyService/NotifyClient.cs +++ b/products/ASC.Files/Core/Services/NotifyService/NotifyClient.cs @@ -55,7 +55,7 @@ namespace ASC.Web.Files.Services.NotifyService public void SendDocuSignComplete(File file, string sourceTitle) { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.NotifySource, scope); var recipient = scopeClass.NotifySource.GetRecipientsProvider().GetRecipient(scopeClass.SecurityContext.CurrentAccount.ID.ToString()); @@ -74,7 +74,7 @@ namespace ASC.Web.Files.Services.NotifyService public void SendDocuSignStatus(string subject, string status) { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.NotifySource, scope); var recipient = scopeClass.NotifySource.GetRecipientsProvider().GetRecipient(scopeClass.SecurityContext.CurrentAccount.ID.ToString()); @@ -112,7 +112,7 @@ namespace ASC.Web.Files.Services.NotifyService if (fileEntry == null || recipients.Count == 0) return; using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.NotifySource, scope); var folderDao = scopeClass.DaoFactory.GetFolderDao(); @@ -153,7 +153,7 @@ namespace ASC.Web.Files.Services.NotifyService if (file == null || recipientIds.Count == 0) return; using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.NotifySource, scope); var recipientsProvider = scopeClass.NotifySource.GetRecipientsProvider(); @@ -193,50 +193,50 @@ namespace ASC.Web.Files.Services.NotifyService default: return string.Empty; } - } - - class Scope - { - internal NotifySource NotifySource { get; } - internal SecurityContext SecurityContext { get; } - internal FilesLinkUtility FilesLinkUtility { get; } - internal FileUtility FileUtility { get; } - internal BaseCommonLinkUtility BaseCommonLinkUtility { get; } - internal IDaoFactory DaoFactory { get; } - internal PathProvider PathProvider { get; } - internal UserManager UserManager { get; } - internal TenantManager TenantManager { get; } - - public Scope(NotifySource notifySource, - SecurityContext securityContext, - FilesLinkUtility filesLinkUtility, - FileUtility fileUtility, - BaseCommonLinkUtility baseCommonLinkUtility, - IDaoFactory daoFactory, - PathProvider pathProvider, - UserManager userManager, - TenantManager tenantManager) - { - NotifySource = notifySource; - SecurityContext = securityContext; - FilesLinkUtility = filesLinkUtility; - FileUtility = fileUtility; - BaseCommonLinkUtility = baseCommonLinkUtility; - DaoFactory = daoFactory; - PathProvider = pathProvider; - UserManager = userManager; - TenantManager = tenantManager; - } } } + public class NotifyClientScope + { + internal NotifySource NotifySource { get; } + internal SecurityContext SecurityContext { get; } + internal FilesLinkUtility FilesLinkUtility { get; } + internal FileUtility FileUtility { get; } + internal BaseCommonLinkUtility BaseCommonLinkUtility { get; } + internal IDaoFactory DaoFactory { get; } + internal PathProvider PathProvider { get; } + internal UserManager UserManager { get; } + internal TenantManager TenantManager { get; } + + public NotifyClientScope(NotifySource notifySource, + SecurityContext securityContext, + FilesLinkUtility filesLinkUtility, + FileUtility fileUtility, + BaseCommonLinkUtility baseCommonLinkUtility, + IDaoFactory daoFactory, + PathProvider pathProvider, + UserManager userManager, + TenantManager tenantManager) + { + NotifySource = notifySource; + SecurityContext = securityContext; + FilesLinkUtility = filesLinkUtility; + FileUtility = fileUtility; + BaseCommonLinkUtility = baseCommonLinkUtility; + DaoFactory = daoFactory; + PathProvider = pathProvider; + UserManager = userManager; + TenantManager = tenantManager; + } + } + public static class NotifyClientExtension { public static DIHelper AddNotifyClientService(this DIHelper services) { if (services.TryAddScoped()) { - + services.TryAddScoped(); return services .AddFilesNotifySourceService() .AddBaseCommonLinkUtilityService() diff --git a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDeleteOperation.cs b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDeleteOperation.cs index 7b1e870168..0f1ab386c9 100644 --- a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDeleteOperation.cs +++ b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDeleteOperation.cs @@ -123,7 +123,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations private void DeleteFolders(IEnumerable folderIds, IServiceScope scope) { - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); foreach (var folderId in folderIds) { @@ -207,7 +207,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations private void DeleteFiles(IEnumerable fileIds, IServiceScope scope) { - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); foreach (var fileId in fileIds) { @@ -274,17 +274,17 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations } return false; } + } - class Scope + public class FileDeleteOperationScope + { + internal FileMarker FileMarker { get; } + internal FilesMessageService FilesMessageService { get; } + + public FileDeleteOperationScope(FileMarker fileMarker, FilesMessageService filesMessageService) { - internal FileMarker FileMarker { get; } - internal FilesMessageService FilesMessageService { get; } - - public Scope(FileMarker fileMarker, FilesMessageService filesMessageService) - { - FileMarker = fileMarker; - FilesMessageService = filesMessageService; - } + FileMarker = fileMarker; + FilesMessageService = filesMessageService; } } } \ No newline at end of file diff --git a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDownloadOperation.cs b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDownloadOperation.cs index 9cfefe29e5..386310a496 100644 --- a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDownloadOperation.cs +++ b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDownloadOperation.cs @@ -81,7 +81,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations base.RunJob(_, cancellationToken); using var scope = ThirdPartyOperation.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); using var stream = TempStream.Create(); using (var zip = new ZipOutputStream(stream, true) @@ -149,7 +149,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations throw new DirectoryNotFoundException(FilesCommonResource.ErrorMassage_FolderNotFound); } - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); ReplaceLongPath(entriesPathId); @@ -262,7 +262,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations internal void CompressToZip(ZipOutputStream zip, Stream stream, IServiceScope scope) { if (entriesPathId == null) return; - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var FileDao = scope.ServiceProvider.GetService>(); foreach (var path in entriesPathId.AllKeys) @@ -435,7 +435,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations } } - internal class Scope + public class FileDownloadOperationScope { internal GlobalStore GlobalStore { get; } internal FilesLinkUtility FilesLinkUtility { get; } @@ -443,7 +443,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations internal FileConverter FileConverter { get; } internal FilesMessageService FilesMessageService { get; } - public Scope(GlobalStore globalStore, FilesLinkUtility filesLinkUtility, SetupInfo setupInfo, FileConverter fileConverter, FilesMessageService filesMessageService) + public FileDownloadOperationScope(GlobalStore globalStore, FilesLinkUtility filesLinkUtility, SetupInfo setupInfo, FileConverter fileConverter, FilesMessageService filesMessageService) { GlobalStore = globalStore; FilesLinkUtility = filesLinkUtility; @@ -452,4 +452,5 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations FilesMessageService = filesMessageService; } } + } \ No newline at end of file diff --git a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMarkAsReadOperation.cs b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMarkAsReadOperation.cs index cc3b80faa4..deab7a83bf 100644 --- a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMarkAsReadOperation.cs +++ b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMarkAsReadOperation.cs @@ -84,7 +84,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations protected override void Do(IServiceScope scope) { - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var entries = new List>(); if (Folders.Any()) { @@ -125,19 +125,19 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations Status += string.Join(SPLIT_CHAR, newrootfolder.ToArray()); } + } - class Scope + public class FileMarkAsReadOperationScope + { + internal FileMarker FileMarker { get; } + internal GlobalFolder GlobalFolder { get; } + internal IDaoFactory DaoFactory { get; } + + public FileMarkAsReadOperationScope(FileMarker fileMarker, GlobalFolder globalFolder, IDaoFactory daoFactory) { - internal FileMarker FileMarker { get; } - internal GlobalFolder GlobalFolder { get; } - internal IDaoFactory DaoFactory { get; } - - public Scope(FileMarker fileMarker, GlobalFolder globalFolder, IDaoFactory daoFactory) - { - FileMarker = fileMarker; - GlobalFolder = globalFolder; - DaoFactory = daoFactory; - } + FileMarker = fileMarker; + GlobalFolder = globalFolder; + DaoFactory = daoFactory; } } } \ No newline at end of file diff --git a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs index fa7e54f559..fa0b2d5f17 100644 --- a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs +++ b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs @@ -172,7 +172,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations if (folderIds.Count == 0) return needToMark; - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var folderDao = scope.ServiceProvider.GetService>(); var toFolderId = toFolder.ID; @@ -353,7 +353,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations if (fileIds.Count == 0) return needToMark; - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var fileDao = scope.ServiceProvider.GetService>(); var toFolderId = toFolder.ID; @@ -568,23 +568,23 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations } return false; } + } - class Scope + public class FileMoveCopyOperationScope + { + internal FilesMessageService FilesMessageService { get; } + internal FileMarker FileMarker { get; } + internal FileUtility FileUtility { get; } + internal Global Global { get; } + internal EntryManager EntryManager { get; } + + public FileMoveCopyOperationScope(FilesMessageService filesMessageService, FileMarker fileMarker, FileUtility fileUtility, Global global, EntryManager entryManager) { - internal FilesMessageService FilesMessageService { get; } - internal FileMarker FileMarker { get; } - internal FileUtility FileUtility { get; } - internal Global Global { get; } - internal EntryManager EntryManager { get; } - - public Scope(FilesMessageService filesMessageService, FileMarker fileMarker, FileUtility fileUtility, Global global, EntryManager entryManager) - { - FilesMessageService = filesMessageService; - FileMarker = fileMarker; - FileUtility = fileUtility; - Global = global; - EntryManager = entryManager; - } + FilesMessageService = filesMessageService; + FileMarker = fileMarker; + FileUtility = fileUtility; + Global = global; + EntryManager = entryManager; } } } \ No newline at end of file diff --git a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperation.cs b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperation.cs index ca6672c394..4028e604a7 100644 --- a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperation.cs +++ b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperation.cs @@ -108,6 +108,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations public abstract void RunJob(DistributedTask _, CancellationToken cancellationToken); protected abstract void Do(IServiceScope serviceScope); + } internal class ComposeFileOperation : FileOperation @@ -283,7 +284,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations CancellationToken = cancellationToken; using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); scopeClass.TenantManager.SetCurrentTenant(CurrentTenant); @@ -388,22 +389,21 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations FillDistributedTask(); TaskInfo.PublishChanges(); } - - class Scope - { - internal TenantManager TenantManager { get; } - internal IDaoFactory DaoFactory { get; } - internal FileSecurity FileSecurity { get; } - internal IOptionsMonitor Options { get; } - - public Scope(TenantManager tenantManager, IDaoFactory daoFactory, FileSecurity fileSecurity, IOptionsMonitor options) - { - TenantManager = tenantManager; - DaoFactory = daoFactory; - FileSecurity = fileSecurity; - Options = options; - } - } } + public class FileOperationScope + { + internal TenantManager TenantManager { get; } + internal IDaoFactory DaoFactory { get; } + internal FileSecurity FileSecurity { get; } + internal IOptionsMonitor Options { get; } + + public FileOperationScope(TenantManager tenantManager, IDaoFactory daoFactory, FileSecurity fileSecurity, IOptionsMonitor options) + { + TenantManager = tenantManager; + DaoFactory = daoFactory; + FileSecurity = fileSecurity; + Options = options; + } + } } \ No newline at end of file diff --git a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperationsManager.cs b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperationsManager.cs index 8f4a71d709..3102fa909f 100644 --- a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperationsManager.cs +++ b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperationsManager.cs @@ -239,6 +239,11 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations { services.TryAddSingleton(); services.TryAddSingleton(); + services.TryAddScoped(); + services.TryAddScoped(); + services.TryAddScoped(); + services.TryAddScoped(); + services.TryAddScoped(); return services .AddAuthContextService() diff --git a/web/ASC.Web.Core/Notify/NotifyConfiguration.cs b/web/ASC.Web.Core/Notify/NotifyConfiguration.cs index a4bd04984b..b8a67dbeb4 100644 --- a/web/ASC.Web.Core/Notify/NotifyConfiguration.cs +++ b/web/ASC.Web.Core/Notify/NotifyConfiguration.cs @@ -48,6 +48,8 @@ using ASC.Web.Core.Users; using ASC.Web.Core.WhiteLabel; using ASC.Web.Studio.Utility; +using Autofac.Core; + using Google.Protobuf; using Microsoft.Extensions.Configuration; @@ -130,7 +132,7 @@ namespace ASC.Web.Studio.Core.Notify InterceptorLifetime.Global, (r, p, scope) => { - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); try { // culture @@ -258,7 +260,7 @@ namespace ASC.Web.Studio.Core.Notify } } using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var log = scopeClass.Options.CurrentValue; scopeClass.CommonLinkUtility.GetLocationByRequest(out var product, out var module); @@ -353,58 +355,58 @@ namespace ASC.Web.Studio.Core.Notify return File.Exists(filePath) ? File.ReadAllBytes(filePath) : null; } + } - class Scope + public class NotifyConfigurationScope + { + internal TenantManager TenantManager { get; } + internal WebItemSecurity WebItemSecurity { get; } + internal UserManager UserManager { get; } + internal IOptionsMonitor Options { get; } + internal TenantExtra TenantExtra { get; } + internal WebItemManagerSecurity WebItemManagerSecurity { get; } + internal WebItemManager WebItemManager { get; } + internal IConfiguration Configuration { get; } + internal TenantLogoManager TenantLogoManager { get; } + internal AdditionalWhiteLabelSettingsHelper AdditionalWhiteLabelSettingsHelper { get; } + internal TenantUtil TenantUtil { get; } + internal CoreBaseSettings CoreBaseSettings { get; } + internal CommonLinkUtility CommonLinkUtility { get; } + internal SettingsManager SettingsManager { get; } + internal StudioNotifyHelper StudioNotifyHelper { get; } + + public NotifyConfigurationScope(TenantManager tenantManager, + WebItemSecurity webItemSecurity, + UserManager userManager, + IOptionsMonitor options, + TenantExtra tenantExtra, + WebItemManagerSecurity webItemManagerSecurity, + WebItemManager webItemManager, + IConfiguration configuration, + TenantLogoManager tenantLogoManager, + AdditionalWhiteLabelSettingsHelper additionalWhiteLabelSettingsHelper, + TenantUtil tenantUtil, + CoreBaseSettings coreBaseSettings, + CommonLinkUtility commonLinkUtility, + SettingsManager settingsManager, + StudioNotifyHelper studioNotifyHelper + ) { - internal TenantManager TenantManager { get; } - internal WebItemSecurity WebItemSecurity { get; } - internal UserManager UserManager { get; } - internal IOptionsMonitor Options { get; } - internal TenantExtra TenantExtra { get; } - internal WebItemManagerSecurity WebItemManagerSecurity { get; } - internal WebItemManager WebItemManager { get; } - internal IConfiguration Configuration { get; } - internal TenantLogoManager TenantLogoManager { get; } - internal AdditionalWhiteLabelSettingsHelper AdditionalWhiteLabelSettingsHelper { get; } - internal TenantUtil TenantUtil { get; } - internal CoreBaseSettings CoreBaseSettings { get; } - internal CommonLinkUtility CommonLinkUtility { get; } - internal SettingsManager SettingsManager { get; } - internal StudioNotifyHelper StudioNotifyHelper { get; } - - public Scope(TenantManager tenantManager, - WebItemSecurity webItemSecurity, - UserManager userManager, - IOptionsMonitor options, - TenantExtra tenantExtra, - WebItemManagerSecurity webItemManagerSecurity, - WebItemManager webItemManager, - IConfiguration configuration, - TenantLogoManager tenantLogoManager, - AdditionalWhiteLabelSettingsHelper additionalWhiteLabelSettingsHelper, - TenantUtil tenantUtil, - CoreBaseSettings coreBaseSettings, - CommonLinkUtility commonLinkUtility, - SettingsManager settingsManager, - StudioNotifyHelper studioNotifyHelper - ) - { - TenantManager = tenantManager; - WebItemSecurity = webItemSecurity; - UserManager = userManager; - Options = options; - TenantExtra = tenantExtra; - WebItemManagerSecurity = webItemManagerSecurity; - WebItemManager = webItemManager; - Configuration = configuration; - TenantLogoManager = tenantLogoManager; - AdditionalWhiteLabelSettingsHelper = additionalWhiteLabelSettingsHelper; - TenantUtil = tenantUtil; - CoreBaseSettings = coreBaseSettings; - CommonLinkUtility = commonLinkUtility; - SettingsManager = settingsManager; - StudioNotifyHelper = studioNotifyHelper; - } + TenantManager = tenantManager; + WebItemSecurity = webItemSecurity; + UserManager = userManager; + Options = options; + TenantExtra = tenantExtra; + WebItemManagerSecurity = webItemManagerSecurity; + WebItemManager = webItemManager; + Configuration = configuration; + TenantLogoManager = tenantLogoManager; + AdditionalWhiteLabelSettingsHelper = additionalWhiteLabelSettingsHelper; + TenantUtil = tenantUtil; + CoreBaseSettings = coreBaseSettings; + CommonLinkUtility = commonLinkUtility; + SettingsManager = settingsManager; + StudioNotifyHelper = studioNotifyHelper; } } @@ -412,6 +414,8 @@ namespace ASC.Web.Studio.Core.Notify { public static DIHelper AddNotifyConfiguration(this DIHelper services) { + services.TryAddScoped(); + return services .AddJabberStylerService() .AddTextileStylerService() diff --git a/web/ASC.Web.Core/Notify/StudioNotifyService.cs b/web/ASC.Web.Core/Notify/StudioNotifyService.cs index 1be00a3e6d..bf1c2a903c 100644 --- a/web/ASC.Web.Core/Notify/StudioNotifyService.cs +++ b/web/ASC.Web.Core/Notify/StudioNotifyService.cs @@ -828,7 +828,7 @@ namespace ASC.Web.Studio.Core.Notify try { var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); scopeClass.TenantManager.SetCurrentTenant(tenant); foreach (var u in users) @@ -878,29 +878,28 @@ namespace ASC.Web.Studio.Core.Notify return confirmUrl + $"&firstname={HttpUtility.UrlEncode(user.FirstName)}&lastname={HttpUtility.UrlEncode(user.LastName)}"; } - - class Scope - { - internal TenantManager TenantManager { get; } - internal StudioNotifyServiceHelper StudioNotifyServiceHelper { get; } - - public Scope(TenantManager tenantManager, StudioNotifyServiceHelper studioNotifyServiceHelper) - { - TenantManager = tenantManager; - StudioNotifyServiceHelper = studioNotifyServiceHelper; - } - } - #endregion } + public class StudioNotifyServiceScope + { + internal TenantManager TenantManager { get; } + internal StudioNotifyServiceHelper StudioNotifyServiceHelper { get; } + + public StudioNotifyServiceScope(TenantManager tenantManager, StudioNotifyServiceHelper studioNotifyServiceHelper) + { + TenantManager = tenantManager; + StudioNotifyServiceHelper = studioNotifyServiceHelper; + } + } + public static class StudioNotifyServiceExtension { public static DIHelper AddStudioNotifyServiceService(this DIHelper services) { if (services.TryAddScoped()) { - + services.TryAddScoped(); return services .AddDisplayUserSettingsService() .AddMailWhiteLabelSettingsService() diff --git a/web/ASC.Web.Core/Notify/StudioNotifyServiceSender.cs b/web/ASC.Web.Core/Notify/StudioNotifyServiceSender.cs index f1dfb604e4..66aa44ad87 100644 --- a/web/ASC.Web.Core/Notify/StudioNotifyServiceSender.cs +++ b/web/ASC.Web.Core/Notify/StudioNotifyServiceSender.cs @@ -61,7 +61,7 @@ namespace ASC.Web.Studio.Core.Notify public void OnMessage(NotifyItem item) { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); scopeClass.TenantManager.SetCurrentTenant(item.TenantId); CultureInfo culture = null; @@ -108,7 +108,7 @@ namespace ASC.Web.Studio.Core.Notify var cron = Configuration["core:notify:cron"] ?? "0 0 5 ? * *"; // 5am every day using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); if (Configuration["core:notify:tariff"] != "false") { @@ -169,36 +169,36 @@ namespace ASC.Web.Studio.Core.Notify using var scope = ServiceProvider.CreateScope(); scope.ServiceProvider.GetService().SendMsgWhatsNew(scheduleDate); } + } - class Scope + public class StudioNotifyServiceSenderScope + { + internal TenantManager TenantManager { get; } + internal UserManager UserManager { get; } + internal SecurityContext SecurityContext { get; } + internal AuthContext AuthContext { get; } + internal StudioNotifyHelper StudioNotifyHelper { get; } + internal DisplayUserSettings DisplayUserSettings { get; } + internal TenantExtra TenantExtra { get; } + internal CoreBaseSettings CoreBaseSettings { get; } + + public StudioNotifyServiceSenderScope(TenantManager tenantManager, + UserManager userManager, + SecurityContext securityContext, + AuthContext authContext, + StudioNotifyHelper studioNotifyHelper, + DisplayUserSettings displayUserSettings, + TenantExtra tenantExtra, + CoreBaseSettings coreBaseSettings) { - internal TenantManager TenantManager { get; } - internal UserManager UserManager { get; } - internal SecurityContext SecurityContext { get; } - internal AuthContext AuthContext { get; } - internal StudioNotifyHelper StudioNotifyHelper { get; } - internal DisplayUserSettings DisplayUserSettings { get; } - internal TenantExtra TenantExtra { get; } - internal CoreBaseSettings CoreBaseSettings { get; } - - public Scope(TenantManager tenantManager, - UserManager userManager, - SecurityContext securityContext, - AuthContext authContext, - StudioNotifyHelper studioNotifyHelper, - DisplayUserSettings displayUserSettings, - TenantExtra tenantExtra, - CoreBaseSettings coreBaseSettings) - { - TenantManager = tenantManager; - UserManager = userManager; - SecurityContext = securityContext; - AuthContext = authContext; - StudioNotifyHelper = studioNotifyHelper; - DisplayUserSettings = displayUserSettings; - TenantExtra = tenantExtra; - CoreBaseSettings = coreBaseSettings; - } + TenantManager = tenantManager; + UserManager = userManager; + SecurityContext = securityContext; + AuthContext = authContext; + StudioNotifyHelper = studioNotifyHelper; + DisplayUserSettings = displayUserSettings; + TenantExtra = tenantExtra; + CoreBaseSettings = coreBaseSettings; } } @@ -207,6 +207,7 @@ namespace ASC.Web.Studio.Core.Notify public static DIHelper AddStudioNotifyServiceSender(this DIHelper services) { services.TryAddSingleton(); + services.TryAddScoped(); return services .AddStudioPeriodicNotify() @@ -218,8 +219,7 @@ namespace ASC.Web.Studio.Core.Notify .AddStudioNotifyHelperService() .AddDisplayUserSettingsService() .AddTenantExtraService() - .AddCoreBaseSettingsService() - ; + .AddCoreBaseSettingsService(); } } } \ No newline at end of file diff --git a/web/ASC.Web.Core/Notify/StudioPeriodicNotify.cs b/web/ASC.Web.Core/Notify/StudioPeriodicNotify.cs index 1fb17d7cab..751b4690a3 100644 --- a/web/ASC.Web.Core/Notify/StudioPeriodicNotify.cs +++ b/web/ASC.Web.Core/Notify/StudioPeriodicNotify.cs @@ -93,7 +93,7 @@ namespace ASC.Web.Studio.Core.Notify try { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); scopeClass.TenantManager.SetCurrentTenant(tenant.TenantId); var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifyHelper.NotifySource, scope); @@ -542,7 +542,7 @@ namespace ASC.Web.Studio.Core.Notify try { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var defaultRebranding = MailWhiteLabelSettings.IsDefault(scopeClass.SettingsManager, scopeClass.Configuration); scopeClass.TenantManager.SetCurrentTenant(tenant.TenantId); @@ -929,7 +929,7 @@ namespace ASC.Web.Studio.Core.Notify try { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); scopeClass.TenantManager.SetCurrentTenant(tenant.TenantId); var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifyHelper.NotifySource, scope); @@ -1112,7 +1112,7 @@ namespace ASC.Web.Studio.Core.Notify var sendCount = 0; using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); scopeClass.TenantManager.SetCurrentTenant(tenant.TenantId); var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifyHelper.NotifySource, scope); @@ -1220,71 +1220,73 @@ namespace ASC.Web.Studio.Core.Notify return !isSubscribe; } - - class Scope - { - internal TenantManager TenantManager { get; } - internal UserManager UserManager { get; } - internal StudioNotifyHelper StudioNotifyHelper { get; } - internal PaymentManager PaymentManager { get; } - internal TenantExtra TenantExtra { get; } - internal AuthContext AuthContext { get; } - internal CommonLinkUtility CommonLinkUtility { get; } - internal ApiSystemHelper ApiSystemHelper { get; } - internal SetupInfo SetupInfo { get; } - internal DbContextManager DbContextManager { get; } - internal CouponManager CouponManager { get; } - internal IConfiguration Configuration { get; } - internal SettingsManager SettingsManager { get; } - internal CoreBaseSettings CoreBaseSettings { get; } - internal DisplayUserSettingsHelper DisplayUserSettingsHelper { get; } - internal AuthManager AuthManager { get; } - internal SecurityContext SecurityContext { get; } - - public Scope(TenantManager tenantManager, - UserManager userManager, - StudioNotifyHelper studioNotifyHelper, - PaymentManager paymentManager, - TenantExtra tenantExtra, - AuthContext authContext, - CommonLinkUtility commonLinkUtility, - ApiSystemHelper apiSystemHelper, - SetupInfo setupInfo, - DbContextManager dbContextManager, - CouponManager couponManager, - IConfiguration configuration, - SettingsManager settingsManager, - CoreBaseSettings coreBaseSettings, - DisplayUserSettingsHelper displayUserSettingsHelper, - AuthManager authManager, - SecurityContext securityContext) - { - TenantManager = tenantManager; - UserManager = userManager; - StudioNotifyHelper = studioNotifyHelper; - PaymentManager = paymentManager; - TenantExtra = tenantExtra; - AuthContext = authContext; - CommonLinkUtility = commonLinkUtility; - ApiSystemHelper = apiSystemHelper; - SetupInfo = setupInfo; - DbContextManager = dbContextManager; - CouponManager = couponManager; - Configuration = configuration; - SettingsManager = settingsManager; - CoreBaseSettings = coreBaseSettings; - DisplayUserSettingsHelper = displayUserSettingsHelper; - AuthManager = authManager; - SecurityContext = securityContext; - } - } } + + public class StudioPeriodicNotifyScope + { + internal TenantManager TenantManager { get; } + internal UserManager UserManager { get; } + internal StudioNotifyHelper StudioNotifyHelper { get; } + internal PaymentManager PaymentManager { get; } + internal TenantExtra TenantExtra { get; } + internal AuthContext AuthContext { get; } + internal CommonLinkUtility CommonLinkUtility { get; } + internal ApiSystemHelper ApiSystemHelper { get; } + internal SetupInfo SetupInfo { get; } + internal DbContextManager DbContextManager { get; } + internal CouponManager CouponManager { get; } + internal IConfiguration Configuration { get; } + internal SettingsManager SettingsManager { get; } + internal CoreBaseSettings CoreBaseSettings { get; } + internal DisplayUserSettingsHelper DisplayUserSettingsHelper { get; } + internal AuthManager AuthManager { get; } + internal SecurityContext SecurityContext { get; } + + public StudioPeriodicNotifyScope(TenantManager tenantManager, + UserManager userManager, + StudioNotifyHelper studioNotifyHelper, + PaymentManager paymentManager, + TenantExtra tenantExtra, + AuthContext authContext, + CommonLinkUtility commonLinkUtility, + ApiSystemHelper apiSystemHelper, + SetupInfo setupInfo, + DbContextManager dbContextManager, + CouponManager couponManager, + IConfiguration configuration, + SettingsManager settingsManager, + CoreBaseSettings coreBaseSettings, + DisplayUserSettingsHelper displayUserSettingsHelper, + AuthManager authManager, + SecurityContext securityContext) + { + TenantManager = tenantManager; + UserManager = userManager; + StudioNotifyHelper = studioNotifyHelper; + PaymentManager = paymentManager; + TenantExtra = tenantExtra; + AuthContext = authContext; + CommonLinkUtility = commonLinkUtility; + ApiSystemHelper = apiSystemHelper; + SetupInfo = setupInfo; + DbContextManager = dbContextManager; + CouponManager = couponManager; + Configuration = configuration; + SettingsManager = settingsManager; + CoreBaseSettings = coreBaseSettings; + DisplayUserSettingsHelper = displayUserSettingsHelper; + AuthManager = authManager; + SecurityContext = securityContext; + } + } + public static class StudioPeriodicNotifyExtension { public static DIHelper AddStudioPeriodicNotify(this DIHelper services) { services.TryAddSingleton(); - services.TryAddSingleton(); + services.TryAddSingleton(); + services.TryAddScoped(); return services .AddApiSystemHelper() diff --git a/web/ASC.Web.Core/Notify/StudioWhatsNewNotify.cs b/web/ASC.Web.Core/Notify/StudioWhatsNewNotify.cs index 6315c1b300..19778e928e 100644 --- a/web/ASC.Web.Core/Notify/StudioWhatsNewNotify.cs +++ b/web/ASC.Web.Core/Notify/StudioWhatsNewNotify.cs @@ -82,7 +82,7 @@ namespace ASC.Web.Studio.Core.Notify try { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); var tenant = scopeClass.TenantManager.GetTenant(tenantid); if (tenant == null || @@ -291,57 +291,57 @@ namespace ASC.Web.Studio.Core.Notify public DateTime Date { get; set; } public string Action { get; set; } } + } - class Scope - { - internal TenantManager TenantManager { get; } - internal PaymentManager PaymentManager { get; } - internal TenantUtil TenantUtil { get; } - internal StudioNotifyHelper StudioNotifyHelper { get; } - internal UserManager UserManager { get; } - internal SecurityContext SecurityContext { get; } - internal AuthContext AuthContext { get; } - internal AuthManager AuthManager { get; } - internal CommonLinkUtility CommonLinkUtility { get; } - internal DisplayUserSettingsHelper DisplayUserSettingsHelper { get; } - internal FeedAggregateDataProvider FeedAggregateDataProvider { get; } - internal CoreSettings CoreSettings { get; } + public class StudioWhatsNewNotifyScope + { + internal TenantManager TenantManager { get; } + internal PaymentManager PaymentManager { get; } + internal TenantUtil TenantUtil { get; } + internal StudioNotifyHelper StudioNotifyHelper { get; } + internal UserManager UserManager { get; } + internal SecurityContext SecurityContext { get; } + internal AuthContext AuthContext { get; } + internal AuthManager AuthManager { get; } + internal CommonLinkUtility CommonLinkUtility { get; } + internal DisplayUserSettingsHelper DisplayUserSettingsHelper { get; } + internal FeedAggregateDataProvider FeedAggregateDataProvider { get; } + internal CoreSettings CoreSettings { get; } - public Scope(TenantManager tenantManager, - PaymentManager paymentManager, - TenantUtil tenantUtil, - StudioNotifyHelper studioNotifyHelper, - UserManager userManager, - SecurityContext securityContext, - AuthContext authContext, - AuthManager authManager, - CommonLinkUtility commonLinkUtility, - DisplayUserSettingsHelper displayUserSettingsHelper, - FeedAggregateDataProvider feedAggregateDataProvider, - CoreSettings coreSettings) - { - TenantManager = tenantManager; - PaymentManager = paymentManager; - TenantUtil = tenantUtil; - StudioNotifyHelper = studioNotifyHelper; - UserManager = userManager; - SecurityContext = securityContext; - AuthContext = authContext; - AuthManager = authManager; - CommonLinkUtility = commonLinkUtility; - DisplayUserSettingsHelper = displayUserSettingsHelper; - FeedAggregateDataProvider = feedAggregateDataProvider; - CoreSettings = coreSettings; - } - } + public StudioWhatsNewNotifyScope(TenantManager tenantManager, + PaymentManager paymentManager, + TenantUtil tenantUtil, + StudioNotifyHelper studioNotifyHelper, + UserManager userManager, + SecurityContext securityContext, + AuthContext authContext, + AuthManager authManager, + CommonLinkUtility commonLinkUtility, + DisplayUserSettingsHelper displayUserSettingsHelper, + FeedAggregateDataProvider feedAggregateDataProvider, + CoreSettings coreSettings) + { + TenantManager = tenantManager; + PaymentManager = paymentManager; + TenantUtil = tenantUtil; + StudioNotifyHelper = studioNotifyHelper; + UserManager = userManager; + SecurityContext = securityContext; + AuthContext = authContext; + AuthManager = authManager; + CommonLinkUtility = commonLinkUtility; + DisplayUserSettingsHelper = displayUserSettingsHelper; + FeedAggregateDataProvider = feedAggregateDataProvider; + CoreSettings = coreSettings; + } } public static class StudioWhatsNewNotifyExtension { public static DIHelper AddStudioWhatsNewNotify(this DIHelper services) { - services.TryAddSingleton(); - + services.TryAddSingleton(); + services.TryAddScoped(); return services .AddWebItemManager() .AddFeedAggregateDataProvider() diff --git a/web/ASC.Web.Core/QuotaSync.cs b/web/ASC.Web.Core/QuotaSync.cs index 232d0c0bd6..e71ad07071 100644 --- a/web/ASC.Web.Core/QuotaSync.cs +++ b/web/ASC.Web.Core/QuotaSync.cs @@ -51,7 +51,7 @@ namespace ASC.Web.Studio.Core.Quota public void RunJob(DistributedTask _, CancellationToken cancellationToken) { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); scopeClass.TenantManager.SetCurrentTenant(TenantId); var storageModules = scopeClass.StorageFactoryConfig.GetModuleList(string.Empty).ToList(); @@ -75,19 +75,19 @@ namespace ASC.Web.Studio.Core.Quota TaskInfo.SetProperty(TenantIdKey, TenantId); return TaskInfo; } + } - class Scope - { - internal TenantManager TenantManager { get; } - internal StorageFactoryConfig StorageFactoryConfig { get; } - internal StorageFactory StorageFactory { get; } + class QuotaSyncScope + { + internal TenantManager TenantManager { get; } + internal StorageFactoryConfig StorageFactoryConfig { get; } + internal StorageFactory StorageFactory { get; } - public Scope(TenantManager tenantManager, StorageFactoryConfig storageFactoryConfig, StorageFactory storageFactory) - { - TenantManager = tenantManager; - StorageFactoryConfig = storageFactoryConfig; - StorageFactory = storageFactory; - } - } + public QuotaSyncScope(TenantManager tenantManager, StorageFactoryConfig storageFactoryConfig, StorageFactory storageFactory) + { + TenantManager = tenantManager; + StorageFactoryConfig = storageFactoryConfig; + StorageFactory = storageFactory; + } } } \ No newline at end of file From 132a6b05ae9b05644aebfaacc787120541aefc72 Mon Sep 17 00:00:00 2001 From: SuhorukovAnton <62381554+SuhorukovAnton@users.noreply.github.com> Date: Mon, 31 Aug 2020 11:18:07 +0300 Subject: [PATCH 08/18] scope: add deconstructs --- .../Configuration/AmiPublicDnsSyncService.cs | 20 +- .../ASC.Core.Common/Notify/EmailSenderSink.cs | 23 +- .../Notify/JabberSenderSink.cs | 15 +- .../Notify/Senders/AWSSender.cs | 17 +- .../Notify/Senders/SmtpSender.cs | 15 +- .../Tests/TopSubscriptionProviderTest.cs | 20 +- .../ASC.Core.Common/Tests/UserManagerTest.cs | 85 ++--- .../ReassignProgressItem.cs | 58 +++- .../ASC.Data.Reassigns/RemoveProgressItem.cs | 66 ++-- .../Configuration/StorageSettings.cs | 32 +- common/ASC.Data.Storage/StaticUploader.cs | 42 ++- common/ASC.Data.Storage/StorageHandler.cs | 24 +- common/ASC.Data.Storage/StorageUploader.cs | 55 +++- .../ASC.Data.Backup/Core/NotifyHelper.cs | 50 +-- .../ASC.Data.Backup/Service/BackupWorker.cs | 105 +++--- .../ASC.ElasticSearch/Service/Launcher.cs | 16 +- .../ASC.ElasticSearch/Service/Service.cs | 15 +- .../Service/FeedAggregatorService.cs | 42 ++- common/services/ASC.Notify/NotifyService.cs | 18 +- .../Thirdparty/ProviderDao/ProviderDaoBase.cs | 34 +- .../DocbuilderReportsUtility.cs | 36 ++- .../Services/NotifyService/NotifyClient.cs | 78 +++-- .../FileOperations/FileDeleteOperation.cs | 30 +- .../FileOperations/FileDownloadOperation.cs | 46 +-- .../FileOperations/FileMarkAsReadOperation.cs | 26 +- .../FileOperations/FileMoveCopyOperation.cs | 57 ++-- .../FileOperations/FileOperation.cs | 31 +- .../ASC.Files/Core/Utils/FileConverter.cs | 98 ++++-- .../Notify/NotifyConfiguration.cs | 107 ++++--- .../Notify/StudioNotifyService.cs | 15 +- .../Notify/StudioNotifyServiceSender.cs | 59 ++-- .../Notify/StudioPeriodicNotify.cs | 300 ++++++++++-------- .../Notify/StudioWhatsNewNotify.cs | 93 ++++-- web/ASC.Web.Core/QuotaSync.cs | 24 +- 34 files changed, 1113 insertions(+), 639 deletions(-) diff --git a/common/ASC.Core.Common/Configuration/AmiPublicDnsSyncService.cs b/common/ASC.Core.Common/Configuration/AmiPublicDnsSyncService.cs index 7e69515944..073a0df2cb 100644 --- a/common/ASC.Core.Common/Configuration/AmiPublicDnsSyncService.cs +++ b/common/ASC.Core.Common/Configuration/AmiPublicDnsSyncService.cs @@ -52,17 +52,19 @@ namespace ASC.Core.Configuration public static void Synchronize() { using var scope = ServiceProvider.CreateScope(); - var ScopeClass = scope.ServiceProvider.GetService(); - if (ScopeClass.CoreBaseSettings.Standalone) + var scopeClass = scope.ServiceProvider.GetService(); + (var tenantManager, var coreBaseSettings) = scopeClass; + + if (coreBaseSettings.Standalone) { - var tenants = ScopeClass.TenantManager.GetTenants(false).Where(t => MappedDomainNotSettedByUser(t.MappedDomain)); + var tenants =tenantManager.GetTenants(false).Where(t => MappedDomainNotSettedByUser(t.MappedDomain)); if (tenants.Any()) { var dnsname = GetAmiPublicDnsName(); foreach (var tenant in tenants.Where(t => !string.IsNullOrEmpty(dnsname) && t.MappedDomain != dnsname)) { tenant.MappedDomain = dnsname; - ScopeClass.TenantManager.SaveTenant(tenant); + tenantManager.SaveTenant(tenant); } } } @@ -97,13 +99,19 @@ namespace ASC.Core.Configuration public class AmiPublicDnsSyncServiceScope { - internal TenantManager TenantManager { get; } - internal CoreBaseSettings CoreBaseSettings { get; } + private TenantManager TenantManager { get; } + private CoreBaseSettings CoreBaseSettings { get; } public AmiPublicDnsSyncServiceScope(TenantManager tenantManager, CoreBaseSettings coreBaseSettings) { TenantManager = tenantManager; CoreBaseSettings = coreBaseSettings; } + + public void Deconstruct(out TenantManager tenantManager, out CoreBaseSettings coreBaseSettings) + { + tenantManager = TenantManager; + coreBaseSettings = CoreBaseSettings; + } } } diff --git a/common/ASC.Core.Common/Notify/EmailSenderSink.cs b/common/ASC.Core.Common/Notify/EmailSenderSink.cs index 27f74fb853..1706b6ac09 100644 --- a/common/ASC.Core.Common/Notify/EmailSenderSink.cs +++ b/common/ASC.Core.Common/Notify/EmailSenderSink.cs @@ -95,13 +95,13 @@ namespace ASC.Core.Notify using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - - var tenant = scopeClass.TenantManager.GetCurrentTenant(false); + (var tenantManager, var coreConfiguration, var options) = scopeClass; + var tenant = tenantManager.GetCurrentTenant(false); m.Tenant = tenant == null ? Tenant.DEFAULT_TENANT : tenant.TenantId; - var from = MailAddressUtils.Create(scopeClass.CoreConfiguration.SmtpSettings.SenderAddress, scopeClass.CoreConfiguration.SmtpSettings.SenderDisplayName); + var from = MailAddressUtils.Create(coreConfiguration.SmtpSettings.SenderAddress, coreConfiguration.SmtpSettings.SenderDisplayName); var fromTag = message.Arguments.FirstOrDefault(x => x.Tag.Equals("MessageFrom")); - if ((scopeClass.CoreConfiguration.SmtpSettings.IsDefaultSettings || string.IsNullOrEmpty(scopeClass.CoreConfiguration.SmtpSettings.SenderDisplayName)) && + if ((coreConfiguration.SmtpSettings.IsDefaultSettings || string.IsNullOrEmpty(coreConfiguration.SmtpSettings.SenderDisplayName)) && fromTag != null && fromTag.Value != null) { try @@ -128,7 +128,7 @@ namespace ASC.Core.Notify } catch (Exception e) { - scopeClass.Options.Get("ASC.Notify").Error("Error creating reply to tag for: " + replyTag.Value, e); + options.Get("ASC.Notify").Error("Error creating reply to tag for: " + replyTag.Value, e); } } @@ -150,9 +150,9 @@ namespace ASC.Core.Notify public class EmailSenderSinkScope { - internal TenantManager TenantManager { get; } - internal CoreConfiguration CoreConfiguration { get; } - internal IOptionsMonitor Options { get; } + private TenantManager TenantManager { get; } + private CoreConfiguration CoreConfiguration { get; } + private IOptionsMonitor Options { get; } public EmailSenderSinkScope(TenantManager tenantManager, CoreConfiguration coreConfiguration, IOptionsMonitor options) { @@ -160,6 +160,13 @@ namespace ASC.Core.Notify CoreConfiguration = coreConfiguration; Options = options; } + + public void Deconstruct(out TenantManager tenantManager, out CoreConfiguration coreConfiguration, out IOptionsMonitor optionsMonitor ) + { + tenantManager = TenantManager; + coreConfiguration = CoreConfiguration; + optionsMonitor = Options; + } } public static class EmailSenderSinkExtension diff --git a/common/ASC.Core.Common/Notify/JabberSenderSink.cs b/common/ASC.Core.Common/Notify/JabberSenderSink.cs index 90b85faf1f..03917b3a1b 100644 --- a/common/ASC.Core.Common/Notify/JabberSenderSink.cs +++ b/common/ASC.Core.Common/Notify/JabberSenderSink.cs @@ -55,8 +55,9 @@ namespace ASC.Core.Notify { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); + (var userManager, var tenantManager) = scopeClass; var result = SendResult.OK; - var username = scopeClass.UserManager.GetUsers(new Guid(message.Recipient.ID)).UserName; + var username = userManager.GetUsers(new Guid(message.Recipient.ID)).UserName; if (string.IsNullOrEmpty(username)) { result = SendResult.IncorrectRecipient; @@ -73,7 +74,7 @@ namespace ASC.Core.Notify CreationDate = DateTime.UtcNow.Ticks, }; - var tenant = scopeClass.TenantManager.GetCurrentTenant(false); + var tenant = tenantManager.GetCurrentTenant(false); m.Tenant = tenant == null ? Tenant.DEFAULT_TENANT : tenant.TenantId; sender.Send(m); @@ -89,14 +90,20 @@ namespace ASC.Core.Notify public class JabberSenderSinkScope { - internal UserManager UserManager { get; } - internal TenantManager TenantManager { get; } + private UserManager UserManager { get; } + private TenantManager TenantManager { get; } public JabberSenderSinkScope(UserManager userManager, TenantManager tenantManager) { TenantManager = tenantManager; UserManager = userManager; } + + public void Deconstruct(out UserManager userManager, out TenantManager tenantManager) + { + userManager = UserManager; + tenantManager = TenantManager; + } } public static class JabberSenderSinkExtension diff --git a/common/ASC.Core.Common/Notify/Senders/AWSSender.cs b/common/ASC.Core.Common/Notify/Senders/AWSSender.cs index fd533c8229..f51cf9ab14 100644 --- a/common/ASC.Core.Common/Notify/Senders/AWSSender.cs +++ b/common/ASC.Core.Common/Notify/Senders/AWSSender.cs @@ -80,10 +80,11 @@ namespace ASC.Core.Notify.Senders { Log.DebugFormat("Tenant: {0}, To: {1}", m.Tenant, m.To); using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); - scopeClass.TenantManager.SetCurrentTenant(m.Tenant); + var scopeClass = scope.ServiceProvider.GetService(); + (var tenantManager, var coreConfiguration) = scopeClass; + tenantManager.SetCurrentTenant(m.Tenant); - if (!scopeClass.CoreConfiguration.SmtpSettings.IsDefaultSettings) + if (!coreConfiguration.SmtpSettings.IsDefaultSettings) { UseCoreSettings = true; result = base.Send(m); @@ -231,14 +232,20 @@ namespace ASC.Core.Notify.Senders public class AWSSenderScope { - internal TenantManager TenantManager { get; } - internal CoreConfiguration CoreConfiguration { get; } + private TenantManager TenantManager { get; } + private CoreConfiguration CoreConfiguration { get; } public AWSSenderScope(TenantManager tenantManager, CoreConfiguration coreConfiguration) { TenantManager = tenantManager; CoreConfiguration = coreConfiguration; } + + public void Deconstruct(out TenantManager tenantManager, out CoreConfiguration coreConfiguration) + { + tenantManager = TenantManager; + coreConfiguration = CoreConfiguration; + } } public static class AWSSenderExtension diff --git a/common/ASC.Core.Common/Notify/Senders/SmtpSender.cs b/common/ASC.Core.Common/Notify/Senders/SmtpSender.cs index 76b61fba7a..a7b68f69f0 100644 --- a/common/ASC.Core.Common/Notify/Senders/SmtpSender.cs +++ b/common/ASC.Core.Common/Notify/Senders/SmtpSender.cs @@ -113,7 +113,8 @@ namespace ASC.Core.Notify.Senders { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - scopeClass.TenantManager.SetCurrentTenant(m.Tenant); + (var tenantManager, var coreConfiguration) = scopeClass; + tenantManager.SetCurrentTenant(m.Tenant); var smtpClient = GetSmtpClient(); var result = NoticeSendResult.TryOnceAgain; @@ -122,7 +123,7 @@ namespace ASC.Core.Notify.Senders try { if (UseCoreSettings) - InitUseCoreSettings(scopeClass.CoreConfiguration); + InitUseCoreSettings(coreConfiguration); var mail = BuildMailMessage(m); @@ -323,14 +324,20 @@ namespace ASC.Core.Notify.Senders public class SmtpSenderScope { - internal TenantManager TenantManager { get; } - internal CoreConfiguration CoreConfiguration { get; } + private TenantManager TenantManager { get; } + private CoreConfiguration CoreConfiguration { get; } public SmtpSenderScope(TenantManager tenantManager, CoreConfiguration coreConfiguration) { TenantManager = tenantManager; CoreConfiguration = coreConfiguration; } + + public void Deconstruct(out TenantManager tenantManager, out CoreConfiguration coreConfiguration) + { + tenantManager = TenantManager; + coreConfiguration = CoreConfiguration; + } } public static class SmtpSenderExtension diff --git a/common/ASC.Core.Common/Tests/TopSubscriptionProviderTest.cs b/common/ASC.Core.Common/Tests/TopSubscriptionProviderTest.cs index 2af8ec4254..f6629ef872 100644 --- a/common/ASC.Core.Common/Tests/TopSubscriptionProviderTest.cs +++ b/common/ASC.Core.Common/Tests/TopSubscriptionProviderTest.cs @@ -60,7 +60,8 @@ namespace ASC.Core.Common.Tests { using var scope = serviceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - scopeClass.TenantManager.SetCurrentTenant(tenant); + (var tenantManager, var subscriptionManager, var recipientProviderImpl) = scopeClass; + tenantManager.SetCurrentTenant(tenant); tenant = new Tenants.Tenant(0, "teamlab"); sourceId = "6045b68c-2c2e-42db-9e53-c272e814c4ad"; @@ -70,8 +71,8 @@ namespace ASC.Core.Common.Tests testRec = new DirectRecipient("ff0c4e13-1831-43c2-91ce-7b7beb56179b", null); //Oliver Khan testRec2 = new DirectRecipient("0017794f-aeb7-49a5-8817-9e870e02bd3f", null); //Якутова Юлия - recProvider = scopeClass.RecipientProviderImpl; - var directSubProvider = new DirectSubscriptionProvider(sourceId, scopeClass.SubscriptionManager, recProvider); + recProvider = recipientProviderImpl; + var directSubProvider = new DirectSubscriptionProvider(sourceId,subscriptionManager, recProvider); subProvider = new TopSubscriptionProvider(recProvider, directSubProvider); } @@ -147,9 +148,9 @@ namespace ASC.Core.Common.Tests public class TopSubscriptionProviderTestScope { - internal TenantManager TenantManager { get; } - internal SubscriptionManager SubscriptionManager { get; } - internal RecipientProviderImpl RecipientProviderImpl { get; } + private TenantManager TenantManager { get; } + private SubscriptionManager SubscriptionManager { get; } + private RecipientProviderImpl RecipientProviderImpl { get; } public TopSubscriptionProviderTestScope(TenantManager tenantManager, SubscriptionManager subscriptionManager, RecipientProviderImpl recipientProviderImpl) { @@ -157,6 +158,13 @@ namespace ASC.Core.Common.Tests SubscriptionManager = subscriptionManager; RecipientProviderImpl = recipientProviderImpl; } + + public void Deconstruct(out TenantManager tenantManager, out SubscriptionManager subscriptionManager, out RecipientProviderImpl recipientProviderImpl) + { + tenantManager = TenantManager; + subscriptionManager = SubscriptionManager; + recipientProviderImpl = RecipientProviderImpl; + } } } #endif \ No newline at end of file diff --git a/common/ASC.Core.Common/Tests/UserManagerTest.cs b/common/ASC.Core.Common/Tests/UserManagerTest.cs index f123848dca..29e55fbbfd 100644 --- a/common/ASC.Core.Common/Tests/UserManagerTest.cs +++ b/common/ASC.Core.Common/Tests/UserManagerTest.cs @@ -32,8 +32,10 @@ namespace ASC.Core.Common.Tests using System.Threading; using ASC.Core.Users; using Microsoft.Extensions.DependencyInjection; - using NUnit.Framework; - + using NUnit.Framework; + + using Renci.SshNet; + [TestFixture] public class UserManagerTest { @@ -44,35 +46,36 @@ namespace ASC.Core.Common.Tests { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); + (var userManager, var tenantManager) = scopeClass; - var users = scopeClass.UserManager.Search(null, EmployeeStatus.Active); + var users = userManager.Search(null, EmployeeStatus.Active); Assert.AreEqual(0, users.Length); - users = scopeClass.UserManager.Search("", EmployeeStatus.Active); + users = userManager.Search("", EmployeeStatus.Active); Assert.AreEqual(0, users.Length); - users = scopeClass.UserManager.Search(" ", EmployeeStatus.Active); + users = userManager.Search(" ", EmployeeStatus.Active); Assert.AreEqual(0, users.Length); - users = scopeClass.UserManager.Search("АбРаМсКй", EmployeeStatus.Active); + users = userManager.Search("АбРаМсКй", EmployeeStatus.Active); Assert.AreEqual(0, users.Length); - users = scopeClass.UserManager.Search("АбРаМсКий", EmployeeStatus.Active); + users = userManager.Search("АбРаМсКий", EmployeeStatus.Active); Assert.AreEqual(0, users.Length);//Абрамский уволился - users = scopeClass.UserManager.Search("АбРаМсКий", EmployeeStatus.All); + users = userManager.Search("АбРаМсКий", EmployeeStatus.All); Assert.AreNotEqual(0, users.Length); - users = scopeClass.UserManager.Search("иванов николай", EmployeeStatus.Active); + users = userManager.Search("иванов николай", EmployeeStatus.Active); Assert.AreNotEqual(0, users.Length); - users = scopeClass.UserManager.Search("ведущий програм", EmployeeStatus.Active); + users = userManager.Search("ведущий програм", EmployeeStatus.Active); Assert.AreNotEqual(0, users.Length); - users = scopeClass.UserManager.Search("баннов лев", EmployeeStatus.Active, new Guid("613fc896-3ddd-4de1-a567-edbbc6cf1fc8")); + users = userManager.Search("баннов лев", EmployeeStatus.Active, new Guid("613fc896-3ddd-4de1-a567-edbbc6cf1fc8")); Assert.AreNotEqual(0, users.Length); - users = scopeClass.UserManager.Search("иванов николай", EmployeeStatus.Active, new Guid("613fc896-3ddd-4de1-a567-edbbc6cf1fc8")); + users = userManager.Search("иванов николай", EmployeeStatus.Active, new Guid("613fc896-3ddd-4de1-a567-edbbc6cf1fc8")); Assert.AreEqual(0, users); } @@ -80,62 +83,64 @@ namespace ASC.Core.Common.Tests public void DepartmentManagers() { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); - var tenant = scopeClass.TenantManager.SetCurrentTenant(1024); + var scopeClass = scope.ServiceProvider.GetService(); + (var userManager, var tenantManager) = scopeClass; + var tenant = tenantManager.SetCurrentTenant(1024); - var deps = scopeClass.UserManager.GetDepartments(); - var users = scopeClass.UserManager.GetUsers(); + var deps = userManager.GetDepartments(); + var users = userManager.GetUsers(); var g1 = deps[0]; var ceo = users[0]; var u1 = users[1]; var u2 = users[2]; - _ = scopeClass.UserManager.GetCompanyCEO(); - scopeClass.UserManager.SetCompanyCEO(ceo.ID); - var ceoTemp = scopeClass.UserManager.GetCompanyCEO(); + _ = userManager.GetCompanyCEO(); + userManager.SetCompanyCEO(ceo.ID); + var ceoTemp = userManager.GetCompanyCEO(); Assert.AreEqual(ceo, ceoTemp); Thread.Sleep(TimeSpan.FromSeconds(6)); - ceoTemp = scopeClass.UserManager.GetCompanyCEO(); + ceoTemp = userManager.GetCompanyCEO(); Assert.AreEqual(ceo, ceoTemp); - scopeClass.UserManager.SetDepartmentManager(g1.ID, u1.ID); + userManager.SetDepartmentManager(g1.ID, u1.ID); - scopeClass.UserManager.SetDepartmentManager(g1.ID, u2.ID); + userManager.SetDepartmentManager(g1.ID, u2.ID); } [Test] public void UserGroupsPerformanceTest() { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); - var tenant = scopeClass.TenantManager.SetCurrentTenant(0); + var scopeClass = scope.ServiceProvider.GetService(); + (var userManager, var tenantManager) = scopeClass; + var tenant = tenantManager.SetCurrentTenant(0); - foreach (var u in scopeClass.UserManager.GetUsers()) + foreach (var u in userManager.GetUsers()) { - var groups = scopeClass.UserManager.GetGroups(Guid.Empty); + var groups = userManager.GetGroups(Guid.Empty); Assert.IsNotNull(groups); - foreach (var g in scopeClass.UserManager.GetUserGroups(u.ID)) + foreach (var g in userManager.GetUserGroups(u.ID)) { - var manager = scopeClass.UserManager.GetUsers(scopeClass.UserManager.GetDepartmentManager(g.ID)).UserName; + var manager = userManager.GetUsers(userManager.GetDepartmentManager(g.ID)).UserName; } } var stopwatch = Stopwatch.StartNew(); - foreach (var u in scopeClass.UserManager.GetUsers()) + foreach (var u in userManager.GetUsers()) { - var groups = scopeClass.UserManager.GetGroups(Guid.Empty); + var groups = userManager.GetGroups(Guid.Empty); Assert.IsNotNull(groups); - foreach (var g in scopeClass.UserManager.GetUserGroups(u.ID)) + foreach (var g in userManager.GetUserGroups(u.ID)) { - var manager = scopeClass.UserManager.GetUsers(scopeClass.UserManager.GetDepartmentManager(g.ID)).UserName; + var manager = userManager.GetUsers(userManager.GetDepartmentManager(g.ID)).UserName; } } stopwatch.Stop(); stopwatch.Restart(); - var users = scopeClass.UserManager.GetUsersByGroup(Constants.GroupUser.ID); - var visitors = scopeClass.UserManager.GetUsersByGroup(Constants.GroupVisitor.ID); - var all = scopeClass.UserManager.GetUsers(); + var users = userManager.GetUsersByGroup(Constants.GroupUser.ID); + var visitors = userManager.GetUsersByGroup(Constants.GroupVisitor.ID); + var all = userManager.GetUsers(); Assert.IsNotNull(users); Assert.IsNotNull(visitors); Assert.IsNotNull(all); @@ -145,14 +150,20 @@ namespace ASC.Core.Common.Tests public class UserManagerTestScope { - internal UserManager UserManager { get; } - internal TenantManager TenantManager { get; } + private UserManager UserManager { get; } + private TenantManager TenantManager { get; } public UserManagerTestScope(UserManager userManager, TenantManager tenantManager) { UserManager = userManager; TenantManager = tenantManager; } + + public void Deconstruct(out UserManager userManager, out TenantManager tenantManager) + { + userManager = UserManager; + tenantManager = TenantManager; + } } } #endif diff --git a/common/ASC.Data.Reassigns/ReassignProgressItem.cs b/common/ASC.Data.Reassigns/ReassignProgressItem.cs index 064d73c726..b4afbed6c8 100644 --- a/common/ASC.Data.Reassigns/ReassignProgressItem.cs +++ b/common/ASC.Data.Reassigns/ReassignProgressItem.cs @@ -102,15 +102,16 @@ namespace ASC.Data.Reassigns { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - var logger = scopeClass.Options.Get("ASC.Web"); - var tenant = scopeClass.TenantManager.SetCurrentTenant(_tenantId); + (var tenantManager, var coreBaseSettings, var messageService, var studioNotifyService, var securityContext, var userManager, var userPhotoManager, var displayUserSettingsHelper, var messageTarget, var options) = scopeClass; + var logger = options.Get("ASC.Web"); + var tenant = tenantManager.SetCurrentTenant(_tenantId); try { Percentage = 0; Status = ProgressStatus.Started; - scopeClass.SecurityContext.AuthenticateMe(_currentUserId); + securityContext.AuthenticateMe(_currentUserId); logger.InfoFormat("reassignment of data from {0} to {1}", FromUser, ToUser); @@ -124,7 +125,7 @@ namespace ASC.Data.Reassigns Percentage = 66; //_projectsReassign.Reassign(_fromUserId, _toUserId); - if (!scopeClass.CoreBaseSettings.CustomMode) + if (!coreBaseSettings.CustomMode) { logger.Info("reassignment of data from crm"); @@ -139,14 +140,14 @@ namespace ASC.Data.Reassigns //} } - SendSuccessNotify(scopeClass.UserManager, scopeClass.StudioNotifyService, scopeClass.MessageService, scopeClass.MessageTarget, scopeClass.DisplayUserSettingsHelper); + SendSuccessNotify(userManager, studioNotifyService, messageService, messageTarget, displayUserSettingsHelper); Percentage = 100; Status = ProgressStatus.Done; if (_deleteProfile) { - DeleteUserProfile(scopeClass.UserManager, scopeClass.UserPhotoManager, scopeClass.MessageService, scopeClass.MessageTarget, scopeClass.DisplayUserSettingsHelper); + DeleteUserProfile(userManager, userPhotoManager, messageService, messageTarget, displayUserSettingsHelper); } } catch (Exception ex) @@ -154,7 +155,7 @@ namespace ASC.Data.Reassigns logger.Error(ex); Status = ProgressStatus.Failed; Error = ex.Message; - SendErrorNotify(scopeClass.UserManager, scopeClass.StudioNotifyService, ex.Message); + SendErrorNotify(userManager, studioNotifyService, ex.Message); } finally { @@ -210,16 +211,16 @@ namespace ASC.Data.Reassigns public class ReassignProgressItemScope { - internal TenantManager TenantManager { get; } - internal CoreBaseSettings CoreBaseSettings { get; } - internal MessageService MessageService { get; } - internal StudioNotifyService StudioNotifyService { get; } - internal SecurityContext SecurityContext { get; } - internal UserManager UserManager { get; } - internal UserPhotoManager UserPhotoManager { get; } - internal DisplayUserSettingsHelper DisplayUserSettingsHelper { get; } - internal MessageTarget MessageTarget { get; } - internal IOptionsMonitor Options { get; } + private TenantManager TenantManager { get; } + private CoreBaseSettings CoreBaseSettings { get; } + private MessageService MessageService { get; } + private StudioNotifyService StudioNotifyService { get; } + private SecurityContext SecurityContext { get; } + private UserManager UserManager { get; } + private UserPhotoManager UserPhotoManager { get; } + private DisplayUserSettingsHelper DisplayUserSettingsHelper { get; } + private MessageTarget MessageTarget { get; } + private IOptionsMonitor Options { get; } public ReassignProgressItemScope(TenantManager tenantManager, CoreBaseSettings coreBaseSettings, @@ -243,6 +244,29 @@ namespace ASC.Data.Reassigns MessageTarget = messageTarget; Options = options; } + + public void Deconstruct(out TenantManager tenantManager, + out CoreBaseSettings coreBaseSettings, + out MessageService messageService, + out StudioNotifyService studioNotifyService, + out SecurityContext securityContext, + out UserManager userManager, + out UserPhotoManager userPhotoManager, + out DisplayUserSettingsHelper displayUserSettingsHelper, + out MessageTarget messageTarget, + out IOptionsMonitor optionsMonitor ) + { + tenantManager = TenantManager; + coreBaseSettings = CoreBaseSettings; + messageService = MessageService; + studioNotifyService = StudioNotifyService; + securityContext = SecurityContext; + userManager = UserManager; + userPhotoManager = UserPhotoManager; + displayUserSettingsHelper = DisplayUserSettingsHelper; + messageTarget = MessageTarget; + optionsMonitor = Options; + } } public static class ReassignProgressItemExtension diff --git a/common/ASC.Data.Reassigns/RemoveProgressItem.cs b/common/ASC.Data.Reassigns/RemoveProgressItem.cs index d74485d665..cf933f2510 100644 --- a/common/ASC.Data.Reassigns/RemoveProgressItem.cs +++ b/common/ASC.Data.Reassigns/RemoveProgressItem.cs @@ -98,19 +98,20 @@ namespace ASC.Data.Reassigns { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - var logger = scopeClass.Options.Get("ASC.Web"); - var tenant = scopeClass.TenantManager.SetCurrentTenant(_tenantId); - var userName = scopeClass.UserFormatter.GetUserName(User, DisplayUserNameFormat.Default); + (var tenantManager, var coreBaseSettings, var messageService, var studioNotifyService, var securityContext, var userManager, var messageTarget, var webItemManagerSecurity, var storageFactory, var userFormatter, var options) = scopeClass; + var logger = options.Get("ASC.Web"); + var tenant = tenantManager.SetCurrentTenant(_tenantId); + var userName = userFormatter.GetUserName(User, DisplayUserNameFormat.Default); try { Percentage = 0; Status = ProgressStatus.Started; - scopeClass.SecurityContext.AuthenticateMe(_currentUserId); + securityContext.AuthenticateMe(_currentUserId); long crmSpace; - GetUsageSpace(scopeClass.WebItemManagerSecurity, out var docsSpace, out var mailSpace, out var talkSpace); + GetUsageSpace(webItemManagerSecurity, out var docsSpace, out var mailSpace, out var talkSpace); logger.InfoFormat("deleting user data for {0} ", FromUser); @@ -119,7 +120,7 @@ namespace ASC.Data.Reassigns Percentage = 25; //_docService.DeleteStorage(_userId); - if (!scopeClass.CoreBaseSettings.CustomMode) + if (!coreBaseSettings.CustomMode) { logger.Info("deleting of data from crm"); @@ -144,9 +145,9 @@ namespace ASC.Data.Reassigns logger.Info("deleting of data from talk"); Percentage = 99; - DeleteTalkStorage(scopeClass.StorageFactory); + DeleteTalkStorage(storageFactory); - SendSuccessNotify(scopeClass.StudioNotifyService, scopeClass.MessageService, scopeClass.MessageTarget, userName, docsSpace, crmSpace, mailSpace, talkSpace); + SendSuccessNotify(studioNotifyService, messageService, messageTarget, userName, docsSpace, crmSpace, mailSpace, talkSpace); Percentage = 100; Status = ProgressStatus.Done; @@ -156,7 +157,7 @@ namespace ASC.Data.Reassigns logger.Error(ex); Status = ProgressStatus.Failed; Error = ex.Message; - SendErrorNotify(scopeClass.StudioNotifyService, ex.Message, userName); + SendErrorNotify(studioNotifyService, ex.Message, userName); } finally { @@ -247,17 +248,17 @@ namespace ASC.Data.Reassigns public class RemoveProgressItemScope { - internal TenantManager TenantManager { get; } - internal CoreBaseSettings CoreBaseSettings { get; } - internal MessageService MessageService { get; } - internal StudioNotifyService StudioNotifyService { get; } - internal SecurityContext SecurityContext { get; } - internal UserManager UserManager { get; } - internal MessageTarget MessageTarget { get; } - internal WebItemManagerSecurity WebItemManagerSecurity { get; } - internal StorageFactory StorageFactory { get; } - internal UserFormatter UserFormatter { get; } - internal IOptionsMonitor Options { get; } + private TenantManager TenantManager { get; } + private CoreBaseSettings CoreBaseSettings { get; } + private MessageService MessageService { get; } + private StudioNotifyService StudioNotifyService { get; } + private SecurityContext SecurityContext { get; } + private UserManager UserManager { get; } + private MessageTarget MessageTarget { get; } + private WebItemManagerSecurity WebItemManagerSecurity { get; } + private StorageFactory StorageFactory { get; } + private UserFormatter UserFormatter { get; } + private IOptionsMonitor Options { get; } public RemoveProgressItemScope(TenantManager tenantManager, CoreBaseSettings coreBaseSettings, @@ -283,6 +284,31 @@ namespace ASC.Data.Reassigns UserFormatter = userFormatter; Options = options; } + + public void Deconstruct(out TenantManager tenantManager, + out CoreBaseSettings coreBaseSettings, + out MessageService messageService, + out StudioNotifyService studioNotifyService, + out SecurityContext securityContext, + out UserManager userManager, + out MessageTarget messageTarget, + out WebItemManagerSecurity webItemManagerSecurity, + out StorageFactory storageFactory, + out UserFormatter userFormatter, + out IOptionsMonitor optionsMonitor ) + { + tenantManager = TenantManager; + coreBaseSettings = CoreBaseSettings; + messageService = MessageService; + studioNotifyService = StudioNotifyService; + securityContext = SecurityContext; + userManager = UserManager; + messageTarget = MessageTarget; + webItemManagerSecurity = WebItemManagerSecurity; + storageFactory = StorageFactory; + userFormatter = UserFormatter; + optionsMonitor = Options; + } } public static class RemoveProgressItemExtension diff --git a/common/ASC.Data.Storage/Configuration/StorageSettings.cs b/common/ASC.Data.Storage/Configuration/StorageSettings.cs index a9057a0593..403aa771a5 100644 --- a/common/ASC.Data.Storage/Configuration/StorageSettings.cs +++ b/common/ASC.Data.Storage/Configuration/StorageSettings.cs @@ -50,17 +50,18 @@ namespace ASC.Data.Storage.Configuration { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); - var settings = scopeClass.SettingsManager.LoadForTenant(i.TenantId); + var scopeClass = scope.ServiceProvider.GetService(); + (var storageSettingsHelper, var settingsManager, var cdnStorageSettings) = scopeClass; + var settings = settingsManager.LoadForTenant(i.TenantId); if (i.Name == settings.Module) { - scopeClass.StorageSettingsHelper.Clear(settings); + storageSettingsHelper.Clear(settings); } - var cdnSettings = scopeClass.SettingsManager.LoadForTenant(i.TenantId); + var cdnSettings = settingsManager.LoadForTenant(i.TenantId); if (i.Name == cdnSettings.Module) { - scopeClass.StorageSettingsHelper.Clear(cdnSettings); + storageSettingsHelper.Clear(cdnSettings); } }, CacheNotifyAction.Remove); } @@ -209,18 +210,25 @@ namespace ASC.Data.Storage.Configuration } } - public class StorageSettingsHelperScope + public class BaseStorageSettingsListenerScope { - internal StorageSettingsHelper StorageSettingsHelper { get; } - internal SettingsManager SettingsManager { get; } - internal CdnStorageSettings CdnStorageSettings { get; } + private StorageSettingsHelper StorageSettingsHelper { get; } + private SettingsManager SettingsManager { get; } + private CdnStorageSettings CdnStorageSettings { get; } - public StorageSettingsHelperScope(StorageSettingsHelper storageSettingsHelper, SettingsManager settingsManager, CdnStorageSettings cdnStorageSettings) + public BaseStorageSettingsListenerScope(StorageSettingsHelper storageSettingsHelper, SettingsManager settingsManager, CdnStorageSettings cdnStorageSettings) { StorageSettingsHelper = storageSettingsHelper; SettingsManager = settingsManager; CdnStorageSettings = cdnStorageSettings; } + + public void Deconstruct(out StorageSettingsHelper storageSettingsHelper, out SettingsManager settingsManager, out CdnStorageSettings cdnStorageSettings) + { + storageSettingsHelper = StorageSettingsHelper; + settingsManager = SettingsManager; + cdnStorageSettings = CdnStorageSettings; + } } public static class StorageSettingsExtension @@ -229,7 +237,7 @@ namespace ASC.Data.Storage.Configuration { services.TryAddSingleton(typeof(ICacheNotify<>), typeof(KafkaCache<>)); services.TryAddSingleton(); - + services.TryAddScoped(); return services .AddStorageFactoryConfigService() .AddPathUtilsService() @@ -241,7 +249,6 @@ namespace ASC.Data.Storage.Configuration if (services.TryAddScoped()) { services.TryAddScoped(); - services.TryAddScoped(); return services .AddSettingsManagerService() .AddBaseStorageSettingsService() @@ -256,7 +263,6 @@ namespace ASC.Data.Storage.Configuration if (services.TryAddScoped()) { services.TryAddScoped(); - services.TryAddScoped(); return services .AddSettingsManagerService() .AddBaseStorageSettingsService() diff --git a/common/ASC.Data.Storage/StaticUploader.cs b/common/ASC.Data.Storage/StaticUploader.cs index 3abb727304..effd6848ab 100644 --- a/common/ASC.Data.Storage/StaticUploader.cs +++ b/common/ASC.Data.Storage/StaticUploader.cs @@ -112,9 +112,9 @@ namespace ASC.Data.Storage var task = new Task(() => { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); - scopeClass.TenantManager.SetCurrentTenant(tenantId); - var staticUploader = scopeClass.StaticUploader; + var scopeClass = scope.ServiceProvider.GetService(); + (var tenantManager, var staticUploader, var securityContext, var settingsManager, var storageSettingsHelper) = scopeClass; + tenantManager.SetCurrentTenant(tenantId); return staticUploader.UploadFile(relativePath, mappedPath, onComplete); }, TaskCreationOptions.LongRunning); @@ -208,12 +208,13 @@ namespace ASC.Data.Storage try { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); - var tenant = scopeClass.TenantManager.GetTenant(tenantId); - scopeClass.TenantManager.SetCurrentTenant(tenant); - scopeClass.SecurityContext.AuthenticateMe(tenant.OwnerId); + var scopeClass = scope.ServiceProvider.GetService(); + (var tenantManager, var staticUploader, var securityContext, var settingsManager, var storageSettingsHelper) = scopeClass; + var tenant = tenantManager.GetTenant(tenantId); + tenantManager.SetCurrentTenant(tenant); + securityContext.AuthenticateMe(tenant.OwnerId); - var dataStore = scopeClass.StorageSettingsHelper.DataStore(scopeClass.SettingsManager.Load()); + var dataStore = storageSettingsHelper.DataStore(settingsManager.Load()); if (File.Exists(mappedPath)) { @@ -283,15 +284,15 @@ namespace ASC.Data.Storage } } - public class UploadOperationScope + public class StaticUploaderScope { - internal TenantManager TenantManager { get; } - internal StaticUploader StaticUploader { get; } - internal SecurityContext SecurityContext { get; } - internal SettingsManager SettingsManager { get; } - internal StorageSettingsHelper StorageSettingsHelper { get; } + private TenantManager TenantManager { get; } + private StaticUploader StaticUploader { get; } + private SecurityContext SecurityContext { get; } + private SettingsManager SettingsManager { get; } + private StorageSettingsHelper StorageSettingsHelper { get; } - public UploadOperationScope(TenantManager tenantManager, + public StaticUploaderScope(TenantManager tenantManager, StaticUploader staticUploader, SecurityContext securityContext, SettingsManager settingsManager, @@ -303,6 +304,15 @@ namespace ASC.Data.Storage SettingsManager = settingsManager; StorageSettingsHelper = storageSettingsHelper; } + + public void Deconstruct(out TenantManager tenantManager, out StaticUploader staticUploader, out SecurityContext securityContext, out SettingsManager settingsManager, out StorageSettingsHelper storageSettingsHelper) + { + tenantManager = TenantManager; + staticUploader = StaticUploader; + securityContext = SecurityContext; + settingsManager = SettingsManager; + storageSettingsHelper = StorageSettingsHelper; + } } public static class StaticUploaderExtension @@ -311,7 +321,7 @@ namespace ASC.Data.Storage { if (services.TryAddScoped()) { - services.TryAddScoped(); + services.TryAddScoped(); return services .AddTenantManagerService() .AddCdnStorageSettingsService(); diff --git a/common/ASC.Data.Storage/StorageHandler.cs b/common/ASC.Data.Storage/StorageHandler.cs index 5ca3f05728..fcdd9b7b18 100644 --- a/common/ASC.Data.Storage/StorageHandler.cs +++ b/common/ASC.Data.Storage/StorageHandler.cs @@ -66,15 +66,16 @@ namespace ASC.Data.Storage.DiscStorage public async Task Invoke(HttpContext context) { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); + (var tenantManager, var securityContext, var storageFactory, var emailValidationKeyProvider) = scopeClass; - if (_checkAuth && !scopeClass.SecurityContext.IsAuthenticated) + if (_checkAuth && !securityContext.IsAuthenticated) { context.Response.StatusCode = (int)HttpStatusCode.Forbidden; return; } - var storage = scopeClass.StorageFactory.GetStorage(scopeClass.TenantManager.GetCurrentTenant().TenantId.ToString(CultureInfo.InvariantCulture), _module); + var storage = storageFactory.GetStorage(tenantManager.GetCurrentTenant().TenantId.ToString(CultureInfo.InvariantCulture), _module); var path = Path.Combine(_path, GetRouteValue("pathInfo").Replace('/', Path.DirectorySeparatorChar)); var header = context.Request.Query[Constants.QUERY_HEADER].FirstOrDefault() ?? ""; @@ -86,7 +87,7 @@ namespace ASC.Data.Storage.DiscStorage var expire = context.Request.Query[Constants.QUERY_EXPIRE]; if (string.IsNullOrEmpty(expire)) expire = storageExpire.TotalMinutes.ToString(CultureInfo.InvariantCulture); - var validateResult = scopeClass.EmailValidationKeyProvider.ValidateEmailKey(path + "." + header + "." + expire, auth ?? "", TimeSpan.FromMinutes(Convert.ToDouble(expire))); + var validateResult = emailValidationKeyProvider.ValidateEmailKey(path + "." + header + "." + expire, auth ?? "", TimeSpan.FromMinutes(Convert.ToDouble(expire))); if (validateResult != EmailValidationKeyProvider.ValidationResult.Ok) { context.Response.StatusCode = (int)HttpStatusCode.Forbidden; @@ -147,10 +148,10 @@ namespace ASC.Data.Storage.DiscStorage public class StorageHandlerScope { - internal TenantManager TenantManager { get; } - internal SecurityContext SecurityContext { get; } - internal StorageFactory StorageFactory { get; } - internal EmailValidationKeyProvider EmailValidationKeyProvider { get; } + private TenantManager TenantManager { get; } + private SecurityContext SecurityContext { get; } + private StorageFactory StorageFactory { get; } + private EmailValidationKeyProvider EmailValidationKeyProvider { get; } public StorageHandlerScope(TenantManager tenantManager, SecurityContext securityContext, StorageFactory storageFactory, EmailValidationKeyProvider emailValidationKeyProvider) { @@ -159,6 +160,13 @@ namespace ASC.Data.Storage.DiscStorage StorageFactory = storageFactory; EmailValidationKeyProvider = emailValidationKeyProvider; } + public void Deconstruct(out TenantManager tenantManager, out SecurityContext securityContext, out StorageFactory storageFactory, out EmailValidationKeyProvider emailValidationKeyProvider) + { + tenantManager = TenantManager; + securityContext = SecurityContext; + storageFactory = StorageFactory; + emailValidationKeyProvider = EmailValidationKeyProvider; + } } public static class StorageHandlerExtensions diff --git a/common/ASC.Data.Storage/StorageUploader.cs b/common/ASC.Data.Storage/StorageUploader.cs index a0dcfeb5f3..07b7149d74 100644 --- a/common/ASC.Data.Storage/StorageUploader.cs +++ b/common/ASC.Data.Storage/StorageUploader.cs @@ -148,19 +148,20 @@ namespace ASC.Data.Storage { Log.DebugFormat("Tenant: {0}", tenantId); using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); - var tenant = scopeClass.TenantManager.GetTenant(tenantId); - scopeClass.TenantManager.SetCurrentTenant(tenant); + var scopeClass = scope.ServiceProvider.GetService(); + (var tenantManager, var securityContext, var storageFactory, var options, var storageSettingsHelper, var settingsManager) = scopeClass; + var tenant = tenantManager.GetTenant(tenantId); + tenantManager.SetCurrentTenant(tenant); - scopeClass.SecurityContext.AuthenticateMe(tenant.OwnerId); + securityContext.AuthenticateMe(tenant.OwnerId); foreach (var module in Modules) { - var oldStore = scopeClass.StorageFactory.GetStorage(ConfigPath, tenantId.ToString(), module); - var store = scopeClass.StorageFactory.GetStorageFromConsumer(ConfigPath, tenantId.ToString(), module, scopeClass.StorageSettingsHelper.DataStoreConsumer(settings)); + var oldStore = storageFactory.GetStorage(ConfigPath, tenantId.ToString(), module); + var store = storageFactory.GetStorageFromConsumer(ConfigPath, tenantId.ToString(), module, storageSettingsHelper.DataStoreConsumer(settings)); var domains = StorageFactoryConfig.GetDomainList(ConfigPath, module).ToList(); - var crossModuleTransferUtility = new CrossModuleTransferUtility(scopeClass.Options, oldStore, store); + var crossModuleTransferUtility = new CrossModuleTransferUtility (options, oldStore, store); string[] files; foreach (var domain in domains) @@ -191,9 +192,9 @@ namespace ASC.Data.Storage StepDone(); } - scopeClass.SettingsManager.Save(settings); + settingsManager.Save(settings); tenant.SetStatus(TenantStatus.Active); - scopeClass.TenantManager.SaveTenant(tenant); + tenantManager.SaveTenant(tenant); } catch (Exception e) { @@ -203,16 +204,21 @@ namespace ASC.Data.Storage } } - public class StorageUploaderScope + public class MigrateOperationScope { - internal TenantManager TenantManager { get; } - internal SecurityContext SecurityContext { get; } - internal StorageFactory StorageFactory { get; } - internal IOptionsMonitor Options { get; } - internal StorageSettingsHelper StorageSettingsHelper { get; } - internal SettingsManager SettingsManager { get; } + private TenantManager TenantManager { get; } + private SecurityContext SecurityContext { get; } + private StorageFactory StorageFactory { get; } + private IOptionsMonitor Options { get; } + private StorageSettingsHelper StorageSettingsHelper { get; } + private SettingsManager SettingsManager { get; } - public StorageUploaderScope(TenantManager tenantManager, SecurityContext securityContext, StorageFactory storageFactory, IOptionsMonitor options, StorageSettingsHelper storageSettingsHelper, SettingsManager settingsManager) + public MigrateOperationScope(TenantManager tenantManager, + SecurityContext securityContext, + StorageFactory storageFactory, + IOptionsMonitor options, + StorageSettingsHelper storageSettingsHelper, + SettingsManager settingsManager) { TenantManager = tenantManager; SecurityContext = securityContext; @@ -221,5 +227,20 @@ namespace ASC.Data.Storage StorageSettingsHelper = storageSettingsHelper; SettingsManager = settingsManager; } + + public void Deconstruct(out TenantManager tenantManager, + out SecurityContext securityContext, + out StorageFactory storageFactory, + out IOptionsMonitor options, + out StorageSettingsHelper storageSettingsHelper, + out SettingsManager settingsManager ) + { + tenantManager = TenantManager; + securityContext = SecurityContext; + storageFactory = StorageFactory; + options = Options; + storageSettingsHelper = StorageSettingsHelper; + settingsManager = SettingsManager; + } } } diff --git a/common/services/ASC.Data.Backup/Core/NotifyHelper.cs b/common/services/ASC.Data.Backup/Core/NotifyHelper.cs index 13f52ef99b..068553ad43 100644 --- a/common/services/ASC.Data.Backup/Core/NotifyHelper.cs +++ b/common/services/ASC.Data.Backup/Core/NotifyHelper.cs @@ -70,26 +70,28 @@ namespace ASC.Data.Backup { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifySource, scope); + (var userManager, var studioNotifyHelper, var studioNotifySource, var displayUserSettingsHelper) = scopeClass; + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(studioNotifySource, scope); client.SendNoticeToAsync( Actions.BackupCreated, - new[] { scopeClass.StudioNotifyHelper.ToRecipient(userId) }, + new[] { studioNotifyHelper.ToRecipient(userId) }, new[] { StudioNotifyService.EMailSenderName }, - new TagValue(Tags.OwnerName, scopeClass.UserManager.GetUsers(userId).DisplayUserName(scopeClass.DisplayUserSettingsHelper))); + new TagValue(Tags.OwnerName, userManager.GetUsers(userId).DisplayUserName(displayUserSettingsHelper))); } public void SendAboutRestoreStarted(Tenant tenant, bool notifyAllUsers) { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifySource, scope); + (var userManager, var studioNotifyHelper, var studioNotifySource, var displayUserSettingsHelper) = scopeClass; + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(studioNotifySource, scope); - var owner = scopeClass.UserManager.GetUsers(tenant.OwnerId); + var owner = userManager.GetUsers(tenant.OwnerId); var users = notifyAllUsers - ? scopeClass.StudioNotifyHelper.RecipientFromEmail(scopeClass.UserManager.GetUsers(EmployeeStatus.Active).Where(r => r.ActivationStatus == EmployeeActivationStatus.Activated).Select(u => u.Email).ToList(), false) - : owner.ActivationStatus == EmployeeActivationStatus.Activated ? scopeClass.StudioNotifyHelper.RecipientFromEmail(owner.Email, false) : new IDirectRecipient[0]; + ? studioNotifyHelper.RecipientFromEmail(userManager.GetUsers(EmployeeStatus.Active).Where(r => r.ActivationStatus == EmployeeActivationStatus.Activated).Select(u => u.Email).ToList(), false) + : owner.ActivationStatus == EmployeeActivationStatus.Activated ? studioNotifyHelper.RecipientFromEmail(owner.Email, false) : new IDirectRecipient[0]; client.SendNoticeToAsync( Actions.RestoreStarted, @@ -101,31 +103,33 @@ namespace ASC.Data.Backup { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifySource, scope); + (var userManager, var studioNotifyHelper, var studioNotifySource, var displayUserSettingsHelper) = scopeClass; + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(studioNotifySource, scope); - var owner = scopeClass.UserManager.GetUsers(tenant.OwnerId); + var owner = userManager.GetUsers(tenant.OwnerId); var users = notifyAllUsers - ? scopeClass.UserManager.GetUsers(EmployeeStatus.Active).Select(u => scopeClass.StudioNotifyHelper.ToRecipient(u.ID)).ToArray() - : new[] { scopeClass.StudioNotifyHelper.ToRecipient(owner.ID) }; + ? userManager.GetUsers(EmployeeStatus.Active).Select(u => studioNotifyHelper.ToRecipient(u.ID)).ToArray() + : new[] { studioNotifyHelper.ToRecipient(owner.ID) }; client.SendNoticeToAsync( Actions.RestoreCompleted, users, new[] { StudioNotifyService.EMailSenderName }, - new TagValue(Tags.OwnerName, owner.DisplayUserName(scopeClass.DisplayUserSettingsHelper))); + new TagValue(Tags.OwnerName, owner.DisplayUserName(displayUserSettingsHelper))); } private void MigrationNotify(Tenant tenant, INotifyAction action, string region, string url, bool notify) { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifySource, scope); + (var userManager, var studioNotifyHelper, var studioNotifySource, var displayUserSettingsHelper) = scopeClass; + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(studioNotifySource, scope); - var users = scopeClass.UserManager.GetUsers() + var users = userManager.GetUsers() .Where(u => notify ? u.ActivationStatus.HasFlag(EmployeeActivationStatus.Activated) : u.IsOwner(tenant)) - .Select(u => scopeClass.StudioNotifyHelper.ToRecipient(u.ID)) + .Select(u => studioNotifyHelper.ToRecipient(u.ID)) .ToArray(); if (users.Any()) @@ -142,10 +146,10 @@ namespace ASC.Data.Backup public class NotifyHelperScope { - internal UserManager UserManager { get; } - internal StudioNotifyHelper StudioNotifyHelper { get; } - internal StudioNotifySource StudioNotifySource { get; } - internal DisplayUserSettingsHelper DisplayUserSettingsHelper { get; } + private UserManager UserManager { get; } + private StudioNotifyHelper StudioNotifyHelper { get; } + private StudioNotifySource StudioNotifySource { get; } + private DisplayUserSettingsHelper DisplayUserSettingsHelper { get; } public NotifyHelperScope(UserManager userManager, StudioNotifyHelper studioNotifyHelper, StudioNotifySource studioNotifySource, DisplayUserSettingsHelper displayUserSettingsHelper) { @@ -154,6 +158,14 @@ namespace ASC.Data.Backup StudioNotifySource = studioNotifySource; DisplayUserSettingsHelper = displayUserSettingsHelper; } + + public void Deconstruct(out UserManager userManager, out StudioNotifyHelper studioNotifyHelper, out StudioNotifySource studioNotifySource, out DisplayUserSettingsHelper displayUserSettingsHelper) + { + userManager = UserManager; + studioNotifyHelper = StudioNotifyHelper; + studioNotifySource = StudioNotifySource; + displayUserSettingsHelper = DisplayUserSettingsHelper; + } } public static class NotifyHelperExtension diff --git a/common/services/ASC.Data.Backup/Service/BackupWorker.cs b/common/services/ASC.Data.Backup/Service/BackupWorker.cs index d7449b4a5d..3e5ef18581 100644 --- a/common/services/ASC.Data.Backup/Service/BackupWorker.cs +++ b/common/services/ASC.Data.Backup/Service/BackupWorker.cs @@ -370,15 +370,15 @@ namespace ASC.Data.Backup.Service using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); + (var tenantManager, var backupStorageFactory, var notifyHelper, var backupRepository, var backupWorker, var backupPortalTask, var restorePortalTask, var transferPortalTask) = scopeClass; - - var tenant = scopeClass.TenantManager.GetTenant(TenantId); + var tenant = tenantManager.GetTenant(TenantId); var backupName = string.Format("{0}_{1:yyyy-MM-dd_HH-mm-ss}.{2}", tenant.TenantAlias, DateTime.UtcNow, ArchiveFormat); var tempFile = Path.Combine(TempFolder, backupName); var storagePath = tempFile; try { - var backupTask = scopeClass.BackupPortalTask; + var backupTask = backupPortalTask; backupTask.Init(TenantId, ConfigPaths[CurrentRegion], tempFile, Limit); if (!BackupMail) @@ -389,19 +389,19 @@ namespace ASC.Data.Backup.Service backupTask.ProgressChanged += (sender, args) => { Percentage = 0.9 * args.Progress; - scopeClass.BackupWorker.PublishProgress(this); + backupWorker.PublishProgress(this); }; backupTask.RunJob(); - var backupStorage = scopeClass.BackupStorageFactory.GetBackupStorage(StorageType, TenantId, StorageParams); + var backupStorage = backupStorageFactory.GetBackupStorage(StorageType, TenantId, StorageParams); if (backupStorage != null) { storagePath = backupStorage.Upload(StorageBasePath, tempFile, UserId); Link = backupStorage.GetPublicLink(storagePath); } - var repo = scopeClass.BackupRepository; + var repo = backupRepository; repo.SaveBackupRecord( new BackupRecord { @@ -421,11 +421,11 @@ namespace ASC.Data.Backup.Service if (UserId != Guid.Empty && !IsScheduled) { - scopeClass.NotifyHelper.SendAboutBackupCompleted(UserId); + notifyHelper.SendAboutBackupCompleted(UserId); } IsCompleted = true; - scopeClass.BackupWorker.PublishProgress(this); + backupWorker.PublishProgress(this); } catch (Exception error) { @@ -437,7 +437,7 @@ namespace ASC.Data.Backup.Service { try { - scopeClass.BackupWorker.PublishProgress(this); + backupWorker.PublishProgress(this); } catch (Exception error) { @@ -502,31 +502,31 @@ namespace ASC.Data.Backup.Service { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - + (var tenantManager, var backupStorageFactory, var notifyHelper, var backupRepository, var backupWorker, var backupPortalTask, var restorePortalTask, var transferPortalTask) = scopeClass; Tenant tenant = null; var tempFile = PathHelper.GetTempFileName(TempFolder); try { - tenant = scopeClass.TenantManager.GetTenant(TenantId); - scopeClass.NotifyHelper.SendAboutRestoreStarted(tenant, Notify); - var storage = scopeClass.BackupStorageFactory.GetBackupStorage(StorageType, TenantId, StorageParams); + tenant = tenantManager.GetTenant(TenantId); + notifyHelper.SendAboutRestoreStarted(tenant, Notify); + var storage = backupStorageFactory.GetBackupStorage(StorageType, TenantId, StorageParams); storage.Download(StoragePath, tempFile); Percentage = 10; tenant.SetStatus(TenantStatus.Restoring); - scopeClass.TenantManager.SaveTenant(tenant); + tenantManager.SaveTenant(tenant); var columnMapper = new ColumnMapper(); columnMapper.SetMapping("tenants_tenants", "alias", tenant.TenantAlias, ((Guid)Id).ToString("N")); columnMapper.Commit(); - var restoreTask = scopeClass.RestorePortalTask; + var restoreTask = restorePortalTask; restoreTask.Init(ConfigPaths[CurrentRegion], tempFile, TenantId, columnMapper, UpgradesPath); restoreTask.ProgressChanged += (sender, args) => { Percentage = Percentage = (10d + 0.65 * args.Progress); - scopeClass.BackupWorker.PublishProgress(this); + backupWorker.PublishProgress(this); }; restoreTask.RunJob(); @@ -537,18 +537,18 @@ namespace ASC.Data.Backup.Service if (Notify) { AscCacheNotify.OnClearCache(); - var tenants = scopeClass.TenantManager.GetTenants(); + var tenants = tenantManager.GetTenants(); foreach (var t in tenants) { - scopeClass.NotifyHelper.SendAboutRestoreCompleted(t, Notify); + notifyHelper.SendAboutRestoreCompleted(t, Notify); } } } else { - scopeClass.TenantManager.RemoveTenant(tenant.TenantId); + tenantManager.RemoveTenant(tenant.TenantId); - restoredTenant = scopeClass.TenantManager.GetTenant(columnMapper.GetTenantMapping()); + restoredTenant = tenantManager.GetTenant(columnMapper.GetTenantMapping()); restoredTenant.SetStatus(TenantStatus.Active); restoredTenant.TenantAlias = tenant.TenantAlias; restoredTenant.PaymentId = string.Empty; @@ -556,22 +556,22 @@ namespace ASC.Data.Backup.Service { restoredTenant.MappedDomain = tenant.MappedDomain; } - scopeClass.TenantManager.SaveTenant(restoredTenant); + tenantManager.SaveTenant(restoredTenant); // sleep until tenants cache expires Thread.Sleep(TimeSpan.FromMinutes(2)); - scopeClass.NotifyHelper.SendAboutRestoreCompleted(restoredTenant, Notify); + notifyHelper.SendAboutRestoreCompleted(restoredTenant, Notify); } Percentage = 75; - scopeClass.BackupWorker.PublishProgress(this); + backupWorker.PublishProgress(this); File.Delete(tempFile); Percentage = 100; - scopeClass.BackupWorker.PublishProgress(this); + backupWorker.PublishProgress(this); } catch (Exception error) { @@ -581,14 +581,14 @@ namespace ASC.Data.Backup.Service if (tenant != null) { tenant.SetStatus(TenantStatus.Active); - scopeClass.TenantManager.SaveTenant(tenant); + tenantManager.SaveTenant(tenant); } } finally { try { - scopeClass.BackupWorker.PublishProgress(this); + backupWorker.PublishProgress(this); } catch (Exception error) { @@ -661,20 +661,20 @@ namespace ASC.Data.Backup.Service { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - + (var tenantManager, var backupStorageFactory, var notifyHelper, var backupRepository, var backupWorker, var backupPortalTask, var restorePortalTask, var transferPortalTask) = scopeClass; var tempFile = PathHelper.GetTempFileName(TempFolder); - var tenant = scopeClass.TenantManager.GetTenant(TenantId); + var tenant = tenantManager.GetTenant(TenantId); var alias = tenant.TenantAlias; try { - scopeClass.NotifyHelper.SendAboutTransferStart(tenant, TargetRegion, Notify); - var transferProgressItem = scopeClass.TransferPortalTask; + notifyHelper.SendAboutTransferStart(tenant, TargetRegion, Notify); + var transferProgressItem = transferPortalTask; transferProgressItem.Init(TenantId, ConfigPaths[CurrentRegion], ConfigPaths[TargetRegion], Limit, TempFolder); transferProgressItem.ProgressChanged += (sender, args) => { Percentage = args.Progress; - scopeClass.BackupWorker.PublishProgress(this); + backupWorker.PublishProgress(this); }; if (!TransferMail) { @@ -683,8 +683,8 @@ namespace ASC.Data.Backup.Service transferProgressItem.RunJob(); Link = GetLink(alias, false); - scopeClass.NotifyHelper.SendAboutTransferComplete(tenant, TargetRegion, Link, !Notify); - scopeClass.BackupWorker.PublishProgress(this); + notifyHelper.SendAboutTransferComplete(tenant, TargetRegion, Link, !Notify); + backupWorker.PublishProgress(this); } catch (Exception error) { @@ -692,13 +692,13 @@ namespace ASC.Data.Backup.Service Error = error; Link = GetLink(alias, true); - scopeClass.NotifyHelper.SendAboutTransferError(tenant, TargetRegion, Link, !Notify); + notifyHelper.SendAboutTransferError(tenant, TargetRegion, Link, !Notify); } finally { try { - scopeClass.BackupWorker.PublishProgress(this); + backupWorker.PublishProgress(this); } catch (Exception error) { @@ -795,14 +795,14 @@ namespace ASC.Data.Backup.Service internal class BackupWorkerScope { - internal TenantManager TenantManager { get; } - internal BackupStorageFactory BackupStorageFactory { get; } - internal NotifyHelper NotifyHelper { get; } - internal BackupRepository BackupRepository { get; } - internal BackupWorker BackupWorker { get; } - internal BackupPortalTask BackupPortalTask { get; } - internal RestorePortalTask RestorePortalTask { get; } - internal TransferPortalTask TransferPortalTask { get; } + private TenantManager TenantManager { get; } + private BackupStorageFactory BackupStorageFactory { get; } + private NotifyHelper NotifyHelper { get; } + private BackupRepository BackupRepository { get; } + private BackupWorker BackupWorker { get; } + private BackupPortalTask BackupPortalTask { get; } + private RestorePortalTask RestorePortalTask { get; } + private TransferPortalTask TransferPortalTask { get; } public BackupWorkerScope(TenantManager tenantManager, BackupStorageFactory backupStorageFactory, @@ -822,6 +822,25 @@ namespace ASC.Data.Backup.Service RestorePortalTask = restorePortalTask; TransferPortalTask = transferPortalTask; } + + public void Deconstruct(out TenantManager tenantManager, + out BackupStorageFactory backupStorageFactory, + out NotifyHelper notifyHelper, + out BackupRepository backupRepository, + out BackupWorker backupWorker, + out BackupPortalTask backupPortalTask, + out RestorePortalTask restorePortalTask, + out TransferPortalTask transferPortalTask) + { + tenantManager = TenantManager; + backupStorageFactory = BackupStorageFactory; + notifyHelper = NotifyHelper; + backupRepository = BackupRepository; + backupWorker = BackupWorker; + backupPortalTask = BackupPortalTask; + restorePortalTask = RestorePortalTask; + transferPortalTask = TransferPortalTask; + } } public static class BackupWorkerExtension diff --git a/common/services/ASC.ElasticSearch/Service/Launcher.cs b/common/services/ASC.ElasticSearch/Service/Launcher.cs index e93a3899d6..e069073cbf 100644 --- a/common/services/ASC.ElasticSearch/Service/Launcher.cs +++ b/common/services/ASC.ElasticSearch/Service/Launcher.cs @@ -93,8 +93,8 @@ namespace ASC.ElasticSearch { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - - while (!scopeClass.FactoryIndexer.CheckState(false)) + (var factoryIndexer, var service) = scopeClass; + while (!factoryIndexer.CheckState(false)) { if (CancellationTokenSource.IsCancellationRequested) { @@ -104,7 +104,7 @@ namespace ASC.ElasticSearch await Task.Delay(10000); } - scopeClass.Service.Subscribe(); + service.Subscribe(); Timer = new Timer(_ => IndexAll(), null, TimeSpan.Zero, TimeSpan.Zero); }, CancellationTokenSource.Token, TaskCreationOptions.LongRunning); @@ -182,14 +182,20 @@ namespace ASC.ElasticSearch public class ServiceLauncherScope { - internal FactoryIndexer FactoryIndexer { get; } - internal Service.Service Service { get; } + private FactoryIndexer FactoryIndexer { get; } + private Service.Service Service { get; } public ServiceLauncherScope(FactoryIndexer factoryIndexer, Service.Service service) { FactoryIndexer = factoryIndexer; Service = service; } + + public void Deconstruct(out FactoryIndexer factoryIndexer, out Service.Service service) + { + factoryIndexer = FactoryIndexer; + service = Service; + } } public static class ServiceLauncherExtension diff --git a/common/services/ASC.ElasticSearch/Service/Service.cs b/common/services/ASC.ElasticSearch/Service/Service.cs index 54614202de..5cbbcfecbd 100644 --- a/common/services/ASC.ElasticSearch/Service/Service.cs +++ b/common/services/ASC.ElasticSearch/Service/Service.cs @@ -88,8 +88,9 @@ namespace ASC.ElasticSearch.Service using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - scopeClass.TenantManager.SetCurrentTenant(tenant); - scopeClass.SettingsManager.ClearCache(); + (var tenantManager, var settingsManager) = scopeClass; + tenantManager.SetCurrentTenant(tenant); + settingsManager.ClearCache(); }); } //public State GetState() @@ -104,13 +105,19 @@ namespace ASC.ElasticSearch.Service public class ServiceScope { - internal TenantManager TenantManager { get; } - internal SettingsManager SettingsManager { get; } + private TenantManager TenantManager { get; } + private SettingsManager SettingsManager { get; } public ServiceScope(TenantManager tenantManager, SettingsManager settingsManager) { TenantManager = tenantManager; SettingsManager = settingsManager; } + + public void Deconstruct(out TenantManager tenantManager, out SettingsManager settingsManager) + { + tenantManager = TenantManager; + settingsManager = SettingsManager; + } } } diff --git a/common/services/ASC.Feed.Aggregator/Service/FeedAggregatorService.cs b/common/services/ASC.Feed.Aggregator/Service/FeedAggregatorService.cs index 8cba63d3b6..08e450bfbf 100644 --- a/common/services/ASC.Feed.Aggregator/Service/FeedAggregatorService.cs +++ b/common/services/ASC.Feed.Aggregator/Service/FeedAggregatorService.cs @@ -122,7 +122,8 @@ namespace ASC.Feed.Aggregator var cfg = FeedSettings.GetInstance(Configuration); using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - scopeClass.BaseCommonLinkUtility.Initialize(cfg.ServerRoot); + (var baseCommonLinkUtility, var tenantManager, var feedAggregateDataProvider, var userManager, var securityContext, var authManager) = scopeClass; + baseCommonLinkUtility.Initialize(cfg.ServerRoot); var start = DateTime.UtcNow; Log.DebugFormat("Start of collecting feeds..."); @@ -134,7 +135,7 @@ namespace ASC.Feed.Aggregator foreach (var module in modules) { var result = new List(); - var fromTime = scopeClass.FeedAggregateDataProvider.GetLastTimeAggregate(module.GetType().Name); + var fromTime = feedAggregateDataProvider.GetLastTimeAggregate(module.GetType().Name); if (fromTime == default) fromTime = DateTime.UtcNow.Subtract((TimeSpan)interval); var toTime = DateTime.UtcNow; @@ -152,13 +153,13 @@ namespace ASC.Feed.Aggregator try { - if (scopeClass.TenantManager.GetTenant(tenant) == null) + if (tenantManager.GetTenant(tenant) == null) { continue; } - scopeClass.TenantManager.SetCurrentTenant(tenant); - var users = scopeClass.UserManager.GetUsers(); + tenantManager.SetCurrentTenant(tenant); + var users = userManager.GetUsers(); var feeds = Attempt(10, () => module.GetFeeds(new FeedFilter(fromTime, toTime) { Tenant = tenant }).Where(r => r.Item1 != null).ToList()); Log.DebugFormat("{0} feeds in {1} tenant.", feeds.Count, tenant); @@ -179,7 +180,7 @@ namespace ASC.Feed.Aggregator { return; } - if (!TryAuthenticate(scopeClass.SecurityContext, scopeClass.AuthManager, tenant1, u.ID)) + if (!TryAuthenticate(securityContext, authManager, tenant1, u.ID)) { continue; } @@ -195,7 +196,7 @@ namespace ASC.Feed.Aggregator } } - scopeClass.FeedAggregateDataProvider.SaveFeeds(result, module.GetType().Name, toTime); + feedAggregateDataProvider.SaveFeeds(result, module.GetType().Name, toTime); foreach (var res in result) { @@ -289,12 +290,12 @@ namespace ASC.Feed.Aggregator public class FeedAggregatorServiceScope { - internal BaseCommonLinkUtility BaseCommonLinkUtility { get; } - internal TenantManager TenantManager { get; } - internal FeedAggregateDataProvider FeedAggregateDataProvider { get; } - internal UserManager UserManager { get; } - internal SecurityContext SecurityContext { get; } - internal AuthManager AuthManager { get; } + private BaseCommonLinkUtility BaseCommonLinkUtility { get; } + private TenantManager TenantManager { get; } + private FeedAggregateDataProvider FeedAggregateDataProvider { get; } + private UserManager UserManager { get; } + private SecurityContext SecurityContext { get; } + private AuthManager AuthManager { get; } public FeedAggregatorServiceScope(BaseCommonLinkUtility baseCommonLinkUtility, TenantManager tenantManager, @@ -310,7 +311,22 @@ namespace ASC.Feed.Aggregator SecurityContext = securityContext; AuthManager = authManager; } + + public void Deconstruct(out BaseCommonLinkUtility baseCommonLinkUtility, + out TenantManager tenantManager, + out FeedAggregateDataProvider feedAggregateDataProvider, + out UserManager userManager, + out SecurityContext securityContext, + out AuthManager authManager) + { + baseCommonLinkUtility = BaseCommonLinkUtility; + tenantManager = TenantManager; + feedAggregateDataProvider = FeedAggregateDataProvider; + userManager = UserManager; + securityContext = SecurityContext; + authManager = AuthManager; } + } public static class FeedAggregatorServiceExtension { diff --git a/common/services/ASC.Notify/NotifyService.cs b/common/services/ASC.Notify/NotifyService.cs index d333ed77b4..c23103fa16 100644 --- a/common/services/ASC.Notify/NotifyService.cs +++ b/common/services/ASC.Notify/NotifyService.cs @@ -100,8 +100,9 @@ namespace ASC.Notify using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - scopeClass.TenantManager.SetCurrentTenant(tenant); - scopeClass.TenantWhiteLabelSettingsHelper.Apply(scopeClass.SettingsManager.Load(), tenant); + (var tenantManager, var tenantWhiteLabelSettingsHelper, var settingsManager) = scopeClass; + tenantManager.SetCurrentTenant(tenant); + tenantWhiteLabelSettingsHelper.Apply(settingsManager.Load(), tenant); methodInfo.Invoke(instance, parameters); } @@ -113,9 +114,9 @@ namespace ASC.Notify public class NotifyServiceScope { - internal TenantManager TenantManager { get; } - internal TenantWhiteLabelSettingsHelper TenantWhiteLabelSettingsHelper { get; } - internal SettingsManager SettingsManager { get; } + private TenantManager TenantManager { get; } + private TenantWhiteLabelSettingsHelper TenantWhiteLabelSettingsHelper { get; } + private SettingsManager SettingsManager { get; } public NotifyServiceScope(TenantManager tenantManager, TenantWhiteLabelSettingsHelper tenantWhiteLabelSettingsHelper, SettingsManager settingsManager) { @@ -123,6 +124,13 @@ namespace ASC.Notify TenantWhiteLabelSettingsHelper = tenantWhiteLabelSettingsHelper; SettingsManager = settingsManager; } + + public void Deconstruct(out TenantManager tenantManager, out TenantWhiteLabelSettingsHelper tenantWhiteLabelSettingsHelper, out SettingsManager settingsManager) + { + tenantManager = TenantManager; + tenantWhiteLabelSettingsHelper = TenantWhiteLabelSettingsHelper; + settingsManager = SettingsManager; + } } public static class NotifyServiceExtension diff --git a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs index 158e4156a6..d88dc0fd89 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs @@ -130,12 +130,13 @@ namespace ASC.Files.Thirdparty.ProviderDao { var fromSelector = GetSelector(fromFileId); using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); - scopeClass.TenantManager.SetCurrentTenant(TenantID); + var scopeClass = scope.ServiceProvider.GetService(); + (var tenantManager, var folderDao, var fileDao) = scopeClass; + tenantManager.SetCurrentTenant(TenantID); return CrossDao.PerformCrossDaoFileCopy( fromFileId, fromSelector.GetFileDao(fromFileId), fromSelector.ConvertId, - toFolderId, scopeClass.FileDao, r => r, + toFolderId, fileDao, r => r, deleteSourceFile); } @@ -154,11 +155,11 @@ namespace ASC.Files.Thirdparty.ProviderDao { var fromSelector = GetSelector(fromFolderId); using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); - + var scopeClass = scope.ServiceProvider.GetService(); + (var tenantManager, var folderDao, var fileDao) = scopeClass; return CrossDao.PerformCrossDaoFolderCopy( fromFolderId, fromSelector.GetFolderDao(fromFolderId), fromSelector.GetFileDao(fromFolderId), fromSelector.ConvertId, - toRootFolderId, scopeClass.FolderDao, scopeClass.FileDao, r => r, + toRootFolderId, folderDao, fileDao, r => r, deleteSourceFolder, cancellationToken); } @@ -168,27 +169,34 @@ namespace ASC.Files.Thirdparty.ProviderDao } } - public class CrossDaoScope + public class ProviderDaoBaseScope { - internal TenantManager TenantManager { get; } - internal IFolderDao FolderDao { get; } - internal IFileDao FileDao { get; } + private TenantManager TenantManager { get; } + private IFolderDao FolderDao { get; } + private IFileDao FileDao { get; } - public CrossDaoScope(TenantManager tenantManager, IFolderDao folderDao, IFileDao fileDao) + public ProviderDaoBaseScope(TenantManager tenantManager, IFolderDao folderDao, IFileDao fileDao) { TenantManager = tenantManager; FolderDao = folderDao; FileDao = fileDao; } + + public void Deconstruct(out TenantManager tenantManager, out IFolderDao folderDao, out IFileDao fileDao) + { + tenantManager = TenantManager; + folderDao = FolderDao; + fileDao = FileDao; + } } public static class ProviderDaoBaseExtention { public static DIHelper AddProviderDaoBaseService(this DIHelper services) { - if (services.TryAddScoped()) + if (services.TryAddScoped())//here { - services.TryAddScoped(); + services.TryAddScoped(); return services .AddSharpBoxDaoSelectorService() .AddSharePointSelectorService() diff --git a/products/ASC.Files/Core/Services/DocumentService/DocbuilderReportsUtility.cs b/products/ASC.Files/Core/Services/DocumentService/DocbuilderReportsUtility.cs index b86974e360..1727c019be 100644 --- a/products/ASC.Files/Core/Services/DocumentService/DocbuilderReportsUtility.cs +++ b/products/ASC.Files/Core/Services/DocumentService/DocbuilderReportsUtility.cs @@ -155,10 +155,11 @@ namespace ASC.Web.Files.Services.DocumentService { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - var logger = scopeClass.Options.CurrentValue; + (var options, var tenantManager, var authContext, var securityContext, var documentServiceConnector) = scopeClass; + var logger = options.CurrentValue; try { - scopeClass.TenantManager.SetCurrentTenant(TenantId); + tenantManager.SetCurrentTenant(TenantId); Status = ReportStatus.Started; PublishTaskInfo(logger); @@ -170,10 +171,10 @@ namespace ASC.Web.Files.Services.DocumentService // new HttpResponse(new System.IO.StringWriter())); //} - scopeClass.TenantManager.SetCurrentTenant(TenantId); - scopeClass.SecurityContext.AuthenticateMe(UserId); + tenantManager.SetCurrentTenant(TenantId); + securityContext.AuthenticateMe(UserId); - BuilderKey = scopeClass.DocumentServiceConnector.DocbuilderRequest(null, Script, true, out var urls); + BuilderKey = documentServiceConnector.DocbuilderRequest(null, Script, true, out var urls); while (true) { @@ -183,7 +184,7 @@ namespace ASC.Web.Files.Services.DocumentService } Task.Delay(1500, cancellationToken).Wait(cancellationToken); - var builderKey = scopeClass.DocumentServiceConnector.DocbuilderRequest(BuilderKey, null, true, out urls); + var builderKey = documentServiceConnector.DocbuilderRequest(BuilderKey, null, true, out urls); if (builderKey == null) throw new NullReferenceException(); @@ -360,11 +361,11 @@ namespace ASC.Web.Files.Services.DocumentService public class ReportStateScope { - internal IOptionsMonitor Options { get; } - internal TenantManager TenantManager { get; } - internal AuthContext AuthContext { get; } - internal SecurityContext SecurityContext { get; } - internal DocumentServiceConnector DocumentServiceConnector { get; } + private IOptionsMonitor Options { get; } + private TenantManager TenantManager { get; } + private AuthContext AuthContext { get; } + private SecurityContext SecurityContext { get; } + private DocumentServiceConnector DocumentServiceConnector { get; } public ReportStateScope( IOptionsMonitor options, @@ -379,5 +380,18 @@ namespace ASC.Web.Files.Services.DocumentService SecurityContext = securityContext; DocumentServiceConnector = documentServiceConnector; } + + public void Deconstruct(out IOptionsMonitor optionsMonitor, + out TenantManager tenantManager, + out AuthContext authContext, + out SecurityContext securityContext, + out DocumentServiceConnector documentServiceConnector) + { + optionsMonitor = Options; + tenantManager = TenantManager; + authContext = AuthContext; + securityContext = SecurityContext; + documentServiceConnector = DocumentServiceConnector; + } } } diff --git a/products/ASC.Files/Core/Services/NotifyService/NotifyClient.cs b/products/ASC.Files/Core/Services/NotifyService/NotifyClient.cs index 492c546baf..8c0cad2b4e 100644 --- a/products/ASC.Files/Core/Services/NotifyService/NotifyClient.cs +++ b/products/ASC.Files/Core/Services/NotifyService/NotifyClient.cs @@ -56,16 +56,16 @@ namespace ASC.Web.Files.Services.NotifyService { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.NotifySource, scope); - - var recipient = scopeClass.NotifySource.GetRecipientsProvider().GetRecipient(scopeClass.SecurityContext.CurrentAccount.ID.ToString()); + (var notifySource, var securityContext, var filesLinkUtility, var fileUtility, var baseCommonLinkUtility, var daoFactory, var pathProvider, var userManager, var tenantManager) = scopeClass; + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(notifySource, scope); + var recipient = notifySource.GetRecipientsProvider().GetRecipient(securityContext.CurrentAccount.ID.ToString()); client.SendNoticeAsync( NotifyConstants.Event_DocuSignComplete, file.UniqID, recipient, true, - new TagValue(NotifyConstants.Tag_DocumentUrl, scopeClass.BaseCommonLinkUtility.GetFullAbsolutePath(scopeClass.FilesLinkUtility.GetFileWebPreviewUrl(scopeClass.FileUtility, file.Title, file.ID))), + new TagValue(NotifyConstants.Tag_DocumentUrl, baseCommonLinkUtility.GetFullAbsolutePath(filesLinkUtility.GetFileWebPreviewUrl(fileUtility, file.Title, file.ID))), new TagValue(NotifyConstants.Tag_DocumentTitle, file.Title), new TagValue(NotifyConstants.Tag_Message, sourceTitle) ); @@ -75,9 +75,10 @@ namespace ASC.Web.Files.Services.NotifyService { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.NotifySource, scope); + (var notifySource, var securityContext, var filesLinkUtility, var fileUtility, var baseCommonLinkUtility, var daoFactory, var pathProvider, var userManager, var tenantManager) = scopeClass; + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(notifySource, scope); - var recipient = scopeClass.NotifySource.GetRecipientsProvider().GetRecipient(scopeClass.SecurityContext.CurrentAccount.ID.ToString()); + var recipient = notifySource.GetRecipientsProvider().GetRecipient(securityContext.CurrentAccount.ID.ToString()); client.SendNoticeAsync( NotifyConstants.Event_DocuSignStatus, @@ -113,22 +114,23 @@ namespace ASC.Web.Files.Services.NotifyService using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.NotifySource, scope); + (var notifySource, var securityContext, var filesLinkUtility, var fileUtility, var baseCommonLinkUtility, var daoFactory, var pathProvider, var userManager, var tenantManager) = scopeClass; + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(notifySource, scope); - var folderDao = scopeClass.DaoFactory.GetFolderDao(); + var folderDao = daoFactory.GetFolderDao(); if (fileEntry.FileEntryType == FileEntryType.File && folderDao.GetFolder(((File)fileEntry).FolderID) == null) return; var url = fileEntry.FileEntryType == FileEntryType.File - ? scopeClass.FilesLinkUtility.GetFileWebPreviewUrl(scopeClass.FileUtility, fileEntry.Title, fileEntry.ID) - : scopeClass.PathProvider.GetFolderUrl(((Folder)fileEntry)); + ? filesLinkUtility.GetFileWebPreviewUrl(fileUtility, fileEntry.Title, fileEntry.ID) + : pathProvider.GetFolderUrl(((Folder)fileEntry)); - var recipientsProvider = scopeClass.NotifySource.GetRecipientsProvider(); + var recipientsProvider = notifySource.GetRecipientsProvider(); foreach (var recipientPair in recipients) { - var u = scopeClass.UserManager.GetUsers(recipientPair.Key); + var u = userManager.GetUsers(recipientPair.Key); var culture = string.IsNullOrEmpty(u.CultureName) - ? scopeClass.TenantManager.GetCurrentTenant().GetCulture() + ? tenantManager.GetCurrentTenant().GetCulture() : CultureInfo.GetCultureInfo(u.CultureName); var aceString = GetAccessString(recipientPair.Value, culture); @@ -141,7 +143,7 @@ namespace ASC.Web.Files.Services.NotifyService true, new TagValue(NotifyConstants.Tag_DocumentTitle, fileEntry.Title), new TagValue(NotifyConstants.Tag_FolderID, fileEntry.ID), - new TagValue(NotifyConstants.Tag_DocumentUrl, scopeClass.BaseCommonLinkUtility.GetFullAbsolutePath(url)), + new TagValue(NotifyConstants.Tag_DocumentUrl, baseCommonLinkUtility.GetFullAbsolutePath(url)), new TagValue(NotifyConstants.Tag_AccessRights, aceString), new TagValue(NotifyConstants.Tag_Message, message.HtmlEncode()) ); @@ -154,13 +156,14 @@ namespace ASC.Web.Files.Services.NotifyService using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.NotifySource, scope); + (var notifySource, var securityContext, var filesLinkUtility, var fileUtility, var baseCommonLinkUtility, var daoFactory, var pathProvider, var userManager, var tenantManager) = scopeClass; + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(notifySource, scope); - var recipientsProvider = scopeClass.NotifySource.GetRecipientsProvider(); + var recipientsProvider = notifySource.GetRecipientsProvider(); foreach (var recipientId in recipientIds) { - var u = scopeClass.UserManager.GetUsers(recipientId); + var u = userManager.GetUsers(recipientId); var recipient = recipientsProvider.GetRecipient(u.ID.ToString()); @@ -170,7 +173,7 @@ namespace ASC.Web.Files.Services.NotifyService recipient, true, new TagValue(NotifyConstants.Tag_DocumentTitle, file.Title), - new TagValue(NotifyConstants.Tag_DocumentUrl, scopeClass.BaseCommonLinkUtility.GetFullAbsolutePath(documentUrl)), + new TagValue(NotifyConstants.Tag_DocumentUrl, baseCommonLinkUtility.GetFullAbsolutePath(documentUrl)), new TagValue(NotifyConstants.Tag_Message, message.HtmlEncode()) ); } @@ -198,15 +201,15 @@ namespace ASC.Web.Files.Services.NotifyService public class NotifyClientScope { - internal NotifySource NotifySource { get; } - internal SecurityContext SecurityContext { get; } - internal FilesLinkUtility FilesLinkUtility { get; } - internal FileUtility FileUtility { get; } - internal BaseCommonLinkUtility BaseCommonLinkUtility { get; } - internal IDaoFactory DaoFactory { get; } - internal PathProvider PathProvider { get; } - internal UserManager UserManager { get; } - internal TenantManager TenantManager { get; } + private NotifySource NotifySource { get; } + private SecurityContext SecurityContext { get; } + private FilesLinkUtility FilesLinkUtility { get; } + private FileUtility FileUtility { get; } + private BaseCommonLinkUtility BaseCommonLinkUtility { get; } + private IDaoFactory DaoFactory { get; } + private PathProvider PathProvider { get; } + private UserManager UserManager { get; } + private TenantManager TenantManager { get; } public NotifyClientScope(NotifySource notifySource, SecurityContext securityContext, @@ -228,6 +231,27 @@ namespace ASC.Web.Files.Services.NotifyService UserManager = userManager; TenantManager = tenantManager; } + + public void Deconstruct(out NotifySource notifySource, + out SecurityContext securityContext, + out FilesLinkUtility filesLinkUtility, + out FileUtility fileUtility, + out BaseCommonLinkUtility baseCommonLinkUtility, + out IDaoFactory daoFactory, + out PathProvider pathProvider, + out UserManager userManager, + out TenantManager tenantManager ) + { + notifySource = NotifySource; + securityContext = SecurityContext; + filesLinkUtility = FilesLinkUtility; + fileUtility = FileUtility; + baseCommonLinkUtility = BaseCommonLinkUtility; + daoFactory = DaoFactory; + pathProvider = PathProvider; + userManager = UserManager; + tenantManager = TenantManager; + } } public static class NotifyClientExtension diff --git a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDeleteOperation.cs b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDeleteOperation.cs index 0f1ab386c9..c09eddee03 100644 --- a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDeleteOperation.cs +++ b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDeleteOperation.cs @@ -124,7 +124,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations private void DeleteFolders(IEnumerable folderIds, IServiceScope scope) { var scopeClass = scope.ServiceProvider.GetService(); - + (var fileMarker, var filesMessageService) = scopeClass; foreach (var folderId in folderIds) { CancellationToken.ThrowIfCancellationRequested(); @@ -149,13 +149,13 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations { canCalculate = FolderDao.CanCalculateSubitems(folderId) ? default : folderId; - scopeClass.FileMarker.RemoveMarkAsNewForAll(folder); + fileMarker.RemoveMarkAsNewForAll(folder); if (folder.ProviderEntry && folder.ID.Equals(folder.RootFolderId)) { if (ProviderDao != null) { ProviderDao.RemoveProviderInfo(folder.ProviderId); - scopeClass.FilesMessageService.Send(folder, _headers, MessageAction.ThirdPartyDeleted, folder.ID.ToString(), folder.ProviderKey); + filesMessageService.Send(folder, _headers, MessageAction.ThirdPartyDeleted, folder.ID.ToString(), folder.ProviderKey); } ProcessedFolder(folderId); @@ -171,7 +171,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations if (FolderDao.IsEmpty(folder.ID)) { FolderDao.DeleteFolder(folder.ID); - scopeClass.FilesMessageService.Send(folder, _headers, MessageAction.FolderDeleted, folder.Title); + filesMessageService.Send(folder, _headers, MessageAction.FolderDeleted, folder.Title); ProcessedFolder(folderId); } @@ -188,12 +188,12 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations if (immediately) { FolderDao.DeleteFolder(folder.ID); - scopeClass.FilesMessageService.Send(folder, _headers, MessageAction.FolderDeleted, folder.Title); + filesMessageService.Send(folder, _headers, MessageAction.FolderDeleted, folder.Title); } else { FolderDao.MoveFolder(folder.ID, _trashId, CancellationToken); - scopeClass.FilesMessageService.Send(folder, _headers, MessageAction.FolderMovedToTrash, folder.Title); + filesMessageService.Send(folder, _headers, MessageAction.FolderMovedToTrash, folder.Title); } ProcessedFolder(folderId); @@ -208,7 +208,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations private void DeleteFiles(IEnumerable fileIds, IServiceScope scope) { var scopeClass = scope.ServiceProvider.GetService(); - + (var fileMarker, var filesMessageService) = scopeClass; foreach (var fileId in fileIds) { CancellationToken.ThrowIfCancellationRequested(); @@ -224,18 +224,18 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations } else { - scopeClass.FileMarker.RemoveMarkAsNewForAll(file); + fileMarker.RemoveMarkAsNewForAll(file); if (!_immediately && FileDao.UseTrashForRemove(file)) { FileDao.MoveFile(file.ID, _trashId); - scopeClass.FilesMessageService.Send(file, _headers, MessageAction.FileMovedToTrash, file.Title); + filesMessageService.Send(file, _headers, MessageAction.FileMovedToTrash, file.Title); } else { try { FileDao.DeleteFile(file.ID); - scopeClass.FilesMessageService.Send(file, _headers, MessageAction.FileDeleted, file.Title); + filesMessageService.Send(file, _headers, MessageAction.FileDeleted, file.Title); } catch (Exception ex) { @@ -278,13 +278,19 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations public class FileDeleteOperationScope { - internal FileMarker FileMarker { get; } - internal FilesMessageService FilesMessageService { get; } + private FileMarker FileMarker { get; } + private FilesMessageService FilesMessageService { get; } public FileDeleteOperationScope(FileMarker fileMarker, FilesMessageService filesMessageService) { FileMarker = fileMarker; FilesMessageService = filesMessageService; } + + public void Deconstruct(out FileMarker fileMarker, out FilesMessageService filesMessageService) + { + fileMarker = FileMarker; + filesMessageService = FilesMessageService; + } } } \ No newline at end of file diff --git a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDownloadOperation.cs b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDownloadOperation.cs index 386310a496..f5050a715c 100644 --- a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDownloadOperation.cs +++ b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDownloadOperation.cs @@ -82,7 +82,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations using var scope = ThirdPartyOperation.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - + (var globalStore, var filesLinkUtility, var setupInfo, var fileConverter, var filesMessageService) = scopeClass; using var stream = TempStream.Create(); using (var zip = new ZipOutputStream(stream, true) { @@ -99,14 +99,14 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations { stream.Position = 0; const string fileName = FileConstant.DownloadTitle + ".zip"; - var store = scopeClass.GlobalStore.GetStore(); + var store = globalStore.GetStore(); store.Save( FileConstant.StorageDomainTmp, string.Format(@"{0}\{1}", ((IAccount)Thread.CurrentPrincipal.Identity).ID, fileName), stream, "application/zip", "attachment; filename=\"" + fileName + "\""); - Status = string.Format("{0}?{1}=bulk", scopeClass.FilesLinkUtility.FileHandlerPath, FilesLinkUtility.Action); + Status = string.Format("{0}?{1}=bulk", filesLinkUtility.FileHandlerPath, FilesLinkUtility.Action); } FillDistributedTask(); @@ -150,7 +150,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations } var scopeClass = scope.ServiceProvider.GetService(); - + (var globalStore, var filesLinkUtility, var setupInfo, var fileConverter, var filesMessageService) = scopeClass; ReplaceLongPath(entriesPathId); if (Compress) @@ -169,14 +169,14 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations { stream.Position = 0; const string fileName = FileConstant.DownloadTitle + ".zip"; - var store = scopeClass.GlobalStore.GetStore(); + var store = globalStore.GetStore(); store.Save( FileConstant.StorageDomainTmp, string.Format(@"{0}\{1}", ((IAccount)Thread.CurrentPrincipal.Identity).ID, fileName), stream, "application/zip", "attachment; filename=\"" + fileName + "\""); - Status = string.Format("{0}?{1}=bulk", scopeClass.FilesLinkUtility.FileHandlerPath, FilesLinkUtility.Action); + Status = string.Format("{0}?{1}=bulk", filesLinkUtility.FileHandlerPath, FilesLinkUtility.Action); } } } @@ -263,6 +263,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations { if (entriesPathId == null) return; var scopeClass = scope.ServiceProvider.GetService(); + (var globalStore, var filesLinkUtility, var setupInfo, var fileConverter, var filesMessageService) = scopeClass; var FileDao = scope.ServiceProvider.GetService>(); foreach (var path in entriesPathId.AllKeys) @@ -293,9 +294,9 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations continue; } - if (file.ContentLength > scopeClass.SetupInfo.AvailableFileSize) + if (file.ContentLength > setupInfo.AvailableFileSize) { - Error = string.Format(FilesCommonResource.ErrorMassage_FileSizeZip, FileSizeComment.FilesSizeToString(scopeClass.SetupInfo.AvailableFileSize)); + Error = string.Format(FilesCommonResource.ErrorMassage_FileSizeZip, FileSizeComment.FilesSizeToString(setupInfo.AvailableFileSize)); continue; } @@ -329,25 +330,25 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations { try { - if (scopeClass.FileConverter.EnableConvert(file, convertToExt)) + if (fileConverter.EnableConvert(file, convertToExt)) { //Take from converter - using var readStream = scopeClass.FileConverter.Exec(file, convertToExt); + using var readStream = fileConverter.Exec(file, convertToExt); readStream.CopyTo(zip); if (!string.IsNullOrEmpty(convertToExt)) { - scopeClass.FilesMessageService.Send(file, headers, MessageAction.FileDownloadedAs, file.Title, convertToExt); + filesMessageService.Send(file, headers, MessageAction.FileDownloadedAs, file.Title, convertToExt); } else { - scopeClass.FilesMessageService.Send(file, headers, MessageAction.FileDownloaded, file.Title); + filesMessageService.Send(file, headers, MessageAction.FileDownloaded, file.Title); } } else { using var readStream = FileDao.GetFileStream(file); readStream.CopyTo(zip); - scopeClass.FilesMessageService.Send(file, headers, MessageAction.FileDownloaded, file.Title); + filesMessageService.Send(file, headers, MessageAction.FileDownloaded, file.Title); } } catch (Exception ex) @@ -437,11 +438,11 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations public class FileDownloadOperationScope { - internal GlobalStore GlobalStore { get; } - internal FilesLinkUtility FilesLinkUtility { get; } - internal SetupInfo SetupInfo { get; } - internal FileConverter FileConverter { get; } - internal FilesMessageService FilesMessageService { get; } + private GlobalStore GlobalStore { get; } + private FilesLinkUtility FilesLinkUtility { get; } + private SetupInfo SetupInfo { get; } + private FileConverter FileConverter { get; } + private FilesMessageService FilesMessageService { get; } public FileDownloadOperationScope(GlobalStore globalStore, FilesLinkUtility filesLinkUtility, SetupInfo setupInfo, FileConverter fileConverter, FilesMessageService filesMessageService) { @@ -451,6 +452,15 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations FileConverter = fileConverter; FilesMessageService = filesMessageService; } + + public void Deconstruct(out GlobalStore globalStore, out FilesLinkUtility filesLinkUtility, out SetupInfo setupInfo, out FileConverter fileConverter, out FilesMessageService filesMessageService) + { + globalStore = GlobalStore; + filesLinkUtility = FilesLinkUtility; + setupInfo = SetupInfo; + fileConverter = FileConverter; + filesMessageService = FilesMessageService; + } } } \ No newline at end of file diff --git a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMarkAsReadOperation.cs b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMarkAsReadOperation.cs index deab7a83bf..3387b48029 100644 --- a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMarkAsReadOperation.cs +++ b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMarkAsReadOperation.cs @@ -85,6 +85,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations protected override void Do(IServiceScope scope) { var scopeClass = scope.ServiceProvider.GetService(); + (var fileMarker, var globalFolder, var daoFactory) = scopeClass; var entries = new List>(); if (Folders.Any()) { @@ -98,7 +99,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations { CancellationToken.ThrowIfCancellationRequested(); - scopeClass.FileMarker.RemoveMarkAsNew(x, ((IAccount)Thread.CurrentPrincipal.Identity).ID); + fileMarker.RemoveMarkAsNew(x, ((IAccount)Thread.CurrentPrincipal.Identity).ID); if (x.FileEntryType == FileEntryType.File) { @@ -113,14 +114,14 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations var rootIds = new List { - scopeClass.GlobalFolder.GetFolderMy(scopeClass.FileMarker, scopeClass.DaoFactory), - scopeClass.GlobalFolder.GetFolderCommon(scopeClass.FileMarker, scopeClass.DaoFactory), - scopeClass.GlobalFolder.GetFolderShare(scopeClass.DaoFactory), - scopeClass.GlobalFolder.GetFolderProjects(scopeClass.DaoFactory), + globalFolder.GetFolderMy(fileMarker, daoFactory), + globalFolder.GetFolderCommon(fileMarker, daoFactory), + globalFolder.GetFolderShare(daoFactory), + globalFolder.GetFolderProjects(daoFactory), }; var newrootfolder = - rootIds.Select(r => new KeyValuePair(r, scopeClass.FileMarker.GetRootFoldersIdMarkedAsNew(r))) + rootIds.Select(r => new KeyValuePair(r, fileMarker.GetRootFoldersIdMarkedAsNew(r))) .Select(item => string.Format("new_{{\"key\"? \"{0}\", \"value\"? \"{1}\"}}", item.Key, item.Value)); Status += string.Join(SPLIT_CHAR, newrootfolder.ToArray()); @@ -129,9 +130,9 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations public class FileMarkAsReadOperationScope { - internal FileMarker FileMarker { get; } - internal GlobalFolder GlobalFolder { get; } - internal IDaoFactory DaoFactory { get; } + private FileMarker FileMarker { get; } + private GlobalFolder GlobalFolder { get; } + private IDaoFactory DaoFactory { get; } public FileMarkAsReadOperationScope(FileMarker fileMarker, GlobalFolder globalFolder, IDaoFactory daoFactory) { @@ -139,5 +140,12 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations GlobalFolder = globalFolder; DaoFactory = daoFactory; } + + public void Deconstruct(out FileMarker fileMarker, out GlobalFolder globalFolder, out IDaoFactory daoFactory) + { + fileMarker = FileMarker; + globalFolder = GlobalFolder; + daoFactory = DaoFactory; + } } } \ No newline at end of file diff --git a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs index fa0b2d5f17..7b20ec32bd 100644 --- a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs +++ b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs @@ -173,6 +173,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations if (folderIds.Count == 0) return needToMark; var scopeClass = scope.ServiceProvider.GetService(); + (var filesMessageService, var fileMarker, var fileUtility, var global, var entryManager) = scopeClass; var folderDao = scope.ServiceProvider.GetService>(); var toFolderId = toFolder.ID; @@ -212,7 +213,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations else { newFolder = FolderDao.CopyFolder(folder.ID, toFolderId, CancellationToken); - scopeClass.FilesMessageService.Send(newFolder, toFolder, _headers, MessageAction.FolderCopied, newFolder.Title, toFolder.Title); + filesMessageService.Send(newFolder, toFolder, _headers, MessageAction.FolderCopied, newFolder.Title, toFolder.Title); if (isToFolder) needToMark.Add(newFolder); @@ -253,7 +254,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations { newFolder = FolderDao.CopyFolder(folder.ID, toFolderId, CancellationToken); newFolderId = newFolder.ID; - scopeClass.FilesMessageService.Send(newFolder, toFolder, _headers, MessageAction.FolderCopiedWithOverwriting, newFolder.Title, toFolder.Title); + filesMessageService.Send(newFolder, toFolder, _headers, MessageAction.FolderCopiedWithOverwriting, newFolder.Title, toFolder.Title); if (isToFolder) needToMark.Add(newFolder); @@ -273,18 +274,18 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations } else { - scopeClass.FileMarker.RemoveMarkAsNewForAll(folder); + fileMarker.RemoveMarkAsNewForAll(folder); newFolderId = FolderDao.MoveFolder(folder.ID, toFolderId, CancellationToken); newFolder = folderDao.GetFolder(newFolderId); if (folder.RootFolderType != FolderType.USER) { - scopeClass.FilesMessageService.Send(folder, toFolder, _headers, MessageAction.FolderMovedWithOverwriting, folder.Title, toFolder.Title); + filesMessageService.Send(folder, toFolder, _headers, MessageAction.FolderMovedWithOverwriting, folder.Title, toFolder.Title); } else { - scopeClass.FilesMessageService.Send(newFolder, toFolder, _headers, MessageAction.FolderMovedWithOverwriting, folder.Title, toFolder.Title); + filesMessageService.Send(newFolder, toFolder, _headers, MessageAction.FolderMovedWithOverwriting, folder.Title, toFolder.Title); } if (isToFolder) @@ -310,18 +311,18 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations } else { - scopeClass.FileMarker.RemoveMarkAsNewForAll(folder); + fileMarker.RemoveMarkAsNewForAll(folder); var newFolderId = FolderDao.MoveFolder(folder.ID, toFolderId, CancellationToken); newFolder = folderDao.GetFolder(newFolderId); if (folder.RootFolderType != FolderType.USER) { - scopeClass.FilesMessageService.Send(folder, toFolder, _headers, MessageAction.FolderMoved, folder.Title, toFolder.Title); + filesMessageService.Send(folder, toFolder, _headers, MessageAction.FolderMoved, folder.Title, toFolder.Title); } else { - scopeClass.FilesMessageService.Send(newFolder, toFolder, _headers, MessageAction.FolderMoved, folder.Title, toFolder.Title); + filesMessageService.Send(newFolder, toFolder, _headers, MessageAction.FolderMoved, folder.Title, toFolder.Title); } if (isToFolder) @@ -354,6 +355,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations if (fileIds.Count == 0) return needToMark; var scopeClass = scope.ServiceProvider.GetService(); + (var filesMessageService, var fileMarker, var fileUtility, var global, var entryManager) = scopeClass; var fileDao = scope.ServiceProvider.GetService>(); var toFolderId = toFolder.ID; @@ -370,8 +372,8 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations { Error = FilesCommonResource.ErrorMassage_SecurityException_ReadFile; } - else if (scopeClass.Global.EnableUploadFilter - && !scopeClass.FileUtility.ExtsUploadable.Contains(FileUtility.GetFileExtension(file.Title))) + else if (global.EnableUploadFilter + && !fileUtility.ExtsUploadable.Contains(FileUtility.GetFileExtension(file.Title))) { Error = FilesCommonResource.ErrorMassage_NotSupportedFormat; } @@ -391,7 +393,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations try { newFile = FileDao.CopyFile(file.ID, toFolderId); //Stream copy will occur inside dao - scopeClass.FilesMessageService.Send(newFile, toFolder, _headers, MessageAction.FileCopied, newFile.Title, parentFolder.Title, toFolder.Title); + filesMessageService.Send(newFile, toFolder, _headers, MessageAction.FileCopied, newFile.Title, parentFolder.Title, toFolder.Title); if (Equals(newFile.FolderID.ToString(), DaoFolderId)) { @@ -420,18 +422,18 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations } else { - scopeClass.FileMarker.RemoveMarkAsNewForAll(file); + fileMarker.RemoveMarkAsNewForAll(file); var newFileId = FileDao.MoveFile(file.ID, toFolderId); newFile = fileDao.GetFile(newFileId); if (file.RootFolderType != FolderType.USER) { - scopeClass.FilesMessageService.Send(file, toFolder, _headers, MessageAction.FileMoved, file.Title, parentFolder.Title, toFolder.Title); + filesMessageService.Send(file, toFolder, _headers, MessageAction.FileMoved, file.Title, parentFolder.Title, toFolder.Title); } else { - scopeClass.FilesMessageService.Send(newFile, toFolder, _headers, MessageAction.FileMoved, file.Title, parentFolder.Title, toFolder.Title); + filesMessageService.Send(newFile, toFolder, _headers, MessageAction.FileMoved, file.Title, parentFolder.Title, toFolder.Title); } if (Equals(toFolderId.ToString(), DaoFolderId)) @@ -454,7 +456,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations { Error = FilesCommonResource.ErrorMassage_SecurityException; } - else if (scopeClass.EntryManager.FileLockedForMe(conflict.ID)) + else if (entryManager.FileLockedForMe(conflict.ID)) { Error = FilesCommonResource.ErrorMassage_LockedFile; } @@ -483,7 +485,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations if (copy) { - scopeClass.FilesMessageService.Send(newFile, toFolder, _headers, MessageAction.FileCopiedWithOverwriting, newFile.Title, parentFolder.Title, toFolder.Title); + filesMessageService.Send(newFile, toFolder, _headers, MessageAction.FileCopiedWithOverwriting, newFile.Title, parentFolder.Title, toFolder.Title); if (ProcessedFile(fileId)) { Status += string.Format("file_{0}{1}", newFile.ID, SPLIT_CHAR); @@ -510,11 +512,11 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations if (file.RootFolderType != FolderType.USER) { - scopeClass.FilesMessageService.Send(file, toFolder, _headers, MessageAction.FileMovedWithOverwriting, file.Title, parentFolder.Title, toFolder.Title); + filesMessageService.Send(file, toFolder, _headers, MessageAction.FileMovedWithOverwriting, file.Title, parentFolder.Title, toFolder.Title); } else { - scopeClass.FilesMessageService.Send(newFile, toFolder, _headers, MessageAction.FileMovedWithOverwriting, file.Title, parentFolder.Title, toFolder.Title); + filesMessageService.Send(newFile, toFolder, _headers, MessageAction.FileMovedWithOverwriting, file.Title, parentFolder.Title, toFolder.Title); } if (ProcessedFile(fileId)) @@ -572,11 +574,11 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations public class FileMoveCopyOperationScope { - internal FilesMessageService FilesMessageService { get; } - internal FileMarker FileMarker { get; } - internal FileUtility FileUtility { get; } - internal Global Global { get; } - internal EntryManager EntryManager { get; } + private FilesMessageService FilesMessageService { get; } + private FileMarker FileMarker { get; } + private FileUtility FileUtility { get; } + private Global Global { get; } + private EntryManager EntryManager { get; } public FileMoveCopyOperationScope(FilesMessageService filesMessageService, FileMarker fileMarker, FileUtility fileUtility, Global global, EntryManager entryManager) { @@ -586,5 +588,14 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations Global = global; EntryManager = entryManager; } + + public void Deconstruct(out FilesMessageService filesMessageService, out FileMarker fileMarker, out FileUtility fileUtility, out Global global, out EntryManager entryManager) + { + filesMessageService = FilesMessageService; + fileMarker = FileMarker; + fileUtility = FileUtility; + global = Global; + entryManager = EntryManager; + } } } \ No newline at end of file diff --git a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperation.cs b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperation.cs index 4028e604a7..8e02039ac9 100644 --- a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperation.cs +++ b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperation.cs @@ -285,20 +285,21 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - scopeClass.TenantManager.SetCurrentTenant(CurrentTenant); + (var tenantManager, var daoFactory, var fileSecurity, var options) = scopeClass; + tenantManager.SetCurrentTenant(CurrentTenant); Thread.CurrentPrincipal = principal; Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(culture); Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(culture); - FolderDao = scopeClass.DaoFactory.GetFolderDao(); - FileDao = scopeClass.DaoFactory.GetFileDao(); - TagDao = scopeClass.DaoFactory.GetTagDao(); - ProviderDao = scopeClass.DaoFactory.ProviderDao; - FilesSecurity = scopeClass.FileSecurity; + FolderDao = daoFactory.GetFolderDao(); + FileDao = daoFactory.GetFileDao(); + TagDao = daoFactory.GetTagDao(); + ProviderDao = daoFactory.ProviderDao; + FilesSecurity = fileSecurity; - Logger = scopeClass.Options.CurrentValue; + Logger = options.CurrentValue; Do(scope); } @@ -393,10 +394,10 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations public class FileOperationScope { - internal TenantManager TenantManager { get; } - internal IDaoFactory DaoFactory { get; } - internal FileSecurity FileSecurity { get; } - internal IOptionsMonitor Options { get; } + private TenantManager TenantManager { get; } + private IDaoFactory DaoFactory { get; } + private FileSecurity FileSecurity { get; } + private IOptionsMonitor Options { get; } public FileOperationScope(TenantManager tenantManager, IDaoFactory daoFactory, FileSecurity fileSecurity, IOptionsMonitor options) { @@ -405,5 +406,13 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations FileSecurity = fileSecurity; Options = options; } + + public void Deconstruct(out TenantManager tenantManager, out IDaoFactory daoFactory, out FileSecurity fileSecurity, out IOptionsMonitor optionsMonitor ) + { + tenantManager = TenantManager; + daoFactory = DaoFactory; + fileSecurity = FileSecurity; + optionsMonitor = Options; + } } } \ No newline at end of file diff --git a/products/ASC.Files/Core/Utils/FileConverter.cs b/products/ASC.Files/Core/Utils/FileConverter.cs index 0a2e076ba0..66f30093a6 100644 --- a/products/ASC.Files/Core/Utils/FileConverter.cs +++ b/products/ASC.Files/Core/Utils/FileConverter.cs @@ -144,8 +144,9 @@ namespace ASC.Web.Files.Utils if (Monitor.TryEnter(singleThread)) { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); - var logger = scopeClass.Options.CurrentValue; + var scopeClass = scope.ServiceProvider.GetService(); + (var options, var tenantManager, var userManager, var securityContext, var daoFactory, var fileSecurity, var pathProvider, var setupInfo, var fileUtility, var documentServiceHelper, var documentServiceConnector, var entryManager, var fileConverter) = scopeClass; + var logger = options.CurrentValue; try { @@ -211,33 +212,33 @@ namespace ASC.Web.Files.Utils cache.Insert(GetKey(file), operationResult, TimeSpan.FromMinutes(10)); } - scopeClass.TenantManager.SetCurrentTenant(tenantId); + tenantManager.SetCurrentTenant(tenantId); - scopeClass.SecurityContext.AuthenticateMe(account); + securityContext.AuthenticateMe(account); - var user = scopeClass.UserManager.GetUsers(account.ID); - var culture = string.IsNullOrEmpty(user.CultureName) ? scopeClass.TenantManager.GetCurrentTenant().GetCulture() : CultureInfo.GetCultureInfo(user.CultureName); + var user = userManager.GetUsers(account.ID); + var culture = string.IsNullOrEmpty(user.CultureName) ? tenantManager.GetCurrentTenant().GetCulture() : CultureInfo.GetCultureInfo(user.CultureName); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; - if (!scopeClass.FileSecurity.CanRead(file) && file.RootFolderType != FolderType.BUNCH) + if (!fileSecurity.CanRead(file) && file.RootFolderType != FolderType.BUNCH) { //No rights in CRM after upload before attach throw new SecurityException(FilesCommonResource.ErrorMassage_SecurityException_ReadFile); } - if (file.ContentLength > scopeClass.SetupInfo.AvailableFileSize) + if (file.ContentLength > setupInfo.AvailableFileSize) { - throw new Exception(string.Format(FilesCommonResource.ErrorMassage_FileSizeConvert, FileSizeComment.FilesSizeToString(scopeClass.SetupInfo.AvailableFileSize))); + throw new Exception(string.Format(FilesCommonResource.ErrorMassage_FileSizeConvert, FileSizeComment.FilesSizeToString(setupInfo.AvailableFileSize))); } - fileUri = scopeClass.PathProvider.GetFileStreamUrl(file); + fileUri = pathProvider.GetFileStreamUrl(file); - var toExtension = scopeClass.FileUtility.GetInternalExtension(file.Title); + var toExtension = fileUtility.GetInternalExtension(file.Title); var fileExtension = file.ConvertedExtension; - var docKey = scopeClass.DocumentServiceHelper.GetDocKey(file); + var docKey = documentServiceHelper.GetDocKey(file); - fileUri = scopeClass.DocumentServiceConnector.ReplaceCommunityAdress(fileUri); - operationResultProgress = scopeClass.DocumentServiceConnector.GetConvertedUri(fileUri, fileExtension, toExtension, docKey, password, true, out convertedFileUrl); + fileUri = documentServiceConnector.ReplaceCommunityAdress(fileUri); + operationResultProgress = documentServiceConnector.GetConvertedUri(fileUri, fileExtension, toExtension, docKey, password, true, out convertedFileUrl); } catch (Exception exception) { @@ -302,7 +303,7 @@ namespace ASC.Web.Files.Utils try { - newFile = scopeClass.FileConverter.SaveConvertedFile(file, convertedFileUrl); + newFile = fileConverter.SaveConvertedFile(file, convertedFileUrl); } catch (Exception e) { @@ -327,10 +328,10 @@ namespace ASC.Web.Files.Utils { if (newFile != null) { - var folderDao = scopeClass.DaoFactory.GetFolderDao(); + var folderDao = daoFactory.GetFolderDao(); var folder = folderDao.GetFolder(newFile.FolderID); - var folderTitle = scopeClass.FileSecurity.CanRead(folder) ? folder.Title : null; - operationResult.Result = FileJsonSerializer(scopeClass.EntryManager, newFile, folderTitle); + var folderTitle = fileSecurity.CanRead(folder) ? folder.Title : null; + operationResult.Result = FileJsonSerializer(entryManager, newFile, folderTitle); } operationResult.Progress = 100; @@ -399,23 +400,23 @@ namespace ASC.Web.Files.Utils }, options); } - class Scope + class FileConverterQueueScope { - internal IOptionsMonitor Options { get; } - internal TenantManager TenantManager { get; } - internal UserManager UserManager { get; } - internal SecurityContext SecurityContext { get; } - internal IDaoFactory DaoFactory { get; } - internal FileSecurity FileSecurity { get; } - internal PathProvider PathProvider { get; } - internal SetupInfo SetupInfo { get; } - internal FileUtility FileUtility { get; } - internal DocumentServiceHelper DocumentServiceHelper { get; } - internal DocumentServiceConnector DocumentServiceConnector { get; } - internal EntryManager EntryManager { get; } - internal FileConverter FileConverter { get; } + private IOptionsMonitor Options { get; } + private TenantManager TenantManager { get; } + private UserManager UserManager { get; } + private SecurityContext SecurityContext { get; } + private IDaoFactory DaoFactory { get; } + private FileSecurity FileSecurity { get; } + private PathProvider PathProvider { get; } + private SetupInfo SetupInfo { get; } + private FileUtility FileUtility { get; } + private DocumentServiceHelper DocumentServiceHelper { get; } + private DocumentServiceConnector DocumentServiceConnector { get; } + private EntryManager EntryManager { get; } + private FileConverter FileConverter { get; } - public Scope(IOptionsMonitor options, + public FileConverterQueueScope(IOptionsMonitor options, TenantManager tenantManager, UserManager userManager, SecurityContext securityContext, @@ -443,6 +444,37 @@ namespace ASC.Web.Files.Utils EntryManager = entryManager; FileConverter = fileConverter; } + + + public void Deconstruct(out IOptionsMonitor optionsMonitor, + out TenantManager tenantManager, + out UserManager userManager, + out SecurityContext securityContext, + out IDaoFactory daoFactory, + out FileSecurity fileSecurity, + out PathProvider pathProvider, + out SetupInfo setupInfo, + out FileUtility fileUtility, + out DocumentServiceHelper documentServiceHelper, + out DocumentServiceConnector documentServiceConnector, + out EntryManager entryManager, + out FileConverter fileConverter) + { + optionsMonitor = Options; + tenantManager = TenantManager; + userManager = UserManager; + securityContext = SecurityContext; + daoFactory = DaoFactory; + fileSecurity = FileSecurity; + pathProvider = PathProvider; + setupInfo = SetupInfo; + fileUtility = FileUtility; + documentServiceHelper = DocumentServiceHelper; + documentServiceConnector = DocumentServiceConnector; + entryManager = EntryManager; + fileConverter = FileConverter; + } + } } diff --git a/web/ASC.Web.Core/Notify/NotifyConfiguration.cs b/web/ASC.Web.Core/Notify/NotifyConfiguration.cs index b8a67dbeb4..b36c17584b 100644 --- a/web/ASC.Web.Core/Notify/NotifyConfiguration.cs +++ b/web/ASC.Web.Core/Notify/NotifyConfiguration.cs @@ -133,11 +133,12 @@ namespace ASC.Web.Studio.Core.Notify (r, p, scope) => { var scopeClass = scope.ServiceProvider.GetService(); + (var tenantManager, var webItemSecurity, var userManager, var options, var tenantExtra, var webItemManagerSecurity, var webItemManager, var configuration, var tenantLogoManager, var additionalWhiteLabelSettingsHelper, var tenantUtil, var coreBaseSettings, var commonLinkUtility, var settingsManager, var studioNotifyHelper) = scopeClass; try { // culture var u = Constants.LostUser; - var tenant = scopeClass.TenantManager.GetCurrentTenant(); + var tenant = tenantManager.GetCurrentTenant(); if (32 <= r.Recipient.ID.Length) { @@ -151,18 +152,18 @@ namespace ASC.Web.Studio.Core.Notify if (guid != default) { - u = scopeClass.UserManager.GetUsers(guid); + u = userManager.GetUsers(guid); } } if (Constants.LostUser.Equals(u)) { - u = scopeClass.UserManager.GetUserByEmail(r.Recipient.ID); + u = userManager.GetUserByEmail(r.Recipient.ID); } if (Constants.LostUser.Equals(u)) { - u = scopeClass.UserManager.GetUserByUserName(r.Recipient.ID); + u = userManager.GetUserByUserName(r.Recipient.ID); } if (!Constants.LostUser.Equals(u)) @@ -185,7 +186,7 @@ namespace ASC.Web.Studio.Core.Notify } if (productId != Guid.Empty && productId != new Guid("f4d98afdd336433287783c6945c81ea0") /* ignore people product */) { - return !scopeClass.WebItemSecurity.IsAvailableForUser(productId, u.ID); + return !webItemSecurity.IsAvailableForUser(productId, u.ID); } } @@ -199,7 +200,7 @@ namespace ASC.Web.Studio.Core.Notify } catch (Exception error) { - scopeClass.Options.CurrentValue.Error(error); + options.CurrentValue.Error(error); } return false; }); @@ -261,38 +262,39 @@ namespace ASC.Web.Studio.Core.Notify } using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - var log = scopeClass.Options.CurrentValue; + (var tenantManager, var webItemSecurity, var userMan, var options, var tenantExtra, var webItemManagerSecurity, var webItemManager, var configuration, var tenantLogoManager, var additionalWhiteLabelSettingsHelper, var tenantUtil, var coreBaseSettings, var commonLinkUtility, var settingsManager, var studioNotifyHelper) = scopeClass; + var log = options.CurrentValue; - scopeClass.CommonLinkUtility.GetLocationByRequest(out var product, out var module); + commonLinkUtility.GetLocationByRequest(out var product, out var module); if (product == null && CallContext.GetData("asc.web.product_id") != null) { - product = scopeClass.WebItemManager[(Guid)CallContext.GetData("asc.web.product_id")] as IProduct; + product = webItemManager[(Guid)CallContext.GetData("asc.web.product_id")] as IProduct; } var logoText = TenantWhiteLabelSettings.DefaultLogoText; - if ((scopeClass.TenantExtra.Enterprise || scopeClass.CoreBaseSettings.CustomMode) && !MailWhiteLabelSettings.IsDefault(scopeClass.SettingsManager, scopeClass.Configuration)) + if ((tenantExtra.Enterprise || coreBaseSettings.CustomMode) && !MailWhiteLabelSettings.IsDefault(settingsManager, configuration)) { - logoText = scopeClass.TenantLogoManager.GetLogoText(); + logoText = tenantLogoManager.GetLogoText(); } request.Arguments.Add(new TagValue(CommonTags.AuthorID, aid)); request.Arguments.Add(new TagValue(CommonTags.AuthorName, aname)); - request.Arguments.Add(new TagValue(CommonTags.AuthorUrl, scopeClass.CommonLinkUtility.GetFullAbsolutePath(scopeClass.CommonLinkUtility.GetUserProfile(aid)))); - request.Arguments.Add(new TagValue(CommonTags.VirtualRootPath, scopeClass.CommonLinkUtility.GetFullAbsolutePath("~").TrimEnd('/'))); + request.Arguments.Add(new TagValue(CommonTags.AuthorUrl, commonLinkUtility.GetFullAbsolutePath(commonLinkUtility.GetUserProfile(aid)))); + request.Arguments.Add(new TagValue(CommonTags.VirtualRootPath, commonLinkUtility.GetFullAbsolutePath("~").TrimEnd('/'))); request.Arguments.Add(new TagValue(CommonTags.ProductID, product != null ? product.ID : Guid.Empty)); request.Arguments.Add(new TagValue(CommonTags.ModuleID, module != null ? module.ID : Guid.Empty)); - request.Arguments.Add(new TagValue(CommonTags.ProductUrl, scopeClass.CommonLinkUtility.GetFullAbsolutePath(product != null ? product.StartURL : "~"))); - request.Arguments.Add(new TagValue(CommonTags.DateTime, scopeClass.TenantUtil.DateTimeNow())); + request.Arguments.Add(new TagValue(CommonTags.ProductUrl, commonLinkUtility.GetFullAbsolutePath(product != null ? product.StartURL : "~"))); + request.Arguments.Add(new TagValue(CommonTags.DateTime, tenantUtil.DateTimeNow())); request.Arguments.Add(new TagValue(CommonTags.RecipientID, Context.SYS_RECIPIENT_ID)); - request.Arguments.Add(new TagValue(CommonTags.ProfileUrl, scopeClass.CommonLinkUtility.GetFullAbsolutePath(scopeClass.CommonLinkUtility.GetMyStaff()))); - request.Arguments.Add(new TagValue(CommonTags.RecipientSubscriptionConfigURL, scopeClass.CommonLinkUtility.GetMyStaff())); - request.Arguments.Add(new TagValue(CommonTags.HelpLink, scopeClass.CommonLinkUtility.GetHelpLink(scopeClass.SettingsManager, scopeClass.AdditionalWhiteLabelSettingsHelper, false))); + request.Arguments.Add(new TagValue(CommonTags.ProfileUrl, commonLinkUtility.GetFullAbsolutePath(commonLinkUtility.GetMyStaff()))); + request.Arguments.Add(new TagValue(CommonTags.RecipientSubscriptionConfigURL, commonLinkUtility.GetMyStaff())); + request.Arguments.Add(new TagValue(CommonTags.HelpLink, commonLinkUtility.GetHelpLink(settingsManager, additionalWhiteLabelSettingsHelper, false))); request.Arguments.Add(new TagValue(CommonTags.LetterLogoText, logoText)); - request.Arguments.Add(new TagValue(CommonTags.MailWhiteLabelSettings, MailWhiteLabelSettings.Instance(scopeClass.SettingsManager))); + request.Arguments.Add(new TagValue(CommonTags.MailWhiteLabelSettings, MailWhiteLabelSettings.Instance(settingsManager))); request.Arguments.Add(new TagValue(CommonTags.SendFrom, tenant.Name)); - request.Arguments.Add(new TagValue(CommonTags.ImagePath, scopeClass.StudioNotifyHelper.GetNotificationImageUrl("").TrimEnd('/'))); + request.Arguments.Add(new TagValue(CommonTags.ImagePath, studioNotifyHelper.GetNotificationImageUrl("").TrimEnd('/'))); - AddLetterLogo(request, scopeClass.TenantExtra, scopeClass.TenantLogoManager, scopeClass.CoreBaseSettings, scopeClass.CommonLinkUtility, log); + AddLetterLogo(request, tenantExtra, tenantLogoManager, coreBaseSettings, commonLinkUtility, log); } private static void AddLetterLogo(NotifyRequest request, TenantExtra tenantExtra, TenantLogoManager tenantLogoManager, CoreBaseSettings coreBaseSettings, CommonLinkUtility commonLinkUtility, ILog Log) @@ -359,21 +361,21 @@ namespace ASC.Web.Studio.Core.Notify public class NotifyConfigurationScope { - internal TenantManager TenantManager { get; } - internal WebItemSecurity WebItemSecurity { get; } - internal UserManager UserManager { get; } - internal IOptionsMonitor Options { get; } - internal TenantExtra TenantExtra { get; } - internal WebItemManagerSecurity WebItemManagerSecurity { get; } - internal WebItemManager WebItemManager { get; } - internal IConfiguration Configuration { get; } - internal TenantLogoManager TenantLogoManager { get; } - internal AdditionalWhiteLabelSettingsHelper AdditionalWhiteLabelSettingsHelper { get; } - internal TenantUtil TenantUtil { get; } - internal CoreBaseSettings CoreBaseSettings { get; } - internal CommonLinkUtility CommonLinkUtility { get; } - internal SettingsManager SettingsManager { get; } - internal StudioNotifyHelper StudioNotifyHelper { get; } + private TenantManager TenantManager { get; } + private WebItemSecurity WebItemSecurity { get; } + private UserManager UserManager { get; } + private IOptionsMonitor Options { get; } + private TenantExtra TenantExtra { get; } + private WebItemManagerSecurity WebItemManagerSecurity { get; } + private WebItemManager WebItemManager { get; } + private IConfiguration Configuration { get; } + private TenantLogoManager TenantLogoManager { get; } + private AdditionalWhiteLabelSettingsHelper AdditionalWhiteLabelSettingsHelper { get; } + private TenantUtil TenantUtil { get; } + private CoreBaseSettings CoreBaseSettings { get; } + private CommonLinkUtility CommonLinkUtility { get; } + private SettingsManager SettingsManager { get; } + private StudioNotifyHelper StudioNotifyHelper { get; } public NotifyConfigurationScope(TenantManager tenantManager, WebItemSecurity webItemSecurity, @@ -408,6 +410,39 @@ namespace ASC.Web.Studio.Core.Notify SettingsManager = settingsManager; StudioNotifyHelper = studioNotifyHelper; } + + public void Deconstruct(out TenantManager tenantManager, + out WebItemSecurity webItemSecurity, + out UserManager userManager, + out IOptionsMonitor optionsMonitor, + out TenantExtra tenantExtra, + out WebItemManagerSecurity webItemManagerSecurity, + out WebItemManager webItemManager, + out IConfiguration configuration, + out TenantLogoManager tenantLogoManager, + out AdditionalWhiteLabelSettingsHelper additionalWhiteLabelSettingsHelper, + out TenantUtil tenantUtil, + out CoreBaseSettings coreBaseSettings, + out CommonLinkUtility commonLinkUtility, + out SettingsManager settingsManager, + out StudioNotifyHelper studioNotifyHelper) + { + tenantManager = TenantManager; + webItemSecurity = WebItemSecurity; + userManager = UserManager; + optionsMonitor = Options; + tenantExtra = TenantExtra; + webItemManagerSecurity = WebItemManagerSecurity; + webItemManager = WebItemManager; + configuration = Configuration; + tenantLogoManager = TenantLogoManager; + additionalWhiteLabelSettingsHelper = AdditionalWhiteLabelSettingsHelper; + tenantUtil = TenantUtil; + coreBaseSettings = CoreBaseSettings; + commonLinkUtility = CommonLinkUtility; + settingsManager = SettingsManager; + studioNotifyHelper = StudioNotifyHelper; + } } public static class NotifyConfigurationExtension diff --git a/web/ASC.Web.Core/Notify/StudioNotifyService.cs b/web/ASC.Web.Core/Notify/StudioNotifyService.cs index bf1c2a903c..5ed70c2bdf 100644 --- a/web/ASC.Web.Core/Notify/StudioNotifyService.cs +++ b/web/ASC.Web.Core/Notify/StudioNotifyService.cs @@ -829,7 +829,8 @@ namespace ASC.Web.Studio.Core.Notify { var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - scopeClass.TenantManager.SetCurrentTenant(tenant); + (var tenantManager, var studioNotifyServiceHelper) = scopeClass; + tenantManager.SetCurrentTenant(tenant); foreach (var u in users) { @@ -837,7 +838,7 @@ namespace ASC.Web.Studio.Core.Notify Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; - scopeClass.StudioNotifyServiceHelper.SendNoticeToAsync( + studioNotifyServiceHelper.SendNoticeToAsync( Actions.PortalRename, new[] { StudioNotifyHelper.ToRecipient(u.ID) }, new[] { EMailSenderName }, @@ -883,14 +884,20 @@ namespace ASC.Web.Studio.Core.Notify public class StudioNotifyServiceScope { - internal TenantManager TenantManager { get; } - internal StudioNotifyServiceHelper StudioNotifyServiceHelper { get; } + private TenantManager TenantManager { get; } + private StudioNotifyServiceHelper StudioNotifyServiceHelper { get; } public StudioNotifyServiceScope(TenantManager tenantManager, StudioNotifyServiceHelper studioNotifyServiceHelper) { TenantManager = tenantManager; StudioNotifyServiceHelper = studioNotifyServiceHelper; } + + public void Deconstruct(out TenantManager tenantManager, out StudioNotifyServiceHelper studioNotifyServiceHelper) + { + tenantManager = TenantManager; + studioNotifyServiceHelper = StudioNotifyServiceHelper; + } } public static class StudioNotifyServiceExtension diff --git a/web/ASC.Web.Core/Notify/StudioNotifyServiceSender.cs b/web/ASC.Web.Core/Notify/StudioNotifyServiceSender.cs index 66aa44ad87..d74bf74bc4 100644 --- a/web/ASC.Web.Core/Notify/StudioNotifyServiceSender.cs +++ b/web/ASC.Web.Core/Notify/StudioNotifyServiceSender.cs @@ -62,13 +62,13 @@ namespace ASC.Web.Studio.Core.Notify { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - - scopeClass.TenantManager.SetCurrentTenant(item.TenantId); + (var tenantManager, var userManager, var securityContext, var authContext, var studioNotifyHelper, var displayUserSettings, var tenantExtra, var coreBaseSettings) = scopeClass; + tenantManager.SetCurrentTenant(item.TenantId); CultureInfo culture = null; - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifyHelper.NotifySource, scope); + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(studioNotifyHelper.NotifySource, scope); - var tenant = scopeClass.TenantManager.GetCurrentTenant(false); + var tenant = tenantManager.GetCurrentTenant(false); if (tenant != null) { @@ -77,8 +77,8 @@ namespace ASC.Web.Studio.Core.Notify if (Guid.TryParse(item.UserId, out var userId) && !userId.Equals(Constants.Guest.ID) && !userId.Equals(Guid.Empty)) { - scopeClass.SecurityContext.AuthenticateMe(Guid.Parse(item.UserId)); - var user = scopeClass.UserManager.GetUsers(userId); + securityContext.AuthenticateMe(Guid.Parse(item.UserId)); + var user = userManager.GetUsers(userId); if (!string.IsNullOrEmpty(user.CultureName)) { culture = CultureInfo.GetCultureInfo(user.CultureName); @@ -109,20 +109,20 @@ namespace ASC.Web.Studio.Core.Notify using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - + (var tenantManager, var userManager, var securityContext, var authContext, var studioNotifyHelper, var displayUserSettings, var tenantExtra, var coreBaseSettings) = scopeClass; if (Configuration["core:notify:tariff"] != "false") { - if (scopeClass.TenantExtra.Enterprise) + if (tenantExtra.Enterprise) { WorkContext.RegisterSendMethod(SendEnterpriseTariffLetters, cron); } - else if (scopeClass.TenantExtra.Opensource) + else if (tenantExtra.Opensource) { WorkContext.RegisterSendMethod(SendOpensourceTariffLetters, cron); } - else if (scopeClass.TenantExtra.Saas) + else if (tenantExtra.Saas) { - if (scopeClass.CoreBaseSettings.Personal) + if (coreBaseSettings.Personal) { WorkContext.RegisterSendMethod(SendLettersPersonal, cron); } @@ -133,7 +133,7 @@ namespace ASC.Web.Studio.Core.Notify } } - if (!scopeClass.CoreBaseSettings.Personal) + if (!coreBaseSettings.Personal) { WorkContext.RegisterSendMethod(SendMsgWhatsNew, "0 0 * ? * *"); // every hour } @@ -173,14 +173,14 @@ namespace ASC.Web.Studio.Core.Notify public class StudioNotifyServiceSenderScope { - internal TenantManager TenantManager { get; } - internal UserManager UserManager { get; } - internal SecurityContext SecurityContext { get; } - internal AuthContext AuthContext { get; } - internal StudioNotifyHelper StudioNotifyHelper { get; } - internal DisplayUserSettings DisplayUserSettings { get; } - internal TenantExtra TenantExtra { get; } - internal CoreBaseSettings CoreBaseSettings { get; } + private TenantManager TenantManager { get; } + private UserManager UserManager { get; } + private SecurityContext SecurityContext { get; } + private AuthContext AuthContext { get; } + private StudioNotifyHelper StudioNotifyHelper { get; } + private DisplayUserSettings DisplayUserSettings { get; } + private TenantExtra TenantExtra { get; } + private CoreBaseSettings CoreBaseSettings { get; } public StudioNotifyServiceSenderScope(TenantManager tenantManager, UserManager userManager, @@ -200,6 +200,25 @@ namespace ASC.Web.Studio.Core.Notify TenantExtra = tenantExtra; CoreBaseSettings = coreBaseSettings; } + + public void Deconstruct(out TenantManager tenantManager, + out UserManager userManager, + out SecurityContext securityContext, + out AuthContext authContext, + out StudioNotifyHelper studioNotifyHelper, + out DisplayUserSettings displayUserSettings, + out TenantExtra tenantExtra, + out CoreBaseSettings coreBaseSettings) + { + tenantManager = TenantManager; + userManager = UserManager; + securityContext = SecurityContext; + authContext = AuthContext; + studioNotifyHelper = StudioNotifyHelper; + displayUserSettings = DisplayUserSettings; + tenantExtra = TenantExtra; + coreBaseSettings = CoreBaseSettings; + } } public static class ServiceLauncherExtension diff --git a/web/ASC.Web.Core/Notify/StudioPeriodicNotify.cs b/web/ASC.Web.Core/Notify/StudioPeriodicNotify.cs index 751b4690a3..45b0b1a689 100644 --- a/web/ASC.Web.Core/Notify/StudioPeriodicNotify.cs +++ b/web/ASC.Web.Core/Notify/StudioPeriodicNotify.cs @@ -94,12 +94,12 @@ namespace ASC.Web.Studio.Core.Notify { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); + (var tenantManager, var userManager, var studioNotifyHelper, var paymentManager, var tenantExtra, var authContext, var commonLinkUtility, var apiSystemHelper, var setupInfo, var dbContextManager, var couponManager, var configuration, var settingsManager, var coreBaseSettings, var displayUserSettingsHelper, var authManager, var securityContext) = scopeClass; + tenantManager.SetCurrentTenant(tenant.TenantId); + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(studioNotifyHelper.NotifySource, scope); - scopeClass.TenantManager.SetCurrentTenant(tenant.TenantId); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifyHelper.NotifySource, scope); - - var tariff = scopeClass.PaymentManager.GetTariff(tenant.TenantId); - var quota = scopeClass.TenantManager.GetTenantQuota(tenant.TenantId); + var tariff = paymentManager.GetTariff(tenant.TenantId); + var quota = tenantManager.GetTenantQuota(tenant.TenantId); var createdDate = tenant.CreatedDateTime.Date; var dueDateIsNotMax = tariff.DueDate != DateTime.MaxValue; @@ -176,14 +176,14 @@ namespace ASC.Web.Studio.Core.Notify #region 3 days after registration to admins SAAS TRIAL + only 1 user - if (createdDate.AddDays(3) == nowDate && scopeClass.UserManager.GetUsers().Count() == 1) + if (createdDate.AddDays(3) == nowDate && userManager.GetUsers().Count() == 1) { action = Actions.SaasAdminInviteTeammatesV10; paymentMessage = false; toadmins = true; greenButtonText = () => WebstudioNotifyPatternResource.ButtonInviteRightNow; - greenButtonUrl = string.Format("{0}/products/people/", scopeClass.CommonLinkUtility.GetFullAbsolutePath("~").TrimEnd('/')); + greenButtonUrl = string.Format("{0}/products/people/", commonLinkUtility.GetFullAbsolutePath("~").TrimEnd('/')); } #endregion @@ -195,8 +195,8 @@ namespace ASC.Web.Studio.Core.Notify List datesWithActivity; datesWithActivity = - scopeClass.DbContextManager.Get(dbid).FeedAggregates - .Where(r => r.Tenant == scopeClass.TenantManager.GetCurrentTenant().TenantId) + dbContextManager.Get(dbid).FeedAggregates + .Where(r => r.Tenant == tenantManager.GetCurrentTenant().TenantId) .Where(r => r.CreatedDate <= nowDate.AddDays(-1)) .GroupBy(r => r.CreatedDate.Date) .Select(r => r.Key) @@ -221,38 +221,38 @@ namespace ASC.Web.Studio.Core.Notify toadmins = true; tousers = true; - tableItemImg1 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-formatting-100.png"); + tableItemImg1 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-formatting-100.png"); tableItemText1 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_formatting_hdr; tableItemComment1 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_formatting; - tableItemLearnMoreUrl1 = scopeClass.StudioNotifyHelper.Helplink + "/onlyoffice-editors/index.aspx"; + tableItemLearnMoreUrl1 = studioNotifyHelper.Helplink + "/onlyoffice-editors/index.aspx"; tableItemLearnMoreText1 = () => WebstudioNotifyPatternResource.LinkLearnMore; - tableItemImg2 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-share-100.png"); + tableItemImg2 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-share-100.png"); tableItemText2 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_share_hdr; tableItemComment2 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_share; - tableItemImg3 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-coediting-100.png"); + tableItemImg3 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-coediting-100.png"); tableItemText3 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_coediting_hdr; tableItemComment3 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_coediting; - tableItemImg4 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-review-100.png"); + tableItemImg4 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-review-100.png"); tableItemText4 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_review_hdr; tableItemComment4 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_review; - tableItemImg5 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-3rdparty-100.png"); + tableItemImg5 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-3rdparty-100.png"); tableItemText5 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_3rdparty_hdr; tableItemComment5 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_3rdparty; - tableItemImg6 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-attach-100.png"); + tableItemImg6 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-attach-100.png"); tableItemText6 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_attach_hdr; tableItemComment6 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_attach; - tableItemImg7 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-apps-100.png"); + tableItemImg7 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-apps-100.png"); tableItemText7 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_apps_hdr; tableItemComment7 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_apps; greenButtonText = () => WebstudioNotifyPatternResource.ButtonAccessYouWebOffice; - greenButtonUrl = string.Format("{0}/products/files/", scopeClass.CommonLinkUtility.GetFullAbsolutePath("~").TrimEnd('/')); + greenButtonUrl = string.Format("{0}/products/files/", commonLinkUtility.GetFullAbsolutePath("~").TrimEnd('/')); } #endregion @@ -299,9 +299,9 @@ namespace ASC.Web.Studio.Core.Notify { Log.InfoFormat("start CreateCoupon to {0}", tenant.TenantAlias); - coupon = SetupInfo.IsSecretEmail(scopeClass.UserManager.GetUsers(tenant.OwnerId).Email) + coupon = SetupInfo.IsSecretEmail(userManager.GetUsers(tenant.OwnerId).Email) ? tenant.TenantAlias - : scopeClass.CouponManager.CreateCoupon(scopeClass.TenantManager); + : couponManager.CreateCoupon(tenantManager); Log.InfoFormat("end CreateCoupon to {0} coupon = {1}", tenant.TenantAlias, coupon); } @@ -317,7 +317,7 @@ namespace ASC.Web.Studio.Core.Notify } greenButtonText = () => WebstudioNotifyPatternResource.ButtonUseDiscount; - greenButtonUrl = scopeClass.CommonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); + greenButtonUrl = commonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); } #endregion @@ -346,7 +346,7 @@ namespace ASC.Web.Studio.Core.Notify #region 30 days after SAAS TRIAL expired + only 1 user - else if (dueDateIsNotMax && dueDate.AddDays(30) == nowDate && scopeClass.UserManager.GetUsers().Count() == 1) + else if (dueDateIsNotMax && dueDate.AddDays(30) == nowDate && userManager.GetUsers().Count() == 1) { action = Actions.SaasAdminTrialWarningAfter30V10; toadmins = true; @@ -365,8 +365,8 @@ namespace ASC.Web.Studio.Core.Notify greenButtonText = () => WebstudioNotifyPatternResource.ButtonLeaveFeedback; - var owner = scopeClass.UserManager.GetUsers(tenant.OwnerId); - greenButtonUrl = scopeClass.SetupInfo.TeamlabSiteRedirect + "/remove-portal-feedback-form.aspx#" + + var owner = userManager.GetUsers(tenant.OwnerId); + greenButtonUrl = setupInfo.TeamlabSiteRedirect + "/remove-portal-feedback-form.aspx#" + System.Web.HttpUtility.UrlEncode(Convert.ToBase64String( System.Text.Encoding.UTF8.GetBytes("{\"firstname\":\"" + owner.FirstName + "\",\"lastname\":\"" + owner.LastName + @@ -375,11 +375,11 @@ namespace ASC.Web.Studio.Core.Notify } else if (dueDateIsNotMax && dueDate.AddMonths(6).AddDays(7) <= nowDate) { - scopeClass.TenantManager.RemoveTenant(tenant.TenantId, true); + tenantManager.RemoveTenant(tenant.TenantId, true); - if (!string.IsNullOrEmpty(scopeClass.ApiSystemHelper.ApiCacheUrl)) + if (!string.IsNullOrEmpty(apiSystemHelper.ApiCacheUrl)) { - scopeClass.ApiSystemHelper.RemoveTenantFromCache(tenant.TenantAlias, scopeClass.AuthContext.CurrentAccount.ID); + apiSystemHelper.RemoveTenantFromCache(tenant.TenantAlias, authContext.CurrentAccount.ID); } } @@ -399,7 +399,7 @@ namespace ASC.Web.Studio.Core.Notify toadmins = true; greenButtonText = () => WebstudioNotifyPatternResource.ButtonRenewNow; - greenButtonUrl = scopeClass.CommonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); + greenButtonUrl = commonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); } #endregion @@ -412,7 +412,7 @@ namespace ASC.Web.Studio.Core.Notify toadmins = true; greenButtonText = () => WebstudioNotifyPatternResource.ButtonRenewNow; - greenButtonUrl = scopeClass.CommonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); + greenButtonUrl = commonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); } #endregion @@ -425,7 +425,7 @@ namespace ASC.Web.Studio.Core.Notify toadmins = true; greenButtonText = () => WebstudioNotifyPatternResource.ButtonBuyNow; - greenButtonUrl = scopeClass.CommonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); + greenButtonUrl = commonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); } #endregion @@ -439,8 +439,8 @@ namespace ASC.Web.Studio.Core.Notify greenButtonText = () => WebstudioNotifyPatternResource.ButtonLeaveFeedback; - var owner = scopeClass.UserManager.GetUsers(tenant.OwnerId); - greenButtonUrl = scopeClass.SetupInfo.TeamlabSiteRedirect + "/remove-portal-feedback-form.aspx#" + + var owner = userManager.GetUsers(tenant.OwnerId); + greenButtonUrl = setupInfo.TeamlabSiteRedirect + "/remove-portal-feedback-form.aspx#" + System.Web.HttpUtility.UrlEncode(Convert.ToBase64String( System.Text.Encoding.UTF8.GetBytes("{\"firstname\":\"" + owner.FirstName + "\",\"lastname\":\"" + owner.LastName + @@ -449,11 +449,11 @@ namespace ASC.Web.Studio.Core.Notify } else if (tariff.State == TariffState.NotPaid && dueDateIsNotMax && dueDate.AddMonths(6).AddDays(7) <= nowDate) { - scopeClass.TenantManager.RemoveTenant(tenant.TenantId, true); + tenantManager.RemoveTenant(tenant.TenantId, true); - if (!string.IsNullOrEmpty(scopeClass.ApiSystemHelper.ApiCacheUrl)) + if (!string.IsNullOrEmpty(apiSystemHelper.ApiCacheUrl)) { - scopeClass.ApiSystemHelper.RemoveTenantFromCache(tenant.TenantAlias, scopeClass.AuthContext.CurrentAccount.ID); + apiSystemHelper.RemoveTenantFromCache(tenant.TenantAlias, authContext.CurrentAccount.ID); } } @@ -466,26 +466,26 @@ namespace ASC.Web.Studio.Core.Notify if (action == null) continue; var users = toowner - ? new List { scopeClass.UserManager.GetUsers(tenant.OwnerId) } - : scopeClass.StudioNotifyHelper.GetRecipients(toadmins, tousers, false); + ? new List { userManager.GetUsers(tenant.OwnerId) } + : studioNotifyHelper.GetRecipients(toadmins, tousers, false); - var analytics = scopeClass.StudioNotifyHelper.GetNotifyAnalytics(action, toowner, toadmins, tousers, false); + var analytics = studioNotifyHelper.GetNotifyAnalytics(action, toowner, toadmins, tousers, false); - foreach (var u in users.Where(u => paymentMessage || scopeClass.StudioNotifyHelper.IsSubscribedToNotify(u, Actions.PeriodicNotify))) + foreach (var u in users.Where(u => paymentMessage || studioNotifyHelper.IsSubscribedToNotify(u, Actions.PeriodicNotify))) { var culture = string.IsNullOrEmpty(u.CultureName) ? tenant.GetCulture() : u.GetCulture(); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; - var rquota = scopeClass.TenantExtra.GetRightQuota() ?? TenantQuota.Default; + var rquota = tenantExtra.GetRightQuota() ?? TenantQuota.Default; client.SendNoticeToAsync( action, - new[] { scopeClass.StudioNotifyHelper.ToRecipient(u.ID) }, + new[] { studioNotifyHelper.ToRecipient(u.ID) }, new[] { senderName }, new TagValue(Tags.UserName, u.FirstName.HtmlEncode()), - new TagValue(Tags.PricingPage, scopeClass.CommonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx")), - new TagValue(Tags.ActiveUsers, scopeClass.UserManager.GetUsers().Count()), + new TagValue(Tags.PricingPage, commonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx")), + new TagValue(Tags.ActiveUsers, userManager.GetUsers().Count()), new TagValue(Tags.Price, rquota.Price), new TagValue(Tags.PricePeriod, rquota.Year3 ? UserControlsCommonResource.TariffPerYear3 : rquota.Year ? UserControlsCommonResource.TariffPerYear : UserControlsCommonResource.TariffPerMonth), new TagValue(Tags.DueDate, dueDate.ToLongDateString()), @@ -501,7 +501,7 @@ namespace ASC.Web.Studio.Core.Notify TagValues.TableItem(6, tableItemText6, tableItemUrl6, tableItemImg6, tableItemComment6, tableItemLearnMoreText6, tableItemLearnMoreUrl6), TagValues.TableItem(7, tableItemText7, tableItemUrl7, tableItemImg7, tableItemComment7, tableItemLearnMoreText7, tableItemLearnMoreUrl7), TagValues.TableBottom(), - new TagValue(CommonTags.Footer, u.IsAdmin(scopeClass.UserManager) ? "common" : "social"), + new TagValue(CommonTags.Footer, u.IsAdmin(userManager) ? "common" : "social"), new TagValue(CommonTags.Analytics, analytics), new TagValue(Tags.Coupon, coupon)); } @@ -542,14 +542,14 @@ namespace ASC.Web.Studio.Core.Notify try { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); + (var tenantManager, var userManager, var studioNotifyHelper, var paymentManager, var tenantExtra, var authContext, var commonLinkUtility, var apiSystemHelper, var setupInfo, var dbContextManager, var couponManager, var configuration, var settingsManager, var coreBaseSettings, var displayUserSettingsHelper, var authManager, var securityContext) = scopeClass; + var defaultRebranding = MailWhiteLabelSettings.IsDefault(settingsManager, configuration); + tenantManager.SetCurrentTenant(tenant.TenantId); + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(studioNotifyHelper.NotifySource, scope); - var defaultRebranding = MailWhiteLabelSettings.IsDefault(scopeClass.SettingsManager, scopeClass.Configuration); - scopeClass.TenantManager.SetCurrentTenant(tenant.TenantId); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifyHelper.NotifySource, scope); - - var tariff = scopeClass.PaymentManager.GetTariff(tenant.TenantId); - var quota = scopeClass.TenantManager.GetTenantQuota(tenant.TenantId); + var tariff = paymentManager.GetTariff(tenant.TenantId); + var quota = tenantManager.GetTenantQuota(tenant.TenantId); var createdDate = tenant.CreatedDateTime.Date; var dueDateIsNotMax = tariff.DueDate != DateTime.MaxValue; @@ -629,42 +629,42 @@ namespace ASC.Web.Studio.Core.Notify paymentMessage = false; toadmins = true; - tableItemImg1 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-customize-brand-100.png"); + tableItemImg1 = studioNotifyHelper.GetNotificationImageUrl("tips-customize-brand-100.png"); tableItemText1 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_brand_hdr; tableItemComment1 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_brand; - tableItemImg2 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-customize-regional-100.png"); + tableItemImg2 = studioNotifyHelper.GetNotificationImageUrl("tips-customize-regional-100.png"); tableItemText2 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_regional_hdr; tableItemComment2 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_regional; - tableItemImg3 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-customize-customize-100.png"); + tableItemImg3 = studioNotifyHelper.GetNotificationImageUrl("tips-customize-customize-100.png"); tableItemText3 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_customize_hdr; tableItemComment3 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_customize; - tableItemImg4 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-customize-modules-100.png"); + tableItemImg4 = studioNotifyHelper.GetNotificationImageUrl("tips-customize-modules-100.png"); tableItemText4 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_modules_hdr; tableItemComment4 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_modules; - tableItemImg5 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-customize-3rdparty-100.png"); + tableItemImg5 = studioNotifyHelper.GetNotificationImageUrl("tips-customize-3rdparty-100.png"); tableItemText5 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_3rdparty_hdr; tableItemComment5 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_3rdparty; greenButtonText = () => WebstudioNotifyPatternResource.ButtonConfigureRightNow; - greenButtonUrl = scopeClass.CommonLinkUtility.GetFullAbsolutePath(scopeClass.CommonLinkUtility.GetAdministration(ManagementType.General)); + greenButtonUrl = commonLinkUtility.GetFullAbsolutePath(commonLinkUtility.GetAdministration(ManagementType.General)); } #endregion #region 4 days after registration to admins ENTERPRISE TRIAL + only 1 user + defaultRebranding - else if (createdDate.AddDays(4) == nowDate && scopeClass.UserManager.GetUsers().Count() == 1) + else if (createdDate.AddDays(4) == nowDate && userManager.GetUsers().Count() == 1) { action = Actions.EnterpriseAdminInviteTeammatesV10; paymentMessage = false; toadmins = true; greenButtonText = () => WebstudioNotifyPatternResource.ButtonInviteRightNow; - greenButtonUrl = string.Format("{0}/products/people/", scopeClass.CommonLinkUtility.GetFullAbsolutePath("~").TrimEnd('/')); + greenButtonUrl = string.Format("{0}/products/people/", commonLinkUtility.GetFullAbsolutePath("~").TrimEnd('/')); } #endregion @@ -676,8 +676,8 @@ namespace ASC.Web.Studio.Core.Notify List datesWithActivity; datesWithActivity = - scopeClass.DbContextManager.Get(dbid).FeedAggregates - .Where(r => r.Tenant == scopeClass.TenantManager.GetCurrentTenant().TenantId) + dbContextManager.Get(dbid).FeedAggregates + .Where(r => r.Tenant == tenantManager.GetCurrentTenant().TenantId) .Where(r => r.CreatedDate <= nowDate.AddDays(-1)) .GroupBy(r => r.CreatedDate.Date) .Select(r => r.Key) @@ -702,38 +702,38 @@ namespace ASC.Web.Studio.Core.Notify toadmins = true; tousers = true; - tableItemImg1 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-formatting-100.png"); + tableItemImg1 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-formatting-100.png"); tableItemText1 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_formatting_hdr; tableItemComment1 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_formatting; - tableItemLearnMoreUrl1 = scopeClass.StudioNotifyHelper.Helplink + "/onlyoffice-editors/index.aspx"; + tableItemLearnMoreUrl1 = studioNotifyHelper.Helplink + "/onlyoffice-editors/index.aspx"; tableItemLearnMoreText1 = () => WebstudioNotifyPatternResource.LinkLearnMore; - tableItemImg2 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-share-100.png"); + tableItemImg2 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-share-100.png"); tableItemText2 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_share_hdr; tableItemComment2 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_share; - tableItemImg3 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-coediting-100.png"); + tableItemImg3 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-coediting-100.png"); tableItemText3 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_coediting_hdr; tableItemComment3 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_coediting; - tableItemImg4 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-review-100.png"); + tableItemImg4 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-review-100.png"); tableItemText4 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_review_hdr; tableItemComment4 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_review; - tableItemImg5 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-3rdparty-100.png"); + tableItemImg5 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-3rdparty-100.png"); tableItemText5 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_3rdparty_hdr; tableItemComment5 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_3rdparty; - tableItemImg6 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-attach-100.png"); + tableItemImg6 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-attach-100.png"); tableItemText6 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_attach_hdr; tableItemComment6 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_attach; - tableItemImg7 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-apps-100.png"); + tableItemImg7 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-apps-100.png"); tableItemText7 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_apps_hdr; tableItemComment7 = () => WebstudioNotifyPatternResource.pattern_saas_admin_user_docs_tips_v10_item_apps; greenButtonText = () => WebstudioNotifyPatternResource.ButtonAccessYouWebOffice; - greenButtonUrl = string.Format("{0}/products/files/", scopeClass.CommonLinkUtility.GetFullAbsolutePath("~").TrimEnd('/')); + greenButtonUrl = string.Format("{0}/products/files/", commonLinkUtility.GetFullAbsolutePath("~").TrimEnd('/')); } #endregion @@ -791,31 +791,31 @@ namespace ASC.Web.Studio.Core.Notify paymentMessage = false; toadmins = true; - tableItemImg1 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-customize-brand-100.png"); + tableItemImg1 = studioNotifyHelper.GetNotificationImageUrl("tips-customize-brand-100.png"); tableItemText1 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_brand_hdr; tableItemComment1 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_brand; - tableItemImg2 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-customize-regional-100.png"); + tableItemImg2 = studioNotifyHelper.GetNotificationImageUrl("tips-customize-regional-100.png"); tableItemText2 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_regional_hdr; tableItemComment2 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_regional; - tableItemImg3 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-customize-customize-100.png"); + tableItemImg3 = studioNotifyHelper.GetNotificationImageUrl("tips-customize-customize-100.png"); tableItemText3 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_customize_hdr; tableItemComment3 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_customize; - tableItemImg4 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-customize-modules-100.png"); + tableItemImg4 = studioNotifyHelper.GetNotificationImageUrl("tips-customize-modules-100.png"); tableItemText4 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_modules_hdr; tableItemComment4 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_modules; - if (!scopeClass.CoreBaseSettings.CustomMode) + if (!coreBaseSettings.CustomMode) { - tableItemImg5 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-customize-3rdparty-100.png"); + tableItemImg5 = studioNotifyHelper.GetNotificationImageUrl("tips-customize-3rdparty-100.png"); tableItemText5 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_3rdparty_hdr; tableItemComment5 = () => WebstudioNotifyPatternResource.pattern_enterprise_admin_customize_portal_v10_item_3rdparty; } greenButtonText = () => WebstudioNotifyPatternResource.ButtonConfigureRightNow; - greenButtonUrl = scopeClass.CommonLinkUtility.GetFullAbsolutePath(scopeClass.CommonLinkUtility.GetAdministration(ManagementType.General)); + greenButtonUrl = commonLinkUtility.GetFullAbsolutePath(commonLinkUtility.GetAdministration(ManagementType.General)); } #endregion @@ -835,7 +835,7 @@ namespace ASC.Web.Studio.Core.Notify : Actions.EnterpriseWhitelabelAdminPaymentWarningBefore7V10; toadmins = true; greenButtonText = () => WebstudioNotifyPatternResource.ButtonSelectPricingPlans; - greenButtonUrl = scopeClass.CommonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); + greenButtonUrl = commonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); } #endregion @@ -849,7 +849,7 @@ namespace ASC.Web.Studio.Core.Notify : Actions.EnterpriseWhitelabelAdminPaymentWarningV10; toadmins = true; greenButtonText = () => WebstudioNotifyPatternResource.ButtonSelectPricingPlans; - greenButtonUrl = scopeClass.CommonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); + greenButtonUrl = commonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx"); } #endregion @@ -860,23 +860,23 @@ namespace ASC.Web.Studio.Core.Notify if (action == null) continue; - var users = scopeClass.StudioNotifyHelper.GetRecipients(toadmins, tousers, false); + var users = studioNotifyHelper.GetRecipients(toadmins, tousers, false); - foreach (var u in users.Where(u => paymentMessage || scopeClass.StudioNotifyHelper.IsSubscribedToNotify(u, Actions.PeriodicNotify))) + foreach (var u in users.Where(u => paymentMessage || studioNotifyHelper.IsSubscribedToNotify(u, Actions.PeriodicNotify))) { var culture = string.IsNullOrEmpty(u.CultureName) ? tenant.GetCulture() : u.GetCulture(); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; - var rquota = scopeClass.TenantExtra.GetRightQuota() ?? TenantQuota.Default; + var rquota = tenantExtra.GetRightQuota() ?? TenantQuota.Default; client.SendNoticeToAsync( action, - new[] { scopeClass.StudioNotifyHelper.ToRecipient(u.ID) }, + new[] { studioNotifyHelper.ToRecipient(u.ID) }, new[] { senderName }, new TagValue(Tags.UserName, u.FirstName.HtmlEncode()), - new TagValue(Tags.PricingPage, scopeClass.CommonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx")), - new TagValue(Tags.ActiveUsers, scopeClass.UserManager.GetUsers().Count()), + new TagValue(Tags.PricingPage, commonLinkUtility.GetFullAbsolutePath("~/tariffs.aspx")), + new TagValue(Tags.ActiveUsers, userManager.GetUsers().Count()), new TagValue(Tags.Price, rquota.Price), new TagValue(Tags.PricePeriod, rquota.Year3 ? UserControlsCommonResource.TariffPerYear3 : rquota.Year ? UserControlsCommonResource.TariffPerYear : UserControlsCommonResource.TariffPerMonth), new TagValue(Tags.DueDate, dueDate.ToLongDateString()), @@ -929,10 +929,10 @@ namespace ASC.Web.Studio.Core.Notify try { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); - - scopeClass.TenantManager.SetCurrentTenant(tenant.TenantId); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifyHelper.NotifySource, scope); + var scopeClass = scope.ServiceProvider.GetService(); + (var tenantManager, var userManager, var studioNotifyHelper, var paymentManager, var tenantExtra, var authContext, var commonLinkUtility, var apiSystemHelper, var setupInfo, var dbContextManager, var couponManager, var configuration, var settingsManager, var coreBaseSettings, var displayUserSettingsHelper, var authManager, var securityContext) = scopeClass; + tenantManager.SetCurrentTenant(tenant.TenantId); + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(studioNotifyHelper.NotifySource, scope); var createdDate = tenant.CreatedDateTime.Date; @@ -1010,37 +1010,37 @@ namespace ASC.Web.Studio.Core.Notify { action = Actions.OpensourceAdminDocsTips; - tableItemImg1 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-coediting-100.png"); + tableItemImg1 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-coediting-100.png"); tableItemComment1 = () => WebstudioNotifyPatternResource.ItemOpensourceDocsTips1; - tableItemLearnMoreUrl1 = scopeClass.StudioNotifyHelper.Helplink + "/ONLYOFFICE-Editors/ONLYOFFICE-Document-Editor/HelpfulHints/CollaborativeEditing.aspx"; + tableItemLearnMoreUrl1 = studioNotifyHelper.Helplink + "/ONLYOFFICE-Editors/ONLYOFFICE-Document-Editor/HelpfulHints/CollaborativeEditing.aspx"; tableItemLearnMoreText1 = () => WebstudioNotifyPatternResource.LinkLearnMore; - tableItemImg2 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-docinfo-100.png"); + tableItemImg2 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-docinfo-100.png"); tableItemComment2 = () => WebstudioNotifyPatternResource.ItemOpensourceDocsTips2; - tableItemLearnMoreUrl2 = scopeClass.StudioNotifyHelper.Helplink + "/ONLYOFFICE-Editors/ONLYOFFICE-Document-Editor/UsageInstructions/ViewDocInfo.aspx"; + tableItemLearnMoreUrl2 = studioNotifyHelper.Helplink + "/ONLYOFFICE-Editors/ONLYOFFICE-Document-Editor/UsageInstructions/ViewDocInfo.aspx"; tableItemLearnMoreText2 = () => WebstudioNotifyPatternResource.LinkLearnMore; - tableItemImg3 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-review-100.png"); + tableItemImg3 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-review-100.png"); tableItemComment3 = () => WebstudioNotifyPatternResource.ItemOpensourceDocsTips3; - tableItemLearnMoreUrl3 = scopeClass.StudioNotifyHelper.Helplink + "/ONLYOFFICE-Editors/ONLYOFFICE-Document-Editor/HelpfulHints/Review.aspx"; + tableItemLearnMoreUrl3 = studioNotifyHelper.Helplink + "/ONLYOFFICE-Editors/ONLYOFFICE-Document-Editor/HelpfulHints/Review.aspx"; tableItemLearnMoreText3 = () => WebstudioNotifyPatternResource.LinkLearnMore; - tableItemImg4 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-share-100.png"); + tableItemImg4 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-share-100.png"); tableItemComment4 = () => WebstudioNotifyPatternResource.ItemOpensourceDocsTips4; - tableItemLearnMoreUrl4 = scopeClass.StudioNotifyHelper.Helplink + "/gettingstarted/documents.aspx#SharingDocuments_block"; + tableItemLearnMoreUrl4 = studioNotifyHelper.Helplink + "/gettingstarted/documents.aspx#SharingDocuments_block"; tableItemLearnMoreText4 = () => WebstudioNotifyPatternResource.LinkLearnMore; - tableItemImg5 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-mailmerge-100.png"); + tableItemImg5 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-mailmerge-100.png"); tableItemComment5 = () => WebstudioNotifyPatternResource.ItemOpensourceDocsTips5; - tableItemLearnMoreUrl5 = scopeClass.StudioNotifyHelper.Helplink + "/ONLYOFFICE-Editors/ONLYOFFICE-Document-Editor/UsageInstructions/UseMailMerge.aspx"; + tableItemLearnMoreUrl5 = studioNotifyHelper.Helplink + "/ONLYOFFICE-Editors/ONLYOFFICE-Document-Editor/UsageInstructions/UseMailMerge.aspx"; tableItemLearnMoreText5 = () => WebstudioNotifyPatternResource.LinkLearnMore; - tableItemImg6 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-desktop-100.png"); + tableItemImg6 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-desktop-100.png"); tableItemComment6 = () => WebstudioNotifyPatternResource.ItemOpensourceDocsTips6; tableItemLearnMoreUrl6 = "http://www.onlyoffice.com/desktop.aspx"; tableItemLearnMoreText6 = () => WebstudioNotifyPatternResource.ButtonDownloadNow; - tableItemImg7 = scopeClass.StudioNotifyHelper.GetNotificationImageUrl("tips-documents-apps-100.png"); + tableItemImg7 = studioNotifyHelper.GetNotificationImageUrl("tips-documents-apps-100.png"); tableItemComment7 = () => WebstudioNotifyPatternResource.ItemOpensourceDocsTips7; tableItemLearnMoreUrl7 = "https://itunes.apple.com/us/app/onlyoffice-documents/id944896972"; tableItemLearnMoreText7 = () => WebstudioNotifyPatternResource.ButtonGoToAppStore; @@ -1053,9 +1053,9 @@ namespace ASC.Web.Studio.Core.Notify if (action == null) continue; - var users = scopeClass.StudioNotifyHelper.GetRecipients(true, false, false); + var users = studioNotifyHelper.GetRecipients(true, false, false); - foreach (var u in users.Where(u => scopeClass.StudioNotifyHelper.IsSubscribedToNotify(u, Actions.PeriodicNotify))) + foreach (var u in users.Where(u => studioNotifyHelper.IsSubscribedToNotify(u, Actions.PeriodicNotify))) { var culture = string.IsNullOrEmpty(u.CultureName) ? tenant.GetCulture() : u.GetCulture(); Thread.CurrentThread.CurrentCulture = culture; @@ -1063,9 +1063,9 @@ namespace ASC.Web.Studio.Core.Notify client.SendNoticeToAsync( action, - new[] { scopeClass.StudioNotifyHelper.ToRecipient(u.ID) }, + new[] { studioNotifyHelper.ToRecipient(u.ID) }, new[] { senderName }, - new TagValue(Tags.UserName, u.DisplayUserName(scopeClass.DisplayUserSettingsHelper)), + new TagValue(Tags.UserName, u.DisplayUserName(displayUserSettingsHelper)), TagValues.GreenButton(greenButtonText, greenButtonUrl), TagValues.TableTop(), TagValues.TableItem(1, tableItemText1, tableItemUrl1, tableItemImg1, tableItemComment1, tableItemLearnMoreText1, tableItemLearnMoreUrl1), @@ -1112,20 +1112,21 @@ namespace ASC.Web.Studio.Core.Notify var sendCount = 0; using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); + (var tenantManager, var userManager, var studioNotifyHelper, var paymentManager, var tenantExtra, var authContext, var commonLinkUtility, var apiSystemHelper, var setupInfo, var dbContextManager, var couponManager, var configuration, var settingsManager, var coreBaseSettings, var displayUserSettingsHelper, var authManager, var securityContext) = scopeClass; - scopeClass.TenantManager.SetCurrentTenant(tenant.TenantId); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifyHelper.NotifySource, scope); + tenantManager.SetCurrentTenant(tenant.TenantId); + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(studioNotifyHelper.NotifySource, scope); Log.InfoFormat("Current tenant: {0}", tenant.TenantId); - var users = scopeClass.UserManager.GetUsers(EmployeeStatus.Active); + var users = userManager.GetUsers(EmployeeStatus.Active); - foreach (var user in users.Where(u => scopeClass.StudioNotifyHelper.IsSubscribedToNotify(u, Actions.PeriodicNotify))) + foreach (var user in users.Where(u => studioNotifyHelper.IsSubscribedToNotify(u, Actions.PeriodicNotify))) { INotifyAction action; - scopeClass.SecurityContext.AuthenticateMe(scopeClass.AuthManager.GetAccountByID(tenant.TenantId, user.ID)); + securityContext.AuthenticateMe(authManager.GetAccountByID(tenant.TenantId, user.ID)); var culture = tenant.GetCulture(); if (!string.IsNullOrEmpty(user.CultureName)) @@ -1146,7 +1147,7 @@ namespace ASC.Web.Studio.Core.Notify var dayAfterRegister = (int)scheduleDate.Date.Subtract(user.CreateDate.Date).TotalDays; - if (scopeClass.CoreBaseSettings.CustomMode) + if (coreBaseSettings.CustomMode) { switch (dayAfterRegister) { @@ -1191,12 +1192,12 @@ namespace ASC.Web.Studio.Core.Notify client.SendNoticeToAsync( action, null, - scopeClass.StudioNotifyHelper.RecipientFromEmail(user.Email, true), + studioNotifyHelper.RecipientFromEmail(user.Email, true), new[] { senderName }, TagValues.PersonalHeaderStart(), TagValues.PersonalHeaderEnd(), TagValues.GreenButton(greenButtonText, greenButtonUrl), - new TagValue(CommonTags.Footer, scopeClass.CoreBaseSettings.CustomMode ? "personalCustomMode" : "personal")); + new TagValue(CommonTags.Footer, coreBaseSettings.CustomMode ? "personalCustomMode" : "personal")); } Log.InfoFormat("Total send count: {0}", sendCount); @@ -1224,23 +1225,23 @@ namespace ASC.Web.Studio.Core.Notify public class StudioPeriodicNotifyScope { - internal TenantManager TenantManager { get; } - internal UserManager UserManager { get; } - internal StudioNotifyHelper StudioNotifyHelper { get; } - internal PaymentManager PaymentManager { get; } - internal TenantExtra TenantExtra { get; } - internal AuthContext AuthContext { get; } - internal CommonLinkUtility CommonLinkUtility { get; } - internal ApiSystemHelper ApiSystemHelper { get; } - internal SetupInfo SetupInfo { get; } - internal DbContextManager DbContextManager { get; } - internal CouponManager CouponManager { get; } - internal IConfiguration Configuration { get; } - internal SettingsManager SettingsManager { get; } - internal CoreBaseSettings CoreBaseSettings { get; } - internal DisplayUserSettingsHelper DisplayUserSettingsHelper { get; } - internal AuthManager AuthManager { get; } - internal SecurityContext SecurityContext { get; } + private TenantManager TenantManager { get; } + private UserManager UserManager { get; } + private StudioNotifyHelper StudioNotifyHelper { get; } + private PaymentManager PaymentManager { get; } + private TenantExtra TenantExtra { get; } + private AuthContext AuthContext { get; } + private CommonLinkUtility CommonLinkUtility { get; } + private ApiSystemHelper ApiSystemHelper { get; } + private SetupInfo SetupInfo { get; } + private DbContextManager DbContextManager { get; } + private CouponManager CouponManager { get; } + private IConfiguration Configuration { get; } + private SettingsManager SettingsManager { get; } + private CoreBaseSettings CoreBaseSettings { get; } + private DisplayUserSettingsHelper DisplayUserSettingsHelper { get; } + private AuthManager AuthManager { get; } + private SecurityContext SecurityContext { get; } public StudioPeriodicNotifyScope(TenantManager tenantManager, UserManager userManager, @@ -1278,6 +1279,43 @@ namespace ASC.Web.Studio.Core.Notify AuthManager = authManager; SecurityContext = securityContext; } + + public void Deconstruct(out TenantManager tenantManager, + out UserManager userManager, + out StudioNotifyHelper studioNotifyHelper, + out PaymentManager paymentManager, + out TenantExtra tenantExtra, + out AuthContext authContext, + out CommonLinkUtility commonLinkUtility, + out ApiSystemHelper apiSystemHelper, + out SetupInfo setupInfo, + out DbContextManager dbContextManager, + out CouponManager couponManager, + out IConfiguration configuration, + out SettingsManager settingsManager, + out CoreBaseSettings coreBaseSettings, + out DisplayUserSettingsHelper displayUserSettingsHelper, + out AuthManager authManager, + out SecurityContext securityContext) + { + tenantManager = TenantManager; + userManager = UserManager; + studioNotifyHelper = StudioNotifyHelper; + paymentManager = PaymentManager; + tenantExtra = TenantExtra; + authContext = AuthContext; + commonLinkUtility = CommonLinkUtility; + apiSystemHelper = ApiSystemHelper; + setupInfo = SetupInfo; + dbContextManager = DbContextManager; + couponManager = CouponManager; + configuration = Configuration; + settingsManager = SettingsManager; + coreBaseSettings = CoreBaseSettings; + displayUserSettingsHelper = DisplayUserSettingsHelper; + authManager = AuthManager; + securityContext = SecurityContext; + } } public static class StudioPeriodicNotifyExtension diff --git a/web/ASC.Web.Core/Notify/StudioWhatsNewNotify.cs b/web/ASC.Web.Core/Notify/StudioWhatsNewNotify.cs index 19778e928e..754a068ee3 100644 --- a/web/ASC.Web.Core/Notify/StudioWhatsNewNotify.cs +++ b/web/ASC.Web.Core/Notify/StudioWhatsNewNotify.cs @@ -83,42 +83,42 @@ namespace ASC.Web.Studio.Core.Notify { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - - var tenant = scopeClass.TenantManager.GetTenant(tenantid); + (var tenantManager, var paymentManager, var tenantUtil, var studioNotifyHelper, var userManager, var securityContext, var authContext, var authManager, var commonLinkUtility, var displayUserSettingsHelper, var feedAggregateDataProvider, var coreSettings) = scopeClass; + var tenant = tenantManager.GetTenant(tenantid); if (tenant == null || tenant.Status != TenantStatus.Active || - !TimeToSendWhatsNew(scopeClass.TenantUtil.DateTimeFromUtc(tenant.TimeZone, scheduleDate)) || - TariffState.NotPaid <= scopeClass.PaymentManager.GetTariff(tenantid).State) + !TimeToSendWhatsNew(tenantUtil.DateTimeFromUtc(tenant.TimeZone, scheduleDate)) || + TariffState.NotPaid <= paymentManager.GetTariff(tenantid).State) { continue; } - scopeClass.TenantManager.SetCurrentTenant(tenant); - var client = WorkContext.NotifyContext.NotifyService.RegisterClient(scopeClass.StudioNotifyHelper.NotifySource, scope); + tenantManager.SetCurrentTenant(tenant); + var client = WorkContext.NotifyContext.NotifyService.RegisterClient(studioNotifyHelper.NotifySource, scope); - log.InfoFormat("Start send whats new in {0} ({1}).", tenant.GetTenantDomain(scopeClass.CoreSettings), tenantid); - foreach (var user in scopeClass.UserManager.GetUsers()) + log.InfoFormat("Start send whats new in {0} ({1}).", tenant.GetTenantDomain(coreSettings), tenantid); + foreach (var user in userManager.GetUsers()) { - if (!scopeClass.StudioNotifyHelper.IsSubscribedToNotify(user, Actions.SendWhatsNew)) + if (!studioNotifyHelper.IsSubscribedToNotify(user, Actions.SendWhatsNew)) { continue; } - scopeClass.SecurityContext.AuthenticateMe(scopeClass.AuthManager.GetAccountByID(tenant.TenantId, user.ID)); + securityContext.AuthenticateMe(authManager.GetAccountByID(tenant.TenantId, user.ID)); var culture = string.IsNullOrEmpty(user.CultureName) ? tenant.GetCulture() : user.GetCulture(); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; - var feeds = scopeClass.FeedAggregateDataProvider.GetFeeds(new FeedApiFilter + var feeds = feedAggregateDataProvider.GetFeeds(new FeedApiFilter { From = scheduleDate.Date.AddDays(-1), To = scheduleDate.Date.AddSeconds(-1), Max = 100, }); - var feedMinWrappers = feeds.ConvertAll(f => f.ToFeedMin(scopeClass.UserManager)); + var feedMinWrappers = feeds.ConvertAll(f => f.ToFeedMin(userManager)); var feedMinGroupedWrappers = feedMinWrappers .Where(f => @@ -137,10 +137,10 @@ namespace ASC.Web.Studio.Core.Notify g => g.Select(f => new WhatsNewUserActivity { Date = f.CreatedDate, - UserName = f.Author != null && f.Author.UserInfo != null ? f.Author.UserInfo.DisplayUserName(scopeClass.DisplayUserSettingsHelper) : string.Empty, - UserAbsoluteURL = f.Author != null && f.Author.UserInfo != null ? scopeClass.CommonLinkUtility.GetFullAbsolutePath(f.Author.UserInfo.GetUserProfilePageURL(scopeClass.CommonLinkUtility)) : string.Empty, + UserName = f.Author != null && f.Author.UserInfo != null ? f.Author.UserInfo.DisplayUserName(displayUserSettingsHelper) : string.Empty, + UserAbsoluteURL = f.Author != null && f.Author.UserInfo != null ? commonLinkUtility.GetFullAbsolutePath(f.Author.UserInfo.GetUserProfilePageURL(commonLinkUtility)) : string.Empty, Title = HtmlUtil.GetText(f.Title, 512), - URL = scopeClass.CommonLinkUtility.GetFullAbsolutePath(f.ItemUrl), + URL = commonLinkUtility.GetFullAbsolutePath(f.ItemUrl), BreadCrumbs = new string[0], Action = getWhatsNewActionText(f) }).ToList()); @@ -160,10 +160,10 @@ namespace ASC.Web.Studio.Core.Notify new WhatsNewUserActivity { Date = prawbc.CreatedDate, - UserName = prawbc.Author != null && prawbc.Author.UserInfo != null ? prawbc.Author.UserInfo.DisplayUserName(scopeClass.DisplayUserSettingsHelper) : string.Empty, - UserAbsoluteURL = prawbc.Author != null && prawbc.Author.UserInfo != null ? scopeClass.CommonLinkUtility.GetFullAbsolutePath(prawbc.Author.UserInfo.GetUserProfilePageURL(scopeClass.CommonLinkUtility)) : string.Empty, + UserName = prawbc.Author != null && prawbc.Author.UserInfo != null ? prawbc.Author.UserInfo.DisplayUserName(displayUserSettingsHelper) : string.Empty, + UserAbsoluteURL = prawbc.Author != null && prawbc.Author.UserInfo != null ? commonLinkUtility.GetFullAbsolutePath(prawbc.Author.UserInfo.GetUserProfilePageURL(commonLinkUtility)) : string.Empty, Title = HtmlUtil.GetText(prawbc.Title, 512), - URL = scopeClass.CommonLinkUtility.GetFullAbsolutePath(prawbc.ItemUrl), + URL = commonLinkUtility.GetFullAbsolutePath(prawbc.ItemUrl), BreadCrumbs = new string[0], Action = getWhatsNewActionText(prawbc) }); @@ -180,10 +180,10 @@ namespace ASC.Web.Studio.Core.Notify new WhatsNewUserActivity { Date = ls.CreatedDate, - UserName = ls.Author != null && ls.Author.UserInfo != null ? ls.Author.UserInfo.DisplayUserName(scopeClass.DisplayUserSettingsHelper) : string.Empty, - UserAbsoluteURL = ls.Author != null && ls.Author.UserInfo != null ? scopeClass.CommonLinkUtility.GetFullAbsolutePath(ls.Author.UserInfo.GetUserProfilePageURL(scopeClass.CommonLinkUtility)) : string.Empty, + UserName = ls.Author != null && ls.Author.UserInfo != null ? ls.Author.UserInfo.DisplayUserName(displayUserSettingsHelper) : string.Empty, + UserAbsoluteURL = ls.Author != null && ls.Author.UserInfo != null ? commonLinkUtility.GetFullAbsolutePath(ls.Author.UserInfo.GetUserProfilePageURL(commonLinkUtility)) : string.Empty, Title = HtmlUtil.GetText(ls.Title, 512), - URL = scopeClass.CommonLinkUtility.GetFullAbsolutePath(ls.ItemUrl), + URL = commonLinkUtility.GetFullAbsolutePath(ls.ItemUrl), BreadCrumbs = i == 0 ? new string[1] { gr.Key } : new string[0], Action = getWhatsNewActionText(ls) }); @@ -295,18 +295,18 @@ namespace ASC.Web.Studio.Core.Notify public class StudioWhatsNewNotifyScope { - internal TenantManager TenantManager { get; } - internal PaymentManager PaymentManager { get; } - internal TenantUtil TenantUtil { get; } - internal StudioNotifyHelper StudioNotifyHelper { get; } - internal UserManager UserManager { get; } - internal SecurityContext SecurityContext { get; } - internal AuthContext AuthContext { get; } - internal AuthManager AuthManager { get; } - internal CommonLinkUtility CommonLinkUtility { get; } - internal DisplayUserSettingsHelper DisplayUserSettingsHelper { get; } - internal FeedAggregateDataProvider FeedAggregateDataProvider { get; } - internal CoreSettings CoreSettings { get; } + private TenantManager TenantManager { get; } + private PaymentManager PaymentManager { get; } + private TenantUtil TenantUtil { get; } + private StudioNotifyHelper StudioNotifyHelper { get; } + private UserManager UserManager { get; } + private SecurityContext SecurityContext { get; } + private AuthContext AuthContext { get; } + private AuthManager AuthManager { get; } + private CommonLinkUtility CommonLinkUtility { get; } + private DisplayUserSettingsHelper DisplayUserSettingsHelper { get; } + private FeedAggregateDataProvider FeedAggregateDataProvider { get; } + private CoreSettings CoreSettings { get; } public StudioWhatsNewNotifyScope(TenantManager tenantManager, PaymentManager paymentManager, @@ -334,6 +334,33 @@ namespace ASC.Web.Studio.Core.Notify FeedAggregateDataProvider = feedAggregateDataProvider; CoreSettings = coreSettings; } + + public void Deconstruct(out TenantManager tenantManager, + out PaymentManager paymentManager, + out TenantUtil tenantUtil, + out StudioNotifyHelper studioNotifyHelper, + out UserManager userManager, + out SecurityContext securityContext, + out AuthContext authContext, + out AuthManager authManager, + out CommonLinkUtility commonLinkUtility, + out DisplayUserSettingsHelper displayUserSettingsHelper, + out FeedAggregateDataProvider feedAggregateDataProvider, + out CoreSettings coreSettings ) + { + tenantManager = TenantManager; + paymentManager = PaymentManager; + tenantUtil = TenantUtil; + studioNotifyHelper = StudioNotifyHelper; + userManager = UserManager; + securityContext = SecurityContext; + authContext = AuthContext; + authManager = AuthManager; + commonLinkUtility = CommonLinkUtility; + displayUserSettingsHelper = DisplayUserSettingsHelper; + feedAggregateDataProvider = FeedAggregateDataProvider; + coreSettings = CoreSettings; + } } public static class StudioWhatsNewNotifyExtension diff --git a/web/ASC.Web.Core/QuotaSync.cs b/web/ASC.Web.Core/QuotaSync.cs index e71ad07071..b2f5395a39 100644 --- a/web/ASC.Web.Core/QuotaSync.cs +++ b/web/ASC.Web.Core/QuotaSync.cs @@ -51,17 +51,18 @@ namespace ASC.Web.Studio.Core.Quota public void RunJob(DistributedTask _, CancellationToken cancellationToken) { using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); - scopeClass.TenantManager.SetCurrentTenant(TenantId); + var scopeClass = scope.ServiceProvider.GetService(); + (var tenantManager, var storageFactoryConfig, var storageFactory) = scopeClass; + tenantManager.SetCurrentTenant(TenantId); - var storageModules = scopeClass.StorageFactoryConfig.GetModuleList(string.Empty).ToList(); + var storageModules = storageFactoryConfig.GetModuleList(string.Empty).ToList(); foreach (var module in storageModules) { - var storage = scopeClass.StorageFactory.GetStorage(TenantId.ToString(), module); + var storage = storageFactory.GetStorage(TenantId.ToString(), module); storage.ResetQuota(""); - var domains = scopeClass.StorageFactoryConfig.GetDomainList(string.Empty, module).ToList(); + var domains = storageFactoryConfig.GetDomainList(string.Empty, module).ToList(); foreach (var domain in domains) { storage.ResetQuota(domain); @@ -79,9 +80,9 @@ namespace ASC.Web.Studio.Core.Quota class QuotaSyncScope { - internal TenantManager TenantManager { get; } - internal StorageFactoryConfig StorageFactoryConfig { get; } - internal StorageFactory StorageFactory { get; } + private TenantManager TenantManager { get; } + private StorageFactoryConfig StorageFactoryConfig { get; } + private StorageFactory StorageFactory { get; } public QuotaSyncScope(TenantManager tenantManager, StorageFactoryConfig storageFactoryConfig, StorageFactory storageFactory) { @@ -89,5 +90,12 @@ namespace ASC.Web.Studio.Core.Quota StorageFactoryConfig = storageFactoryConfig; StorageFactory = storageFactory; } + + public void Deconstruct(out TenantManager tenantManager, out StorageFactoryConfig storageFactoryConfig, out StorageFactory storageFactory ) + { + tenantManager = TenantManager; + storageFactoryConfig = StorageFactoryConfig; + storageFactory = StorageFactory; + } } } \ No newline at end of file From 32f570784b22b4e9696f0487aa176db7f13baef8 Mon Sep 17 00:00:00 2001 From: SuhorukovAnton <62381554+SuhorukovAnton@users.noreply.github.com> Date: Mon, 31 Aug 2020 12:01:23 +0300 Subject: [PATCH 09/18] scope: fix --- .../Configuration/AmiPublicDnsSyncService.cs | 22 +++++++++- .../ASC.Core.Common/Notify/EmailSenderSink.cs | 40 +++++++++++++++++-- .../Notify/JabberSenderSink.cs | 32 ++++++++++++++- .../Tests/TopSubscriptionProviderTest.cs | 28 ++++++++++--- .../ASC.Core.Common/Tests/UserManagerTest.cs | 26 ++++++++++-- 5 files changed, 131 insertions(+), 17 deletions(-) diff --git a/common/ASC.Core.Common/Configuration/AmiPublicDnsSyncService.cs b/common/ASC.Core.Common/Configuration/AmiPublicDnsSyncService.cs index 2908742fec..619ce348f3 100644 --- a/common/ASC.Core.Common/Configuration/AmiPublicDnsSyncService.cs +++ b/common/ASC.Core.Common/Configuration/AmiPublicDnsSyncService.cs @@ -52,8 +52,8 @@ namespace ASC.Core.Configuration public static void Synchronize() { using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - var coreBaseSettings = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); + (var tenantManager, var coreBaseSettings) = scopeClass; if (coreBaseSettings.Standalone) { var tenants = tenantManager.GetTenants(false).Where(t => MappedDomainNotSettedByUser(t.MappedDomain)); @@ -95,4 +95,22 @@ namespace ASC.Core.Configuration return null; } } + + public class AmiPublicDnsSyncServiceScope + { + private TenantManager TenantManager { get; } + private CoreBaseSettings CoreBaseSettings { get; } + + public AmiPublicDnsSyncServiceScope(TenantManager tenantManager, CoreBaseSettings coreBaseSettings) + { + TenantManager = tenantManager; + CoreBaseSettings = coreBaseSettings; + } + + public void Deconstruct(out TenantManager tenantManager, out CoreBaseSettings coreBaseSettings) + { + tenantManager = TenantManager; + coreBaseSettings = CoreBaseSettings; + } + } } diff --git a/common/ASC.Core.Common/Notify/EmailSenderSink.cs b/common/ASC.Core.Common/Notify/EmailSenderSink.cs index c921e5aa33..6ec92a57d3 100644 --- a/common/ASC.Core.Common/Notify/EmailSenderSink.cs +++ b/common/ASC.Core.Common/Notify/EmailSenderSink.cs @@ -28,6 +28,7 @@ using System; using System.Collections.Generic; using System.Linq; +using ASC.Common; using ASC.Common.Logging; using ASC.Common.Utils; using ASC.Core.Notify.Senders; @@ -95,15 +96,16 @@ namespace ASC.Core.Notify }; using var scope = ServiceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - var configuration = scope.ServiceProvider.GetService(); + + var scopeClass = scope.ServiceProvider.GetService(); + (var tenantManager, var coreConfiguration, var options) = scopeClass; var tenant = tenantManager.GetCurrentTenant(false); m.Tenant = tenant == null ? Tenant.DEFAULT_TENANT : tenant.TenantId; - var from = MailAddressUtils.Create(configuration.SmtpSettings.SenderAddress, configuration.SmtpSettings.SenderDisplayName); + var from = MailAddressUtils.Create(coreConfiguration.SmtpSettings.SenderAddress, coreConfiguration.SmtpSettings.SenderDisplayName); var fromTag = message.Arguments.FirstOrDefault(x => x.Tag.Equals("MessageFrom")); - if ((configuration.SmtpSettings.IsDefaultSettings || string.IsNullOrEmpty(configuration.SmtpSettings.SenderDisplayName)) && + if ((coreConfiguration.SmtpSettings.IsDefaultSettings || string.IsNullOrEmpty(coreConfiguration.SmtpSettings.SenderDisplayName)) && fromTag != null && fromTag.Value != null) { try @@ -149,4 +151,34 @@ namespace ASC.Core.Notify return m; } } + + public class EmailSenderSinkScope + { + private TenantManager TenantManager { get; } + private CoreConfiguration CoreConfiguration { get; } + private IOptionsMonitor Options { get; } + + public EmailSenderSinkScope(TenantManager tenantManager, CoreConfiguration coreConfiguration, IOptionsMonitor options) + { + TenantManager = tenantManager; + CoreConfiguration = coreConfiguration; + Options = options; + } + + public void Deconstruct(out TenantManager tenantManager, out CoreConfiguration coreConfiguration, out IOptionsMonitor optionsMonitor) + { + tenantManager = TenantManager; + coreConfiguration = CoreConfiguration; + optionsMonitor = Options; + } + } + + public static class EmailSenderSinkExtension + { + public static DIHelper AddEmailSenderSinkService(this DIHelper services) + { + services.TryAddScoped(); + return services; + } + } } \ No newline at end of file diff --git a/common/ASC.Core.Common/Notify/JabberSenderSink.cs b/common/ASC.Core.Common/Notify/JabberSenderSink.cs index 4735cf86db..80804e5a68 100644 --- a/common/ASC.Core.Common/Notify/JabberSenderSink.cs +++ b/common/ASC.Core.Common/Notify/JabberSenderSink.cs @@ -26,6 +26,7 @@ using System; +using ASC.Common; using ASC.Core.Notify.Senders; using ASC.Core.Tenants; using ASC.Notify.Messages; @@ -54,8 +55,8 @@ namespace ASC.Core.Notify try { using var scope = ServiceProvider.CreateScope(); - var userManager = scope.ServiceProvider.GetService(); - var tenantManager = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); + (var userManager, var tenantManager) = scopeClass; var result = SendResult.OK; var username = userManager.GetUsers(new Guid(message.Recipient.ID)).UserName; if (string.IsNullOrEmpty(username)) @@ -87,4 +88,31 @@ namespace ASC.Core.Notify } } } + + public class JabberSenderSinkScope + { + private UserManager UserManager { get; } + private TenantManager TenantManager { get; } + + public JabberSenderSinkScope(UserManager userManager, TenantManager tenantManager) + { + TenantManager = tenantManager; + UserManager = userManager; + } + + public void Deconstruct(out UserManager userManager, out TenantManager tenantManager) + { + userManager = UserManager; + tenantManager = TenantManager; + } + } + + public static class JabberSenderSinkExtension + { + public static DIHelper AddJabberSenderSinkService(this DIHelper services) + { + services.TryAddScoped(); + return services; + } + } } diff --git a/common/ASC.Core.Common/Tests/TopSubscriptionProviderTest.cs b/common/ASC.Core.Common/Tests/TopSubscriptionProviderTest.cs index da4565a688..e84efd0e80 100644 --- a/common/ASC.Core.Common/Tests/TopSubscriptionProviderTest.cs +++ b/common/ASC.Core.Common/Tests/TopSubscriptionProviderTest.cs @@ -60,10 +60,8 @@ namespace ASC.Core.Common.Tests public void CreateProviders() { using var scope = serviceProvider.CreateScope(); - var tenantManager = scope.ServiceProvider.GetService(); - var subscriptionManager = scope.ServiceProvider.GetService(); - tenantManager.SetCurrentTenant(tenant); - + var scopeClass = scope.ServiceProvider.GetService(); + (var tenantManager, var subscriptionManager, var recipientProviderImpl) = scopeClass; tenant = new Tenants.Tenant(0, "teamlab"); sourceId = "6045b68c-2c2e-42db-9e53-c272e814c4ad"; actionId = "NewCommentForTask"; @@ -72,7 +70,6 @@ namespace ASC.Core.Common.Tests testRec = new DirectRecipient("ff0c4e13-1831-43c2-91ce-7b7beb56179b", null); //Oliver Khan testRec2 = new DirectRecipient("0017794f-aeb7-49a5-8817-9e870e02bd3f", null); //Якутова Юлия - recProvider = scope.ServiceProvider.GetService(); var directSubProvider = new DirectSubscriptionProvider(sourceId, subscriptionManager, recProvider); subProvider = new TopSubscriptionProvider(recProvider, directSubProvider); } @@ -146,5 +143,26 @@ namespace ASC.Core.Common.Tests } } } + + public class TopSubscriptionProviderTestScope + { + private TenantManager TenantManager { get; } + private SubscriptionManager SubscriptionManager { get; } + private RecipientProviderImpl RecipientProviderImpl { get; } + + public TopSubscriptionProviderTestScope(TenantManager tenantManager, SubscriptionManager subscriptionManager, RecipientProviderImpl recipientProviderImpl) + { + TenantManager = tenantManager; + SubscriptionManager = subscriptionManager; + RecipientProviderImpl = recipientProviderImpl; + } + + public void Deconstruct(out TenantManager tenantManager, out SubscriptionManager subscriptionManager, out RecipientProviderImpl recipientProviderImpl) + { + tenantManager = TenantManager; + subscriptionManager = SubscriptionManager; + recipientProviderImpl = RecipientProviderImpl; + } + } } #endif \ No newline at end of file diff --git a/common/ASC.Core.Common/Tests/UserManagerTest.cs b/common/ASC.Core.Common/Tests/UserManagerTest.cs index 9e2633ec74..919124afff 100644 --- a/common/ASC.Core.Common/Tests/UserManagerTest.cs +++ b/common/ASC.Core.Common/Tests/UserManagerTest.cs @@ -85,8 +85,8 @@ namespace ASC.Core.Common.Tests public void DepartmentManagers() { using var scope = ServiceProvider.CreateScope(); - var userManager = scope.ServiceProvider.GetService(); - var tenantManager = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); + (var userManager, var tenantManager) = scopeClass; var tenant = tenantManager.SetCurrentTenant(1024); var deps = userManager.GetDepartments(); @@ -114,8 +114,8 @@ namespace ASC.Core.Common.Tests public void UserGroupsPerformanceTest() { using var scope = ServiceProvider.CreateScope(); - var userManager = scope.ServiceProvider.GetService(); - var tenantManager = scope.ServiceProvider.GetService(); + var scopeClass = scope.ServiceProvider.GetService(); + (var userManager, var tenantManager) = scopeClass; var tenant = tenantManager.SetCurrentTenant(0); foreach (var u in userManager.GetUsers()) @@ -149,5 +149,23 @@ namespace ASC.Core.Common.Tests stopwatch.Stop(); } } + + public class UserManagerTestScope + { + private UserManager UserManager { get; } + private TenantManager TenantManager { get; } + + public UserManagerTestScope(UserManager userManager, TenantManager tenantManager) + { + UserManager = userManager; + TenantManager = tenantManager; + } + + public void Deconstruct(out UserManager userManager, out TenantManager tenantManager) + { + userManager = UserManager; + tenantManager = TenantManager; + } + } } #endif From 897f3c910e8ae0617a5c51fe17d70e3b733c889a Mon Sep 17 00:00:00 2001 From: pavelbannov Date: Fri, 4 Sep 2020 12:06:30 +0300 Subject: [PATCH 10/18] Sln: removed *_Ubuntu configuration --- ASC.Web.sln | 112 ------------------ .../Configuration/AmiPublicDnsSyncService.cs | 9 +- .../ASC.Core.Common/Notify/EmailSenderSink.cs | 18 ++- .../Notify/JabberSenderSink.cs | 5 +- .../Notify/Senders/AWSSender.cs | 15 +-- .../Notify/Senders/SmtpSender.cs | 15 +-- 6 files changed, 23 insertions(+), 151 deletions(-) diff --git a/ASC.Web.sln b/ASC.Web.sln index 83da961eff..5e6e9bb1c6 100644 --- a/ASC.Web.sln +++ b/ASC.Web.sln @@ -70,228 +70,116 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {90183112-BCD6-4E16-9CA2-12231930DAB4}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {90183112-BCD6-4E16-9CA2-12231930DAB4}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {90183112-BCD6-4E16-9CA2-12231930DAB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {90183112-BCD6-4E16-9CA2-12231930DAB4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {90183112-BCD6-4E16-9CA2-12231930DAB4}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {90183112-BCD6-4E16-9CA2-12231930DAB4}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {90183112-BCD6-4E16-9CA2-12231930DAB4}.Release|Any CPU.ActiveCfg = Release|Any CPU {90183112-BCD6-4E16-9CA2-12231930DAB4}.Release|Any CPU.Build.0 = Release|Any CPU - {4AA9F8E3-2F48-44DA-B6C5-37ED7A4739C1}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {4AA9F8E3-2F48-44DA-B6C5-37ED7A4739C1}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {4AA9F8E3-2F48-44DA-B6C5-37ED7A4739C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4AA9F8E3-2F48-44DA-B6C5-37ED7A4739C1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4AA9F8E3-2F48-44DA-B6C5-37ED7A4739C1}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {4AA9F8E3-2F48-44DA-B6C5-37ED7A4739C1}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {4AA9F8E3-2F48-44DA-B6C5-37ED7A4739C1}.Release|Any CPU.ActiveCfg = Release|Any CPU {4AA9F8E3-2F48-44DA-B6C5-37ED7A4739C1}.Release|Any CPU.Build.0 = Release|Any CPU - {EB8F47B3-39DE-4B7D-8EC6-01726368B45D}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {EB8F47B3-39DE-4B7D-8EC6-01726368B45D}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {EB8F47B3-39DE-4B7D-8EC6-01726368B45D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EB8F47B3-39DE-4B7D-8EC6-01726368B45D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EB8F47B3-39DE-4B7D-8EC6-01726368B45D}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {EB8F47B3-39DE-4B7D-8EC6-01726368B45D}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {EB8F47B3-39DE-4B7D-8EC6-01726368B45D}.Release|Any CPU.ActiveCfg = Release|Any CPU {EB8F47B3-39DE-4B7D-8EC6-01726368B45D}.Release|Any CPU.Build.0 = Release|Any CPU - {A51D0454-4AFA-46DE-89D4-B03D37E1816C}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {A51D0454-4AFA-46DE-89D4-B03D37E1816C}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {A51D0454-4AFA-46DE-89D4-B03D37E1816C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A51D0454-4AFA-46DE-89D4-B03D37E1816C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A51D0454-4AFA-46DE-89D4-B03D37E1816C}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {A51D0454-4AFA-46DE-89D4-B03D37E1816C}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {A51D0454-4AFA-46DE-89D4-B03D37E1816C}.Release|Any CPU.ActiveCfg = Release|Any CPU {A51D0454-4AFA-46DE-89D4-B03D37E1816C}.Release|Any CPU.Build.0 = Release|Any CPU - {BE4816E7-7CD2-4D9B-ABC6-D9E5C04E3926}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {BE4816E7-7CD2-4D9B-ABC6-D9E5C04E3926}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {BE4816E7-7CD2-4D9B-ABC6-D9E5C04E3926}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BE4816E7-7CD2-4D9B-ABC6-D9E5C04E3926}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BE4816E7-7CD2-4D9B-ABC6-D9E5C04E3926}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {BE4816E7-7CD2-4D9B-ABC6-D9E5C04E3926}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {BE4816E7-7CD2-4D9B-ABC6-D9E5C04E3926}.Release|Any CPU.ActiveCfg = Release|Any CPU {BE4816E7-7CD2-4D9B-ABC6-D9E5C04E3926}.Release|Any CPU.Build.0 = Release|Any CPU - {62C49C91-1A5A-4C0D-A3B3-A9AE8C9718CE}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {62C49C91-1A5A-4C0D-A3B3-A9AE8C9718CE}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {62C49C91-1A5A-4C0D-A3B3-A9AE8C9718CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {62C49C91-1A5A-4C0D-A3B3-A9AE8C9718CE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {62C49C91-1A5A-4C0D-A3B3-A9AE8C9718CE}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {62C49C91-1A5A-4C0D-A3B3-A9AE8C9718CE}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {62C49C91-1A5A-4C0D-A3B3-A9AE8C9718CE}.Release|Any CPU.ActiveCfg = Release|Any CPU {62C49C91-1A5A-4C0D-A3B3-A9AE8C9718CE}.Release|Any CPU.Build.0 = Release|Any CPU - {3ABB21D3-D990-4005-9EEF-701A93948C27}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {3ABB21D3-D990-4005-9EEF-701A93948C27}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {3ABB21D3-D990-4005-9EEF-701A93948C27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3ABB21D3-D990-4005-9EEF-701A93948C27}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3ABB21D3-D990-4005-9EEF-701A93948C27}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {3ABB21D3-D990-4005-9EEF-701A93948C27}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {3ABB21D3-D990-4005-9EEF-701A93948C27}.Release|Any CPU.ActiveCfg = Release|Any CPU {3ABB21D3-D990-4005-9EEF-701A93948C27}.Release|Any CPU.Build.0 = Release|Any CPU - {481B0D9C-B2F8-4DE9-8597-BA8D24585099}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {481B0D9C-B2F8-4DE9-8597-BA8D24585099}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {481B0D9C-B2F8-4DE9-8597-BA8D24585099}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {481B0D9C-B2F8-4DE9-8597-BA8D24585099}.Debug|Any CPU.Build.0 = Debug|Any CPU - {481B0D9C-B2F8-4DE9-8597-BA8D24585099}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {481B0D9C-B2F8-4DE9-8597-BA8D24585099}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {481B0D9C-B2F8-4DE9-8597-BA8D24585099}.Release|Any CPU.ActiveCfg = Release|Any CPU {481B0D9C-B2F8-4DE9-8597-BA8D24585099}.Release|Any CPU.Build.0 = Release|Any CPU - {02C40A64-FE22-41D0-9037-69F0D6F787A9}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {02C40A64-FE22-41D0-9037-69F0D6F787A9}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {02C40A64-FE22-41D0-9037-69F0D6F787A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {02C40A64-FE22-41D0-9037-69F0D6F787A9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {02C40A64-FE22-41D0-9037-69F0D6F787A9}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {02C40A64-FE22-41D0-9037-69F0D6F787A9}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {02C40A64-FE22-41D0-9037-69F0D6F787A9}.Release|Any CPU.ActiveCfg = Release|Any CPU {02C40A64-FE22-41D0-9037-69F0D6F787A9}.Release|Any CPU.Build.0 = Release|Any CPU - {988536C1-4B89-4649-8F77-5C16F55D95D1}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {988536C1-4B89-4649-8F77-5C16F55D95D1}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {988536C1-4B89-4649-8F77-5C16F55D95D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {988536C1-4B89-4649-8F77-5C16F55D95D1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {988536C1-4B89-4649-8F77-5C16F55D95D1}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {988536C1-4B89-4649-8F77-5C16F55D95D1}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {988536C1-4B89-4649-8F77-5C16F55D95D1}.Release|Any CPU.ActiveCfg = Release|Any CPU {988536C1-4B89-4649-8F77-5C16F55D95D1}.Release|Any CPU.Build.0 = Release|Any CPU - {BD8A18A5-60C5-4411-9719-0AA11B4BE0E9}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {BD8A18A5-60C5-4411-9719-0AA11B4BE0E9}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {BD8A18A5-60C5-4411-9719-0AA11B4BE0E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BD8A18A5-60C5-4411-9719-0AA11B4BE0E9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BD8A18A5-60C5-4411-9719-0AA11B4BE0E9}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {BD8A18A5-60C5-4411-9719-0AA11B4BE0E9}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {BD8A18A5-60C5-4411-9719-0AA11B4BE0E9}.Release|Any CPU.ActiveCfg = Release|Any CPU {BD8A18A5-60C5-4411-9719-0AA11B4BE0E9}.Release|Any CPU.Build.0 = Release|Any CPU - {2FF2177F-2D1A-4396-84EB-51F14FD99385}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {2FF2177F-2D1A-4396-84EB-51F14FD99385}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {2FF2177F-2D1A-4396-84EB-51F14FD99385}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2FF2177F-2D1A-4396-84EB-51F14FD99385}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2FF2177F-2D1A-4396-84EB-51F14FD99385}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {2FF2177F-2D1A-4396-84EB-51F14FD99385}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {2FF2177F-2D1A-4396-84EB-51F14FD99385}.Release|Any CPU.ActiveCfg = Release|Any CPU {2FF2177F-2D1A-4396-84EB-51F14FD99385}.Release|Any CPU.Build.0 = Release|Any CPU - {B0431EC9-21D8-4D96-B333-6DD430031C82}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {B0431EC9-21D8-4D96-B333-6DD430031C82}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {B0431EC9-21D8-4D96-B333-6DD430031C82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B0431EC9-21D8-4D96-B333-6DD430031C82}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B0431EC9-21D8-4D96-B333-6DD430031C82}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {B0431EC9-21D8-4D96-B333-6DD430031C82}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {B0431EC9-21D8-4D96-B333-6DD430031C82}.Release|Any CPU.ActiveCfg = Release|Any CPU {B0431EC9-21D8-4D96-B333-6DD430031C82}.Release|Any CPU.Build.0 = Release|Any CPU - {104D045A-F9CC-4DD7-B04D-8DA7543435DD}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {104D045A-F9CC-4DD7-B04D-8DA7543435DD}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {104D045A-F9CC-4DD7-B04D-8DA7543435DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {104D045A-F9CC-4DD7-B04D-8DA7543435DD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {104D045A-F9CC-4DD7-B04D-8DA7543435DD}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {104D045A-F9CC-4DD7-B04D-8DA7543435DD}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {104D045A-F9CC-4DD7-B04D-8DA7543435DD}.Release|Any CPU.ActiveCfg = Release|Any CPU {104D045A-F9CC-4DD7-B04D-8DA7543435DD}.Release|Any CPU.Build.0 = Release|Any CPU - {8484A675-1C93-4D87-8FF2-7530A5711208}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {8484A675-1C93-4D87-8FF2-7530A5711208}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {8484A675-1C93-4D87-8FF2-7530A5711208}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8484A675-1C93-4D87-8FF2-7530A5711208}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8484A675-1C93-4D87-8FF2-7530A5711208}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {8484A675-1C93-4D87-8FF2-7530A5711208}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {8484A675-1C93-4D87-8FF2-7530A5711208}.Release|Any CPU.ActiveCfg = Release|Any CPU {8484A675-1C93-4D87-8FF2-7530A5711208}.Release|Any CPU.Build.0 = Release|Any CPU - {E3567AB9-0926-444D-A0D0-A369D5890EAA}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {E3567AB9-0926-444D-A0D0-A369D5890EAA}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {E3567AB9-0926-444D-A0D0-A369D5890EAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E3567AB9-0926-444D-A0D0-A369D5890EAA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E3567AB9-0926-444D-A0D0-A369D5890EAA}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {E3567AB9-0926-444D-A0D0-A369D5890EAA}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {E3567AB9-0926-444D-A0D0-A369D5890EAA}.Release|Any CPU.ActiveCfg = Release|Any CPU {E3567AB9-0926-444D-A0D0-A369D5890EAA}.Release|Any CPU.Build.0 = Release|Any CPU - {C8F410B4-B83B-47B9-9ECD-07590A8750A7}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {C8F410B4-B83B-47B9-9ECD-07590A8750A7}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {C8F410B4-B83B-47B9-9ECD-07590A8750A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C8F410B4-B83B-47B9-9ECD-07590A8750A7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C8F410B4-B83B-47B9-9ECD-07590A8750A7}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {C8F410B4-B83B-47B9-9ECD-07590A8750A7}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {C8F410B4-B83B-47B9-9ECD-07590A8750A7}.Release|Any CPU.ActiveCfg = Release|Any CPU {C8F410B4-B83B-47B9-9ECD-07590A8750A7}.Release|Any CPU.Build.0 = Release|Any CPU - {DB50E2EF-B4D8-493A-8568-29CAC0DF9062}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {DB50E2EF-B4D8-493A-8568-29CAC0DF9062}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {DB50E2EF-B4D8-493A-8568-29CAC0DF9062}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DB50E2EF-B4D8-493A-8568-29CAC0DF9062}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DB50E2EF-B4D8-493A-8568-29CAC0DF9062}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {DB50E2EF-B4D8-493A-8568-29CAC0DF9062}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {DB50E2EF-B4D8-493A-8568-29CAC0DF9062}.Release|Any CPU.ActiveCfg = Release|Any CPU {DB50E2EF-B4D8-493A-8568-29CAC0DF9062}.Release|Any CPU.Build.0 = Release|Any CPU - {AE1A0E06-6CD4-4E1D-8209-22BBBD6D5652}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {AE1A0E06-6CD4-4E1D-8209-22BBBD6D5652}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {AE1A0E06-6CD4-4E1D-8209-22BBBD6D5652}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AE1A0E06-6CD4-4E1D-8209-22BBBD6D5652}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AE1A0E06-6CD4-4E1D-8209-22BBBD6D5652}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {AE1A0E06-6CD4-4E1D-8209-22BBBD6D5652}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {AE1A0E06-6CD4-4E1D-8209-22BBBD6D5652}.Release|Any CPU.ActiveCfg = Release|Any CPU {AE1A0E06-6CD4-4E1D-8209-22BBBD6D5652}.Release|Any CPU.Build.0 = Release|Any CPU - {77BA2F61-6155-4283-BB39-F8E42F46A0B0}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {77BA2F61-6155-4283-BB39-F8E42F46A0B0}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {77BA2F61-6155-4283-BB39-F8E42F46A0B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {77BA2F61-6155-4283-BB39-F8E42F46A0B0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {77BA2F61-6155-4283-BB39-F8E42F46A0B0}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {77BA2F61-6155-4283-BB39-F8E42F46A0B0}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {77BA2F61-6155-4283-BB39-F8E42F46A0B0}.Release|Any CPU.ActiveCfg = Release|Any CPU {77BA2F61-6155-4283-BB39-F8E42F46A0B0}.Release|Any CPU.Build.0 = Release|Any CPU - {5D41FFFF-816C-40B2-95CD-E2DDDCB83784}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {5D41FFFF-816C-40B2-95CD-E2DDDCB83784}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {5D41FFFF-816C-40B2-95CD-E2DDDCB83784}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5D41FFFF-816C-40B2-95CD-E2DDDCB83784}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5D41FFFF-816C-40B2-95CD-E2DDDCB83784}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {5D41FFFF-816C-40B2-95CD-E2DDDCB83784}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {5D41FFFF-816C-40B2-95CD-E2DDDCB83784}.Release|Any CPU.ActiveCfg = Release|Any CPU {5D41FFFF-816C-40B2-95CD-E2DDDCB83784}.Release|Any CPU.Build.0 = Release|Any CPU - {C2BB03A0-C35B-433F-96D4-3A06CBC06AD7}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {C2BB03A0-C35B-433F-96D4-3A06CBC06AD7}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {C2BB03A0-C35B-433F-96D4-3A06CBC06AD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C2BB03A0-C35B-433F-96D4-3A06CBC06AD7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C2BB03A0-C35B-433F-96D4-3A06CBC06AD7}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {C2BB03A0-C35B-433F-96D4-3A06CBC06AD7}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {C2BB03A0-C35B-433F-96D4-3A06CBC06AD7}.Release|Any CPU.ActiveCfg = Release|Any CPU {C2BB03A0-C35B-433F-96D4-3A06CBC06AD7}.Release|Any CPU.Build.0 = Release|Any CPU - {04A56018-C41E-4634-A185-A13E9250C75A}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {04A56018-C41E-4634-A185-A13E9250C75A}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {04A56018-C41E-4634-A185-A13E9250C75A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {04A56018-C41E-4634-A185-A13E9250C75A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {04A56018-C41E-4634-A185-A13E9250C75A}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {04A56018-C41E-4634-A185-A13E9250C75A}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {04A56018-C41E-4634-A185-A13E9250C75A}.Release|Any CPU.ActiveCfg = Release|Any CPU {04A56018-C41E-4634-A185-A13E9250C75A}.Release|Any CPU.Build.0 = Release|Any CPU - {07CCC11F-76CB-448E-B15A-72E09FBB348B}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {07CCC11F-76CB-448E-B15A-72E09FBB348B}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {07CCC11F-76CB-448E-B15A-72E09FBB348B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {07CCC11F-76CB-448E-B15A-72E09FBB348B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {07CCC11F-76CB-448E-B15A-72E09FBB348B}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {07CCC11F-76CB-448E-B15A-72E09FBB348B}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {07CCC11F-76CB-448E-B15A-72E09FBB348B}.Release|Any CPU.ActiveCfg = Release|Any CPU {07CCC11F-76CB-448E-B15A-72E09FBB348B}.Release|Any CPU.Build.0 = Release|Any CPU - {1D2F61B2-B1F4-45F0-83CA-03370FD6E62C}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {1D2F61B2-B1F4-45F0-83CA-03370FD6E62C}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {1D2F61B2-B1F4-45F0-83CA-03370FD6E62C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1D2F61B2-B1F4-45F0-83CA-03370FD6E62C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1D2F61B2-B1F4-45F0-83CA-03370FD6E62C}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {1D2F61B2-B1F4-45F0-83CA-03370FD6E62C}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {1D2F61B2-B1F4-45F0-83CA-03370FD6E62C}.Release|Any CPU.ActiveCfg = Release|Any CPU {1D2F61B2-B1F4-45F0-83CA-03370FD6E62C}.Release|Any CPU.Build.0 = Release|Any CPU - {DE3DAF51-FB29-41FC-AF41-A4BA8D91BFB6}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {DE3DAF51-FB29-41FC-AF41-A4BA8D91BFB6}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {DE3DAF51-FB29-41FC-AF41-A4BA8D91BFB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DE3DAF51-FB29-41FC-AF41-A4BA8D91BFB6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DE3DAF51-FB29-41FC-AF41-A4BA8D91BFB6}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {DE3DAF51-FB29-41FC-AF41-A4BA8D91BFB6}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {DE3DAF51-FB29-41FC-AF41-A4BA8D91BFB6}.Release|Any CPU.ActiveCfg = Release|Any CPU {DE3DAF51-FB29-41FC-AF41-A4BA8D91BFB6}.Release|Any CPU.Build.0 = Release|Any CPU - {F0A39728-940D-4DBE-A37A-05D4EB57F342}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {F0A39728-940D-4DBE-A37A-05D4EB57F342}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {F0A39728-940D-4DBE-A37A-05D4EB57F342}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F0A39728-940D-4DBE-A37A-05D4EB57F342}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F0A39728-940D-4DBE-A37A-05D4EB57F342}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {F0A39728-940D-4DBE-A37A-05D4EB57F342}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {F0A39728-940D-4DBE-A37A-05D4EB57F342}.Release|Any CPU.ActiveCfg = Release|Any CPU {F0A39728-940D-4DBE-A37A-05D4EB57F342}.Release|Any CPU.Build.0 = Release|Any CPU - {2DADEAD3-0FE9-4199-9817-41A32E6BF450}.Debug_Ubuntu|Any CPU.ActiveCfg = Debug|Any CPU - {2DADEAD3-0FE9-4199-9817-41A32E6BF450}.Debug_Ubuntu|Any CPU.Build.0 = Debug|Any CPU {2DADEAD3-0FE9-4199-9817-41A32E6BF450}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2DADEAD3-0FE9-4199-9817-41A32E6BF450}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2DADEAD3-0FE9-4199-9817-41A32E6BF450}.Release_Ubuntu|Any CPU.ActiveCfg = Release|Any CPU - {2DADEAD3-0FE9-4199-9817-41A32E6BF450}.Release_Ubuntu|Any CPU.Build.0 = Release|Any CPU {2DADEAD3-0FE9-4199-9817-41A32E6BF450}.Release|Any CPU.ActiveCfg = Release|Any CPU {2DADEAD3-0FE9-4199-9817-41A32E6BF450}.Release|Any CPU.Build.0 = Release|Any CPU {02356BD7-7E99-457B-BEFF-090CE4DF067D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU diff --git a/common/ASC.Core.Common/Configuration/AmiPublicDnsSyncService.cs b/common/ASC.Core.Common/Configuration/AmiPublicDnsSyncService.cs index 619ce348f3..8be9b6c59f 100644 --- a/common/ASC.Core.Common/Configuration/AmiPublicDnsSyncService.cs +++ b/common/ASC.Core.Common/Configuration/AmiPublicDnsSyncService.cs @@ -53,7 +53,7 @@ namespace ASC.Core.Configuration { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var coreBaseSettings) = scopeClass; + var (tenantManager, coreBaseSettings) = scopeClass; if (coreBaseSettings.Standalone) { var tenants = tenantManager.GetTenants(false).Where(t => MappedDomainNotSettedByUser(t.MappedDomain)); @@ -107,10 +107,7 @@ namespace ASC.Core.Configuration CoreBaseSettings = coreBaseSettings; } - public void Deconstruct(out TenantManager tenantManager, out CoreBaseSettings coreBaseSettings) - { - tenantManager = TenantManager; - coreBaseSettings = CoreBaseSettings; - } + public void Deconstruct(out TenantManager tenantManager, out CoreBaseSettings coreBaseSettings) => + (tenantManager, coreBaseSettings) = (TenantManager, CoreBaseSettings); } } diff --git a/common/ASC.Core.Common/Notify/EmailSenderSink.cs b/common/ASC.Core.Common/Notify/EmailSenderSink.cs index 6ec92a57d3..7400a7520c 100644 --- a/common/ASC.Core.Common/Notify/EmailSenderSink.cs +++ b/common/ASC.Core.Common/Notify/EmailSenderSink.cs @@ -95,17 +95,17 @@ namespace ASC.Core.Notify CreationDate = DateTime.UtcNow.Ticks, }; - using var scope = ServiceProvider.CreateScope(); - + using var scope = ServiceProvider.CreateScope(); + var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var coreConfiguration, var options) = scopeClass; + var (tenantManager, configuration, options) = scopeClass; var tenant = tenantManager.GetCurrentTenant(false); m.Tenant = tenant == null ? Tenant.DEFAULT_TENANT : tenant.TenantId; - var from = MailAddressUtils.Create(coreConfiguration.SmtpSettings.SenderAddress, coreConfiguration.SmtpSettings.SenderDisplayName); + var from = MailAddressUtils.Create(configuration.SmtpSettings.SenderAddress, configuration.SmtpSettings.SenderDisplayName); var fromTag = message.Arguments.FirstOrDefault(x => x.Tag.Equals("MessageFrom")); - if ((coreConfiguration.SmtpSettings.IsDefaultSettings || string.IsNullOrEmpty(coreConfiguration.SmtpSettings.SenderDisplayName)) && + if ((configuration.SmtpSettings.IsDefaultSettings || string.IsNullOrEmpty(configuration.SmtpSettings.SenderDisplayName)) && fromTag != null && fromTag.Value != null) { try @@ -165,12 +165,8 @@ namespace ASC.Core.Notify Options = options; } - public void Deconstruct(out TenantManager tenantManager, out CoreConfiguration coreConfiguration, out IOptionsMonitor optionsMonitor) - { - tenantManager = TenantManager; - coreConfiguration = CoreConfiguration; - optionsMonitor = Options; - } + public void Deconstruct(out TenantManager tenantManager, out CoreConfiguration coreConfiguration, out IOptionsMonitor optionsMonitor) + => (tenantManager, coreConfiguration, optionsMonitor) = (TenantManager, CoreConfiguration, Options); } public static class EmailSenderSinkExtension diff --git a/common/ASC.Core.Common/Notify/JabberSenderSink.cs b/common/ASC.Core.Common/Notify/JabberSenderSink.cs index 80804e5a68..6fccdeaf37 100644 --- a/common/ASC.Core.Common/Notify/JabberSenderSink.cs +++ b/common/ASC.Core.Common/Notify/JabberSenderSink.cs @@ -101,10 +101,7 @@ namespace ASC.Core.Notify } public void Deconstruct(out UserManager userManager, out TenantManager tenantManager) - { - userManager = UserManager; - tenantManager = TenantManager; - } + => (userManager, tenantManager) = (UserManager, TenantManager); } public static class JabberSenderSinkExtension diff --git a/common/ASC.Core.Common/Notify/Senders/AWSSender.cs b/common/ASC.Core.Common/Notify/Senders/AWSSender.cs index f51cf9ab14..b2091cabf8 100644 --- a/common/ASC.Core.Common/Notify/Senders/AWSSender.cs +++ b/common/ASC.Core.Common/Notify/Senders/AWSSender.cs @@ -81,14 +81,14 @@ namespace ASC.Core.Notify.Senders Log.DebugFormat("Tenant: {0}, To: {1}", m.Tenant, m.To); using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var coreConfiguration) = scopeClass; + var (tenantManager, configuration) = scopeClass; tenantManager.SetCurrentTenant(m.Tenant); - if (!coreConfiguration.SmtpSettings.IsDefaultSettings) + if (!configuration.SmtpSettings.IsDefaultSettings) { - UseCoreSettings = true; + _useCoreSettings = true; result = base.Send(m); - UseCoreSettings = false; + _useCoreSettings = false; } else { @@ -227,7 +227,7 @@ namespace ASC.Core.Notify.Senders private bool IsRefreshNeeded() { return quota == null || (DateTime.UtcNow - lastRefresh) > refreshTimeout; - } + } } public class AWSSenderScope @@ -242,10 +242,7 @@ namespace ASC.Core.Notify.Senders } public void Deconstruct(out TenantManager tenantManager, out CoreConfiguration coreConfiguration) - { - tenantManager = TenantManager; - coreConfiguration = CoreConfiguration; - } + => (tenantManager, coreConfiguration) = (TenantManager, CoreConfiguration); } public static class AWSSenderExtension diff --git a/common/ASC.Core.Common/Notify/Senders/SmtpSender.cs b/common/ASC.Core.Common/Notify/Senders/SmtpSender.cs index a7b68f69f0..fb3d9d0a0e 100644 --- a/common/ASC.Core.Common/Notify/Senders/SmtpSender.cs +++ b/common/ASC.Core.Common/Notify/Senders/SmtpSender.cs @@ -65,7 +65,7 @@ namespace ASC.Core.Notify.Senders private int Port { get; set; } private bool Ssl { get; set; } private ICredentials Credentials { get; set; } - protected bool UseCoreSettings { get; set; } + protected bool _useCoreSettings { get; set; } const int NETWORK_TIMEOUT = 30000; public SmtpSender( @@ -81,7 +81,7 @@ namespace ASC.Core.Notify.Senders { if (properties.ContainsKey("useCoreSettings") && bool.Parse(properties["useCoreSettings"])) { - UseCoreSettings = true; + _useCoreSettings = true; } else { @@ -113,7 +113,7 @@ namespace ASC.Core.Notify.Senders { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var coreConfiguration) = scopeClass; + var (tenantManager, configuration) = scopeClass; tenantManager.SetCurrentTenant(m.Tenant); var smtpClient = GetSmtpClient(); @@ -122,8 +122,8 @@ namespace ASC.Core.Notify.Senders { try { - if (UseCoreSettings) - InitUseCoreSettings(coreConfiguration); + if (_useCoreSettings) + InitUseCoreSettings(configuration); var mail = BuildMailMessage(m); @@ -334,10 +334,7 @@ namespace ASC.Core.Notify.Senders } public void Deconstruct(out TenantManager tenantManager, out CoreConfiguration coreConfiguration) - { - tenantManager = TenantManager; - coreConfiguration = CoreConfiguration; - } + => (tenantManager, coreConfiguration) = (TenantManager, CoreConfiguration); } public static class SmtpSenderExtension From dc98b02d4fa69ae14f0ec1c571871170ab8a10da Mon Sep 17 00:00:00 2001 From: pavelbannov Date: Fri, 4 Sep 2020 12:20:12 +0300 Subject: [PATCH 11/18] fix --- common/ASC.Core.Common/Users/DisplayUserSettings.cs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/common/ASC.Core.Common/Users/DisplayUserSettings.cs b/common/ASC.Core.Common/Users/DisplayUserSettings.cs index 47b20a1038..08e9a974cc 100644 --- a/common/ASC.Core.Common/Users/DisplayUserSettings.cs +++ b/common/ASC.Core.Common/Users/DisplayUserSettings.cs @@ -97,12 +97,14 @@ namespace ASC.Web.Core.Users { public static DIHelper AddDisplayUserSettingsService(this DIHelper services) { - services.TryAddScoped(); - services.TryAddScoped(); + if (services.TryAddScoped()) + { + return services + .AddUserFormatter() + .AddUserManagerService(); + } - return services - .AddUserFormatter() - .AddUserManagerService(); + return services; } } } \ No newline at end of file From 8e3e73c74685f4a71f4c413769e2bf84a0f6aeb8 Mon Sep 17 00:00:00 2001 From: pavelbannov Date: Fri, 4 Sep 2020 13:10:19 +0300 Subject: [PATCH 12/18] Scope: fix --- .../Configuration/StorageSettings.cs | 2 - .../ASC.Data.Backup/Service/BackupWorker.cs | 43 +++++++++---------- 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/common/ASC.Data.Storage/Configuration/StorageSettings.cs b/common/ASC.Data.Storage/Configuration/StorageSettings.cs index 403aa771a5..60c9aa2e87 100644 --- a/common/ASC.Data.Storage/Configuration/StorageSettings.cs +++ b/common/ASC.Data.Storage/Configuration/StorageSettings.cs @@ -248,7 +248,6 @@ namespace ASC.Data.Storage.Configuration { if (services.TryAddScoped()) { - services.TryAddScoped(); return services .AddSettingsManagerService() .AddBaseStorageSettingsService() @@ -262,7 +261,6 @@ namespace ASC.Data.Storage.Configuration { if (services.TryAddScoped()) { - services.TryAddScoped(); return services .AddSettingsManagerService() .AddBaseStorageSettingsService() diff --git a/common/services/ASC.Data.Backup/Service/BackupWorker.cs b/common/services/ASC.Data.Backup/Service/BackupWorker.cs index 3e5ef18581..a49228e56f 100644 --- a/common/services/ASC.Data.Backup/Service/BackupWorker.cs +++ b/common/services/ASC.Data.Backup/Service/BackupWorker.cs @@ -726,19 +726,11 @@ namespace ASC.Data.Backup.Service public class FactoryProgressItem { - public BackupProgressItem BackupProgressItem { get; set; } - public RestoreProgressItem RestoreProgressItem { get; set; } - public TransferProgressItem TransferProgressItem { get; set; } + public IServiceProvider ServiceProvider { get; } - public FactoryProgressItem( - BackupProgressItem backupProgressItem, - RestoreProgressItem restoreProgressItem, - TransferProgressItem transferProgressItem - ) + public FactoryProgressItem(IServiceProvider serviceProvider) { - BackupProgressItem = backupProgressItem; - RestoreProgressItem = restoreProgressItem; - TransferProgressItem = transferProgressItem; + ServiceProvider = serviceProvider; } public BackupProgressItem CreateBackupProgressItem( @@ -749,8 +741,9 @@ namespace ASC.Data.Backup.Service string currentRegion, Dictionary configPaths) { - BackupProgressItem.Init(request, isScheduled, tempFolder, limit, currentRegion, configPaths); - return BackupProgressItem; + var item = ServiceProvider.GetService(); + item.Init(request, isScheduled, tempFolder, limit, currentRegion, configPaths); + return item; } public BackupProgressItem CreateBackupProgressItem( @@ -762,9 +755,11 @@ namespace ASC.Data.Backup.Service Dictionary configPaths ) { - BackupProgressItem.Init(schedule, isScheduled, tempFolder, limit, currentRegion, configPaths); - return BackupProgressItem; + var item = ServiceProvider.GetService(); + item.Init(schedule, isScheduled, tempFolder, limit, currentRegion, configPaths); + return item; } + public RestoreProgressItem CreateRestoreProgressItem( StartRestoreRequest request, string tempFolder, @@ -773,8 +768,9 @@ namespace ASC.Data.Backup.Service Dictionary configPaths ) { - RestoreProgressItem.Init(request, tempFolder, upgradesPath, currentRegion, configPaths); - return RestoreProgressItem; + var item = ServiceProvider.GetService(); + item.Init(request, tempFolder, upgradesPath, currentRegion, configPaths); + return item; } public TransferProgressItem CreateTransferProgressItem( @@ -788,8 +784,9 @@ namespace ASC.Data.Backup.Service Dictionary configPaths ) { - TransferProgressItem.Init(targetRegion, transferMail, tenantId, tempFolder, limit, notify, currentRegion, configPaths); - return TransferProgressItem; + var item = ServiceProvider.GetService(); + item.Init(targetRegion, transferMail, tenantId, tempFolder, limit, notify, currentRegion, configPaths); + return item; } } @@ -823,13 +820,13 @@ namespace ASC.Data.Backup.Service TransferPortalTask = transferPortalTask; } - public void Deconstruct(out TenantManager tenantManager, + public void Deconstruct(out TenantManager tenantManager, out BackupStorageFactory backupStorageFactory, - out NotifyHelper notifyHelper, - out BackupRepository backupRepository, + out NotifyHelper notifyHelper, + out BackupRepository backupRepository, out BackupWorker backupWorker, out BackupPortalTask backupPortalTask, - out RestorePortalTask restorePortalTask, + out RestorePortalTask restorePortalTask, out TransferPortalTask transferPortalTask) { tenantManager = TenantManager; From 020ccfd7d4ead70a001ef176574796428c1b857f Mon Sep 17 00:00:00 2001 From: pavelbannov Date: Fri, 4 Sep 2020 14:33:44 +0300 Subject: [PATCH 13/18] Scope: fix --- .../ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs | 2 +- .../Core/Core/Dao/TeamlabDao/SecurityDao.cs | 4 ++-- .../ASC.Files/Core/Core/Dao/TeamlabDao/TagDao.cs | 2 +- products/ASC.Files/Core/Core/Thirdparty/CrossDao.cs | 2 +- .../ASC.Files/Core/Core/Thirdparty/IDaoSelector.cs | 2 +- .../Core/Thirdparty/ProviderDao/ProviderDaoBase.cs | 13 ++++++------- .../Thirdparty/ProviderDao/ProviderFolderDao.cs | 2 +- .../FileOperations/FileDownloadOperation.cs | 6 +++--- .../FileOperations/FileMoveCopyOperation.cs | 10 +++++----- 9 files changed, 21 insertions(+), 22 deletions(-) diff --git a/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs b/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs index a402875949..bd6d9db169 100644 --- a/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs +++ b/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs @@ -52,7 +52,7 @@ using Microsoft.Extensions.DependencyInjection; namespace ASC.Files.Core.Data { - public class FolderDao : AbstractDao, IFolderDao + internal class FolderDao : AbstractDao, IFolderDao { private const string my = "my"; private const string common = "common"; diff --git a/products/ASC.Files/Core/Core/Dao/TeamlabDao/SecurityDao.cs b/products/ASC.Files/Core/Core/Dao/TeamlabDao/SecurityDao.cs index 5b2fc2e923..21d1d6e227 100644 --- a/products/ASC.Files/Core/Core/Dao/TeamlabDao/SecurityDao.cs +++ b/products/ASC.Files/Core/Core/Dao/TeamlabDao/SecurityDao.cs @@ -42,7 +42,7 @@ using ASC.Web.Studio.Utility; namespace ASC.Files.Core.Data { - public class SecurityDao : AbstractDao, ISecurityDao + internal class SecurityDao : AbstractDao, ISecurityDao { public SecurityDao(UserManager userManager, DbContextManager dbContextManager, @@ -361,7 +361,7 @@ namespace ASC.Files.Core.Data } } - public class SecurityTreeRecord + internal class SecurityTreeRecord { public DbFilesSecurity DbFilesSecurity { get; set; } public DbFolderTree DbFolderTree { get; set; } diff --git a/products/ASC.Files/Core/Core/Dao/TeamlabDao/TagDao.cs b/products/ASC.Files/Core/Core/Dao/TeamlabDao/TagDao.cs index 589de49258..27beb1ecf5 100644 --- a/products/ASC.Files/Core/Core/Dao/TeamlabDao/TagDao.cs +++ b/products/ASC.Files/Core/Core/Dao/TeamlabDao/TagDao.cs @@ -41,7 +41,7 @@ using ASC.Web.Studio.Utility; namespace ASC.Files.Core.Data { - public class TagDao : AbstractDao, ITagDao + internal class TagDao : AbstractDao, ITagDao { private static readonly object syncRoot = new object(); diff --git a/products/ASC.Files/Core/Core/Thirdparty/CrossDao.cs b/products/ASC.Files/Core/Core/Thirdparty/CrossDao.cs index 25765ef2ca..7f519df483 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/CrossDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/CrossDao.cs @@ -11,7 +11,7 @@ using Microsoft.Extensions.DependencyInjection; namespace ASC.Files.Core.Thirdparty { - public class CrossDao + internal class CrossDao { private IServiceProvider ServiceProvider { get; } private SetupInfo SetupInfo { get; } diff --git a/products/ASC.Files/Core/Core/Thirdparty/IDaoSelector.cs b/products/ASC.Files/Core/Core/Thirdparty/IDaoSelector.cs index a9f52218a9..9762d67257 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/IDaoSelector.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/IDaoSelector.cs @@ -31,7 +31,7 @@ using ASC.Files.Core.Security; namespace ASC.Files.Thirdparty { - public interface IDaoSelector : IDisposable + internal interface IDaoSelector : IDisposable { bool IsMatch(string id); IFileDao GetFileDao(string id); diff --git a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs index d88dc0fd89..d471d60f5e 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs @@ -45,7 +45,7 @@ using Microsoft.Extensions.DependencyInjection; namespace ASC.Files.Thirdparty.ProviderDao { - public class ProviderDaoBase : IDisposable + internal class ProviderDaoBase : IDisposable { private readonly List Selectors; @@ -124,8 +124,8 @@ namespace ASC.Files.Thirdparty.ProviderDao fromFileId, fromSelector.GetFileDao(fromFileId), fromSelector.ConvertId, toFolderId, toSelector.GetFileDao(toFolderId), toSelector.ConvertId, deleteSourceFile); - } - + } + protected File PerformCrossDaoFileCopy(string fromFileId, int toFolderId, bool deleteSourceFile) { var fromSelector = GetSelector(fromFileId); @@ -169,7 +169,7 @@ namespace ASC.Files.Thirdparty.ProviderDao } } - public class ProviderDaoBaseScope + internal class ProviderDaoBaseScope { private TenantManager TenantManager { get; } private IFolderDao FolderDao { get; } @@ -194,7 +194,7 @@ namespace ASC.Files.Thirdparty.ProviderDao { public static DIHelper AddProviderDaoBaseService(this DIHelper services) { - if (services.TryAddScoped())//here + if (services.TryAddScoped()) { services.TryAddScoped(); return services @@ -203,8 +203,7 @@ namespace ASC.Files.Thirdparty.ProviderDao .AddOneDriveSelectorService() .AddGoogleDriveSelectorService() .AddDropboxDaoSelectorService() - .AddBoxDaoSelectorService() - .AddFolderDaoService(); + .AddBoxDaoSelectorService(); } return services; diff --git a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFolderDao.cs index b38a299ebd..7624ee7a3c 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFolderDao.cs @@ -38,7 +38,7 @@ using ASC.Files.Core.Thirdparty; namespace ASC.Files.Thirdparty.ProviderDao { - public class ProviderFolderDao : ProviderDaoBase, IFolderDao + internal class ProviderFolderDao : ProviderDaoBase, IFolderDao { public ProviderFolderDao( IServiceProvider serviceProvider, diff --git a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDownloadOperation.cs b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDownloadOperation.cs index f5050a715c..d9036a93cd 100644 --- a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDownloadOperation.cs +++ b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDownloadOperation.cs @@ -82,7 +82,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations using var scope = ThirdPartyOperation.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var globalStore, var filesLinkUtility, var setupInfo, var fileConverter, var filesMessageService) = scopeClass; + var (globalStore, filesLinkUtility, _, _, _) = scopeClass; using var stream = TempStream.Create(); using (var zip = new ZipOutputStream(stream, true) { @@ -150,7 +150,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations } var scopeClass = scope.ServiceProvider.GetService(); - (var globalStore, var filesLinkUtility, var setupInfo, var fileConverter, var filesMessageService) = scopeClass; + var (globalStore, filesLinkUtility, _, _, _) = scopeClass; ReplaceLongPath(entriesPathId); if (Compress) @@ -263,7 +263,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations { if (entriesPathId == null) return; var scopeClass = scope.ServiceProvider.GetService(); - (var globalStore, var filesLinkUtility, var setupInfo, var fileConverter, var filesMessageService) = scopeClass; + var (_, _, setupInfo, fileConverter, filesMessageService) = scopeClass; var FileDao = scope.ServiceProvider.GetService>(); foreach (var path in entriesPathId.AllKeys) diff --git a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs index 7b20ec32bd..2eac7e55e8 100644 --- a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs +++ b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs @@ -129,8 +129,8 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations { Do(scope, ThirdpartyFolderId); } - } - + } + private void Do(IServiceScope scope, TTo tto) { var fileMarker = scope.ServiceProvider.GetService(); @@ -164,8 +164,8 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations needToMark.AddRange(MoveOrCopyFiles(scope, Files, toFolder, _copy)); needToMark.Distinct().ToList().ForEach(x => fileMarker.MarkAsNew(x)); - } - + } + private List> MoveOrCopyFolders(IServiceScope scope, List folderIds, Folder toFolder, bool copy) { var needToMark = new List>(); @@ -173,7 +173,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations if (folderIds.Count == 0) return needToMark; var scopeClass = scope.ServiceProvider.GetService(); - (var filesMessageService, var fileMarker, var fileUtility, var global, var entryManager) = scopeClass; + var (filesMessageService, fileMarker, _, _, _) = scopeClass; var folderDao = scope.ServiceProvider.GetService>(); var toFolderId = toFolder.ID; From 80198032a4feb4e40b630e7a5ddc8d2813dc9a0f Mon Sep 17 00:00:00 2001 From: SuhorukovAnton <62381554+SuhorukovAnton@users.noreply.github.com> Date: Mon, 7 Sep 2020 15:01:15 +0300 Subject: [PATCH 14/18] scope: refactoring --- .../Tests/TopSubscriptionProviderTest.cs | 2 +- common/ASC.Core.Common/Tests/UserManagerTest.cs | 2 +- common/ASC.Data.Reassigns/ReassignProgressItem.cs | 2 +- common/ASC.Data.Reassigns/RemoveProgressItem.cs | 2 +- .../Configuration/StorageSettings.cs | 3 ++- common/ASC.Data.Storage/StaticUploader.cs | 4 ++-- common/ASC.Data.Storage/StorageHandler.cs | 2 +- common/ASC.Data.Storage/StorageUploader.cs | 2 +- .../services/ASC.Data.Backup/Core/NotifyHelper.cs | 6 +++--- .../ASC.Data.Backup/Service/BackupWorker.cs | 6 +++--- .../services/ASC.ElasticSearch/Service/Launcher.cs | 2 +- .../services/ASC.ElasticSearch/Service/Service.cs | 2 +- .../Service/FeedAggregatorService.cs | 2 +- common/services/ASC.Notify/NotifyService.cs | 2 +- .../Core/Thirdparty/ProviderDao/ProviderDaoBase.cs | 6 +++--- .../DocumentService/DocbuilderReportsUtility.cs | 2 +- .../Core/Services/NotifyService/NotifyClient.cs | 8 ++++---- .../FileOperations/FileDeleteOperation.cs | 4 ++-- .../FileOperations/FileMarkAsReadOperation.cs | 2 +- .../FileOperations/FileMoveCopyOperation.cs | 2 +- .../WCFService/FileOperations/FileOperation.cs | 2 +- products/ASC.Files/Core/Utils/FileConverter.cs | 2 +- web/ASC.Web.Core/Notify/NotifyConfiguration.cs | 4 ++-- web/ASC.Web.Core/Notify/StudioNotifyService.cs | 2 +- .../Notify/StudioNotifyServiceSender.cs | 14 ++------------ web/ASC.Web.Core/Notify/StudioPeriodicNotify.cs | 8 ++++---- web/ASC.Web.Core/Notify/StudioWhatsNewNotify.cs | 2 +- web/ASC.Web.Core/QuotaSync.cs | 2 +- 28 files changed, 45 insertions(+), 54 deletions(-) diff --git a/common/ASC.Core.Common/Tests/TopSubscriptionProviderTest.cs b/common/ASC.Core.Common/Tests/TopSubscriptionProviderTest.cs index e84efd0e80..f78ae283c9 100644 --- a/common/ASC.Core.Common/Tests/TopSubscriptionProviderTest.cs +++ b/common/ASC.Core.Common/Tests/TopSubscriptionProviderTest.cs @@ -61,7 +61,7 @@ namespace ASC.Core.Common.Tests { using var scope = serviceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var subscriptionManager, var recipientProviderImpl) = scopeClass; + var (tenantManager, subscriptionManager, recipientProviderImpl) = scopeClass; tenant = new Tenants.Tenant(0, "teamlab"); sourceId = "6045b68c-2c2e-42db-9e53-c272e814c4ad"; actionId = "NewCommentForTask"; diff --git a/common/ASC.Core.Common/Tests/UserManagerTest.cs b/common/ASC.Core.Common/Tests/UserManagerTest.cs index 919124afff..95ed898a3d 100644 --- a/common/ASC.Core.Common/Tests/UserManagerTest.cs +++ b/common/ASC.Core.Common/Tests/UserManagerTest.cs @@ -86,7 +86,7 @@ namespace ASC.Core.Common.Tests { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var userManager, var tenantManager) = scopeClass; + var (userManager, tenantManager) = scopeClass; var tenant = tenantManager.SetCurrentTenant(1024); var deps = userManager.GetDepartments(); diff --git a/common/ASC.Data.Reassigns/ReassignProgressItem.cs b/common/ASC.Data.Reassigns/ReassignProgressItem.cs index b4afbed6c8..3a6b6ce986 100644 --- a/common/ASC.Data.Reassigns/ReassignProgressItem.cs +++ b/common/ASC.Data.Reassigns/ReassignProgressItem.cs @@ -102,7 +102,7 @@ namespace ASC.Data.Reassigns { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var coreBaseSettings, var messageService, var studioNotifyService, var securityContext, var userManager, var userPhotoManager, var displayUserSettingsHelper, var messageTarget, var options) = scopeClass; + var (tenantManager, coreBaseSettings, messageService, studioNotifyService, securityContext, userManager, userPhotoManager, displayUserSettingsHelper, messageTarget, options) = scopeClass; var logger = options.Get("ASC.Web"); var tenant = tenantManager.SetCurrentTenant(_tenantId); diff --git a/common/ASC.Data.Reassigns/RemoveProgressItem.cs b/common/ASC.Data.Reassigns/RemoveProgressItem.cs index cf933f2510..054bb6a4c3 100644 --- a/common/ASC.Data.Reassigns/RemoveProgressItem.cs +++ b/common/ASC.Data.Reassigns/RemoveProgressItem.cs @@ -98,7 +98,7 @@ namespace ASC.Data.Reassigns { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var coreBaseSettings, var messageService, var studioNotifyService, var securityContext, var userManager, var messageTarget, var webItemManagerSecurity, var storageFactory, var userFormatter, var options) = scopeClass; + var (tenantManager, coreBaseSettings, messageService, studioNotifyService, securityContext, userManager, messageTarget, webItemManagerSecurity, storageFactory, userFormatter, options) = scopeClass; var logger = options.Get("ASC.Web"); var tenant = tenantManager.SetCurrentTenant(_tenantId); var userName = userFormatter.GetUserName(User, DisplayUserNameFormat.Default); diff --git a/common/ASC.Data.Storage/Configuration/StorageSettings.cs b/common/ASC.Data.Storage/Configuration/StorageSettings.cs index 60c9aa2e87..763efea29d 100644 --- a/common/ASC.Data.Storage/Configuration/StorageSettings.cs +++ b/common/ASC.Data.Storage/Configuration/StorageSettings.cs @@ -51,7 +51,7 @@ namespace ASC.Data.Storage.Configuration using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var storageSettingsHelper, var settingsManager, var cdnStorageSettings) = scopeClass; + var (storageSettingsHelper, settingsManager, cdnStorageSettings) = scopeClass; var settings = settingsManager.LoadForTenant(i.TenantId); if (i.Name == settings.Module) { @@ -238,6 +238,7 @@ namespace ASC.Data.Storage.Configuration services.TryAddSingleton(typeof(ICacheNotify<>), typeof(KafkaCache<>)); services.TryAddSingleton(); services.TryAddScoped(); + services.TryAddScoped(); return services .AddStorageFactoryConfigService() .AddPathUtilsService() diff --git a/common/ASC.Data.Storage/StaticUploader.cs b/common/ASC.Data.Storage/StaticUploader.cs index effd6848ab..115bbd299a 100644 --- a/common/ASC.Data.Storage/StaticUploader.cs +++ b/common/ASC.Data.Storage/StaticUploader.cs @@ -113,7 +113,7 @@ namespace ASC.Data.Storage { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var staticUploader, var securityContext, var settingsManager, var storageSettingsHelper) = scopeClass; + var(tenantManager, staticUploader, _, _, _) = scopeClass; tenantManager.SetCurrentTenant(tenantId); return staticUploader.UploadFile(relativePath, mappedPath, onComplete); }, TaskCreationOptions.LongRunning); @@ -209,7 +209,7 @@ namespace ASC.Data.Storage { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var staticUploader, var securityContext, var settingsManager, var storageSettingsHelper) = scopeClass; + var (tenantManager, _, securityContext, settingsManager, storageSettingsHelper) = scopeClass; var tenant = tenantManager.GetTenant(tenantId); tenantManager.SetCurrentTenant(tenant); securityContext.AuthenticateMe(tenant.OwnerId); diff --git a/common/ASC.Data.Storage/StorageHandler.cs b/common/ASC.Data.Storage/StorageHandler.cs index fcdd9b7b18..6a04cdce53 100644 --- a/common/ASC.Data.Storage/StorageHandler.cs +++ b/common/ASC.Data.Storage/StorageHandler.cs @@ -67,7 +67,7 @@ namespace ASC.Data.Storage.DiscStorage { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var securityContext, var storageFactory, var emailValidationKeyProvider) = scopeClass; + var (tenantManager, securityContext, storageFactory, emailValidationKeyProvider) = scopeClass; if (_checkAuth && !securityContext.IsAuthenticated) { diff --git a/common/ASC.Data.Storage/StorageUploader.cs b/common/ASC.Data.Storage/StorageUploader.cs index 91de61ec6b..4f754f3e31 100644 --- a/common/ASC.Data.Storage/StorageUploader.cs +++ b/common/ASC.Data.Storage/StorageUploader.cs @@ -154,7 +154,7 @@ namespace ASC.Data.Storage Log.DebugFormat("Tenant: {0}", tenantId); using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var securityContext, var storageFactory, var options, var storageSettingsHelper, var settingsManager) = scopeClass; + var (tenantManager, securityContext, storageFactory, options, storageSettingsHelper, settingsManager) = scopeClass; var tenant = tenantManager.GetTenant(tenantId); tenantManager.SetCurrentTenant(tenant); diff --git a/common/services/ASC.Data.Backup/Core/NotifyHelper.cs b/common/services/ASC.Data.Backup/Core/NotifyHelper.cs index 068553ad43..b7a2377b55 100644 --- a/common/services/ASC.Data.Backup/Core/NotifyHelper.cs +++ b/common/services/ASC.Data.Backup/Core/NotifyHelper.cs @@ -70,7 +70,7 @@ namespace ASC.Data.Backup { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var userManager, var studioNotifyHelper, var studioNotifySource, var displayUserSettingsHelper) = scopeClass; + var (userManager, studioNotifyHelper, studioNotifySource, displayUserSettingsHelper) = scopeClass; var client = WorkContext.NotifyContext.NotifyService.RegisterClient(studioNotifySource, scope); client.SendNoticeToAsync( @@ -103,7 +103,7 @@ namespace ASC.Data.Backup { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var userManager, var studioNotifyHelper, var studioNotifySource, var displayUserSettingsHelper) = scopeClass; + var (userManager, studioNotifyHelper, studioNotifySource, displayUserSettingsHelper) = scopeClass; var client = WorkContext.NotifyContext.NotifyService.RegisterClient(studioNotifySource, scope); var owner = userManager.GetUsers(tenant.OwnerId); @@ -124,7 +124,7 @@ namespace ASC.Data.Backup { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var userManager, var studioNotifyHelper, var studioNotifySource, var displayUserSettingsHelper) = scopeClass; + var (userManager, studioNotifyHelper, studioNotifySource, _) = scopeClass; var client = WorkContext.NotifyContext.NotifyService.RegisterClient(studioNotifySource, scope); var users = userManager.GetUsers() diff --git a/common/services/ASC.Data.Backup/Service/BackupWorker.cs b/common/services/ASC.Data.Backup/Service/BackupWorker.cs index a49228e56f..2449986e0a 100644 --- a/common/services/ASC.Data.Backup/Service/BackupWorker.cs +++ b/common/services/ASC.Data.Backup/Service/BackupWorker.cs @@ -370,7 +370,7 @@ namespace ASC.Data.Backup.Service using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var backupStorageFactory, var notifyHelper, var backupRepository, var backupWorker, var backupPortalTask, var restorePortalTask, var transferPortalTask) = scopeClass; + var (tenantManager, backupStorageFactory, notifyHelper, backupRepository, backupWorker, backupPortalTask, _, _) = scopeClass; var tenant = tenantManager.GetTenant(TenantId); var backupName = string.Format("{0}_{1:yyyy-MM-dd_HH-mm-ss}.{2}", tenant.TenantAlias, DateTime.UtcNow, ArchiveFormat); @@ -502,7 +502,7 @@ namespace ASC.Data.Backup.Service { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var backupStorageFactory, var notifyHelper, var backupRepository, var backupWorker, var backupPortalTask, var restorePortalTask, var transferPortalTask) = scopeClass; + var (tenantManager, backupStorageFactory, notifyHelper, _, backupWorker, _, restorePortalTask, _) = scopeClass; Tenant tenant = null; var tempFile = PathHelper.GetTempFileName(TempFolder); try @@ -661,7 +661,7 @@ namespace ASC.Data.Backup.Service { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var backupStorageFactory, var notifyHelper, var backupRepository, var backupWorker, var backupPortalTask, var restorePortalTask, var transferPortalTask) = scopeClass; + var (tenantManager, _, notifyHelper, _, backupWorker, _, _, transferPortalTask) = scopeClass; var tempFile = PathHelper.GetTempFileName(TempFolder); var tenant = tenantManager.GetTenant(TenantId); var alias = tenant.TenantAlias; diff --git a/common/services/ASC.ElasticSearch/Service/Launcher.cs b/common/services/ASC.ElasticSearch/Service/Launcher.cs index e069073cbf..fbae991c5b 100644 --- a/common/services/ASC.ElasticSearch/Service/Launcher.cs +++ b/common/services/ASC.ElasticSearch/Service/Launcher.cs @@ -93,7 +93,7 @@ namespace ASC.ElasticSearch { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var factoryIndexer, var service) = scopeClass; + var (factoryIndexer, service) = scopeClass; while (!factoryIndexer.CheckState(false)) { if (CancellationTokenSource.IsCancellationRequested) diff --git a/common/services/ASC.ElasticSearch/Service/Service.cs b/common/services/ASC.ElasticSearch/Service/Service.cs index 5cbbcfecbd..95979d6222 100644 --- a/common/services/ASC.ElasticSearch/Service/Service.cs +++ b/common/services/ASC.ElasticSearch/Service/Service.cs @@ -88,7 +88,7 @@ namespace ASC.ElasticSearch.Service using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var settingsManager) = scopeClass; + var (tenantManager, settingsManager) = scopeClass; tenantManager.SetCurrentTenant(tenant); settingsManager.ClearCache(); }); diff --git a/common/services/ASC.Feed.Aggregator/Service/FeedAggregatorService.cs b/common/services/ASC.Feed.Aggregator/Service/FeedAggregatorService.cs index 08e450bfbf..0e0787e8b0 100644 --- a/common/services/ASC.Feed.Aggregator/Service/FeedAggregatorService.cs +++ b/common/services/ASC.Feed.Aggregator/Service/FeedAggregatorService.cs @@ -122,7 +122,7 @@ namespace ASC.Feed.Aggregator var cfg = FeedSettings.GetInstance(Configuration); using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var baseCommonLinkUtility, var tenantManager, var feedAggregateDataProvider, var userManager, var securityContext, var authManager) = scopeClass; + var (baseCommonLinkUtility, tenantManager, feedAggregateDataProvider, userManager, securityContext, authManager) = scopeClass; baseCommonLinkUtility.Initialize(cfg.ServerRoot); var start = DateTime.UtcNow; diff --git a/common/services/ASC.Notify/NotifyService.cs b/common/services/ASC.Notify/NotifyService.cs index c23103fa16..17d35d9477 100644 --- a/common/services/ASC.Notify/NotifyService.cs +++ b/common/services/ASC.Notify/NotifyService.cs @@ -100,7 +100,7 @@ namespace ASC.Notify using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var tenantWhiteLabelSettingsHelper, var settingsManager) = scopeClass; + var (tenantManager, tenantWhiteLabelSettingsHelper, settingsManager) = scopeClass; tenantManager.SetCurrentTenant(tenant); tenantWhiteLabelSettingsHelper.Apply(settingsManager.Load(), tenant); methodInfo.Invoke(instance, parameters); diff --git a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs index d471d60f5e..c494c83bc4 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs @@ -131,7 +131,7 @@ namespace ASC.Files.Thirdparty.ProviderDao var fromSelector = GetSelector(fromFileId); using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var folderDao, var fileDao) = scopeClass; + var (tenantManager, _, fileDao) = scopeClass; tenantManager.SetCurrentTenant(TenantID); return CrossDao.PerformCrossDaoFileCopy( @@ -155,8 +155,8 @@ namespace ASC.Files.Thirdparty.ProviderDao { var fromSelector = GetSelector(fromFolderId); using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var folderDao, var fileDao) = scopeClass; + var scopeClass = scope.ServiceProvider.GetService(); + var (_, folderDao, fileDao) = scopeClass; return CrossDao.PerformCrossDaoFolderCopy( fromFolderId, fromSelector.GetFolderDao(fromFolderId), fromSelector.GetFileDao(fromFolderId), fromSelector.ConvertId, toRootFolderId, folderDao, fileDao, r => r, diff --git a/products/ASC.Files/Core/Services/DocumentService/DocbuilderReportsUtility.cs b/products/ASC.Files/Core/Services/DocumentService/DocbuilderReportsUtility.cs index 1727c019be..9dc45e7b4e 100644 --- a/products/ASC.Files/Core/Services/DocumentService/DocbuilderReportsUtility.cs +++ b/products/ASC.Files/Core/Services/DocumentService/DocbuilderReportsUtility.cs @@ -155,7 +155,7 @@ namespace ASC.Web.Files.Services.DocumentService { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var options, var tenantManager, var authContext, var securityContext, var documentServiceConnector) = scopeClass; + var (options, tenantManager, authContext, securityContext, documentServiceConnector) = scopeClass; var logger = options.CurrentValue; try { diff --git a/products/ASC.Files/Core/Services/NotifyService/NotifyClient.cs b/products/ASC.Files/Core/Services/NotifyService/NotifyClient.cs index 8c0cad2b4e..78e5fba3ec 100644 --- a/products/ASC.Files/Core/Services/NotifyService/NotifyClient.cs +++ b/products/ASC.Files/Core/Services/NotifyService/NotifyClient.cs @@ -56,7 +56,7 @@ namespace ASC.Web.Files.Services.NotifyService { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var notifySource, var securityContext, var filesLinkUtility, var fileUtility, var baseCommonLinkUtility, var daoFactory, var pathProvider, var userManager, var tenantManager) = scopeClass; + var (notifySource, securityContext, filesLinkUtility, fileUtility, baseCommonLinkUtility, _, _, _, _) = scopeClass; var client = WorkContext.NotifyContext.NotifyService.RegisterClient(notifySource, scope); var recipient = notifySource.GetRecipientsProvider().GetRecipient(securityContext.CurrentAccount.ID.ToString()); @@ -75,7 +75,7 @@ namespace ASC.Web.Files.Services.NotifyService { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var notifySource, var securityContext, var filesLinkUtility, var fileUtility, var baseCommonLinkUtility, var daoFactory, var pathProvider, var userManager, var tenantManager) = scopeClass; + var (notifySource, securityContext, _, _, _, _, _, _, _) = scopeClass; var client = WorkContext.NotifyContext.NotifyService.RegisterClient(notifySource, scope); var recipient = notifySource.GetRecipientsProvider().GetRecipient(securityContext.CurrentAccount.ID.ToString()); @@ -114,7 +114,7 @@ namespace ASC.Web.Files.Services.NotifyService using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var notifySource, var securityContext, var filesLinkUtility, var fileUtility, var baseCommonLinkUtility, var daoFactory, var pathProvider, var userManager, var tenantManager) = scopeClass; + var (notifySource, _, filesLinkUtility, fileUtility, baseCommonLinkUtility, daoFactory, pathProvider, userManager, tenantManager) = scopeClass; var client = WorkContext.NotifyContext.NotifyService.RegisterClient(notifySource, scope); var folderDao = daoFactory.GetFolderDao(); @@ -156,7 +156,7 @@ namespace ASC.Web.Files.Services.NotifyService using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var notifySource, var securityContext, var filesLinkUtility, var fileUtility, var baseCommonLinkUtility, var daoFactory, var pathProvider, var userManager, var tenantManager) = scopeClass; + var (notifySource, _, _, _, baseCommonLinkUtility, _, _, userManager, _) = scopeClass; var client = WorkContext.NotifyContext.NotifyService.RegisterClient(notifySource, scope); var recipientsProvider = notifySource.GetRecipientsProvider(); diff --git a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDeleteOperation.cs b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDeleteOperation.cs index c09eddee03..80d2c9e986 100644 --- a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDeleteOperation.cs +++ b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileDeleteOperation.cs @@ -124,7 +124,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations private void DeleteFolders(IEnumerable folderIds, IServiceScope scope) { var scopeClass = scope.ServiceProvider.GetService(); - (var fileMarker, var filesMessageService) = scopeClass; + var (fileMarker, filesMessageService) = scopeClass; foreach (var folderId in folderIds) { CancellationToken.ThrowIfCancellationRequested(); @@ -208,7 +208,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations private void DeleteFiles(IEnumerable fileIds, IServiceScope scope) { var scopeClass = scope.ServiceProvider.GetService(); - (var fileMarker, var filesMessageService) = scopeClass; + var (fileMarker, filesMessageService) = scopeClass; foreach (var fileId in fileIds) { CancellationToken.ThrowIfCancellationRequested(); diff --git a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMarkAsReadOperation.cs b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMarkAsReadOperation.cs index 3387b48029..b74aa20360 100644 --- a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMarkAsReadOperation.cs +++ b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMarkAsReadOperation.cs @@ -85,7 +85,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations protected override void Do(IServiceScope scope) { var scopeClass = scope.ServiceProvider.GetService(); - (var fileMarker, var globalFolder, var daoFactory) = scopeClass; + var (fileMarker, globalFolder, daoFactory) = scopeClass; var entries = new List>(); if (Folders.Any()) { diff --git a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs index 2eac7e55e8..28f1d490b4 100644 --- a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs +++ b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs @@ -355,7 +355,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations if (fileIds.Count == 0) return needToMark; var scopeClass = scope.ServiceProvider.GetService(); - (var filesMessageService, var fileMarker, var fileUtility, var global, var entryManager) = scopeClass; + var (filesMessageService, fileMarker, fileUtility, global, entryManager) = scopeClass; var fileDao = scope.ServiceProvider.GetService>(); var toFolderId = toFolder.ID; diff --git a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperation.cs b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperation.cs index 5d81cd10ec..5dc75bc74a 100644 --- a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperation.cs +++ b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileOperation.cs @@ -285,7 +285,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var daoFactory, var fileSecurity, var options) = scopeClass; + var (tenantManager, daoFactory, fileSecurity, options) = scopeClass; tenantManager.SetCurrentTenant(CurrentTenant); diff --git a/products/ASC.Files/Core/Utils/FileConverter.cs b/products/ASC.Files/Core/Utils/FileConverter.cs index 66f30093a6..49921bd37b 100644 --- a/products/ASC.Files/Core/Utils/FileConverter.cs +++ b/products/ASC.Files/Core/Utils/FileConverter.cs @@ -145,7 +145,7 @@ namespace ASC.Web.Files.Utils { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var options, var tenantManager, var userManager, var securityContext, var daoFactory, var fileSecurity, var pathProvider, var setupInfo, var fileUtility, var documentServiceHelper, var documentServiceConnector, var entryManager, var fileConverter) = scopeClass; + var (options, tenantManager, userManager, securityContext, daoFactory, fileSecurity, pathProvider, setupInfo, fileUtility, documentServiceHelper, documentServiceConnector, entryManager, fileConverter) = scopeClass; var logger = options.CurrentValue; try diff --git a/web/ASC.Web.Core/Notify/NotifyConfiguration.cs b/web/ASC.Web.Core/Notify/NotifyConfiguration.cs index b36c17584b..b6c027eef5 100644 --- a/web/ASC.Web.Core/Notify/NotifyConfiguration.cs +++ b/web/ASC.Web.Core/Notify/NotifyConfiguration.cs @@ -133,7 +133,7 @@ namespace ASC.Web.Studio.Core.Notify (r, p, scope) => { var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var webItemSecurity, var userManager, var options, var tenantExtra, var webItemManagerSecurity, var webItemManager, var configuration, var tenantLogoManager, var additionalWhiteLabelSettingsHelper, var tenantUtil, var coreBaseSettings, var commonLinkUtility, var settingsManager, var studioNotifyHelper) = scopeClass; + var (tenantManager, webItemSecurity, userManager, options, _, _, _, _, _, _, _, _, _, _, _) = scopeClass; try { // culture @@ -262,7 +262,7 @@ namespace ASC.Web.Studio.Core.Notify } using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var webItemSecurity, var userMan, var options, var tenantExtra, var webItemManagerSecurity, var webItemManager, var configuration, var tenantLogoManager, var additionalWhiteLabelSettingsHelper, var tenantUtil, var coreBaseSettings, var commonLinkUtility, var settingsManager, var studioNotifyHelper) = scopeClass; + var (_, webItemSecurity, _, options, tenantExtra, _, webItemManager, configuration, tenantLogoManager, additionalWhiteLabelSettingsHelper, tenantUtil, coreBaseSettings, commonLinkUtility, settingsManager, studioNotifyHelper) = scopeClass; var log = options.CurrentValue; commonLinkUtility.GetLocationByRequest(out var product, out var module); diff --git a/web/ASC.Web.Core/Notify/StudioNotifyService.cs b/web/ASC.Web.Core/Notify/StudioNotifyService.cs index 5ed70c2bdf..43779bce21 100644 --- a/web/ASC.Web.Core/Notify/StudioNotifyService.cs +++ b/web/ASC.Web.Core/Notify/StudioNotifyService.cs @@ -829,7 +829,7 @@ namespace ASC.Web.Studio.Core.Notify { var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var studioNotifyServiceHelper) = scopeClass; + var (tenantManager, studioNotifyServiceHelper) = scopeClass; tenantManager.SetCurrentTenant(tenant); foreach (var u in users) diff --git a/web/ASC.Web.Core/Notify/StudioNotifyServiceSender.cs b/web/ASC.Web.Core/Notify/StudioNotifyServiceSender.cs index d74bf74bc4..f69fe61f95 100644 --- a/web/ASC.Web.Core/Notify/StudioNotifyServiceSender.cs +++ b/web/ASC.Web.Core/Notify/StudioNotifyServiceSender.cs @@ -62,7 +62,7 @@ namespace ASC.Web.Studio.Core.Notify { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var userManager, var securityContext, var authContext, var studioNotifyHelper, var displayUserSettings, var tenantExtra, var coreBaseSettings) = scopeClass; + var (tenantManager, userManager, securityContext, studioNotifyHelper, _, _) = scopeClass; tenantManager.SetCurrentTenant(item.TenantId); CultureInfo culture = null; @@ -109,7 +109,7 @@ namespace ASC.Web.Studio.Core.Notify using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var userManager, var securityContext, var authContext, var studioNotifyHelper, var displayUserSettings, var tenantExtra, var coreBaseSettings) = scopeClass; + var (_, _, _, _, tenantExtra, coreBaseSettings) = scopeClass; if (Configuration["core:notify:tariff"] != "false") { if (tenantExtra.Enterprise) @@ -176,27 +176,21 @@ namespace ASC.Web.Studio.Core.Notify private TenantManager TenantManager { get; } private UserManager UserManager { get; } private SecurityContext SecurityContext { get; } - private AuthContext AuthContext { get; } private StudioNotifyHelper StudioNotifyHelper { get; } - private DisplayUserSettings DisplayUserSettings { get; } private TenantExtra TenantExtra { get; } private CoreBaseSettings CoreBaseSettings { get; } public StudioNotifyServiceSenderScope(TenantManager tenantManager, UserManager userManager, SecurityContext securityContext, - AuthContext authContext, StudioNotifyHelper studioNotifyHelper, - DisplayUserSettings displayUserSettings, TenantExtra tenantExtra, CoreBaseSettings coreBaseSettings) { TenantManager = tenantManager; UserManager = userManager; SecurityContext = securityContext; - AuthContext = authContext; StudioNotifyHelper = studioNotifyHelper; - DisplayUserSettings = displayUserSettings; TenantExtra = tenantExtra; CoreBaseSettings = coreBaseSettings; } @@ -204,18 +198,14 @@ namespace ASC.Web.Studio.Core.Notify public void Deconstruct(out TenantManager tenantManager, out UserManager userManager, out SecurityContext securityContext, - out AuthContext authContext, out StudioNotifyHelper studioNotifyHelper, - out DisplayUserSettings displayUserSettings, out TenantExtra tenantExtra, out CoreBaseSettings coreBaseSettings) { tenantManager = TenantManager; userManager = UserManager; securityContext = SecurityContext; - authContext = AuthContext; studioNotifyHelper = StudioNotifyHelper; - displayUserSettings = DisplayUserSettings; tenantExtra = TenantExtra; coreBaseSettings = CoreBaseSettings; } diff --git a/web/ASC.Web.Core/Notify/StudioPeriodicNotify.cs b/web/ASC.Web.Core/Notify/StudioPeriodicNotify.cs index 45b0b1a689..193fd3f222 100644 --- a/web/ASC.Web.Core/Notify/StudioPeriodicNotify.cs +++ b/web/ASC.Web.Core/Notify/StudioPeriodicNotify.cs @@ -94,7 +94,7 @@ namespace ASC.Web.Studio.Core.Notify { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var userManager, var studioNotifyHelper, var paymentManager, var tenantExtra, var authContext, var commonLinkUtility, var apiSystemHelper, var setupInfo, var dbContextManager, var couponManager, var configuration, var settingsManager, var coreBaseSettings, var displayUserSettingsHelper, var authManager, var securityContext) = scopeClass; + var (tenantManager, userManager, studioNotifyHelper, paymentManager, tenantExtra, authContext, commonLinkUtility, apiSystemHelper, setupInfo, dbContextManager, couponManager, _, _, _, _, _, _) = scopeClass; tenantManager.SetCurrentTenant(tenant.TenantId); var client = WorkContext.NotifyContext.NotifyService.RegisterClient(studioNotifyHelper.NotifySource, scope); @@ -543,7 +543,7 @@ namespace ASC.Web.Studio.Core.Notify { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var userManager, var studioNotifyHelper, var paymentManager, var tenantExtra, var authContext, var commonLinkUtility, var apiSystemHelper, var setupInfo, var dbContextManager, var couponManager, var configuration, var settingsManager, var coreBaseSettings, var displayUserSettingsHelper, var authManager, var securityContext) = scopeClass; + var (tenantManager, userManager, studioNotifyHelper, paymentManager, tenantExtra, _, commonLinkUtility, _, _, dbContextManager, _, configuration, settingsManager, coreBaseSettings, _, _, _) = scopeClass; var defaultRebranding = MailWhiteLabelSettings.IsDefault(settingsManager, configuration); tenantManager.SetCurrentTenant(tenant.TenantId); var client = WorkContext.NotifyContext.NotifyService.RegisterClient(studioNotifyHelper.NotifySource, scope); @@ -930,7 +930,7 @@ namespace ASC.Web.Studio.Core.Notify { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var userManager, var studioNotifyHelper, var paymentManager, var tenantExtra, var authContext, var commonLinkUtility, var apiSystemHelper, var setupInfo, var dbContextManager, var couponManager, var configuration, var settingsManager, var coreBaseSettings, var displayUserSettingsHelper, var authManager, var securityContext) = scopeClass; + var (tenantManager, _, studioNotifyHelper, _, _, _, _, _, _, _, _, _, _, _, displayUserSettingsHelper, _, _) = scopeClass; tenantManager.SetCurrentTenant(tenant.TenantId); var client = WorkContext.NotifyContext.NotifyService.RegisterClient(studioNotifyHelper.NotifySource, scope); @@ -1113,7 +1113,7 @@ namespace ASC.Web.Studio.Core.Notify using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var userManager, var studioNotifyHelper, var paymentManager, var tenantExtra, var authContext, var commonLinkUtility, var apiSystemHelper, var setupInfo, var dbContextManager, var couponManager, var configuration, var settingsManager, var coreBaseSettings, var displayUserSettingsHelper, var authManager, var securityContext) = scopeClass; + var (tenantManager, userManager, studioNotifyHelper, _, _, _, _, _, _, _, _, _, _, coreBaseSettings, _, authManager, securityContext) = scopeClass; tenantManager.SetCurrentTenant(tenant.TenantId); var client = WorkContext.NotifyContext.NotifyService.RegisterClient(studioNotifyHelper.NotifySource, scope); diff --git a/web/ASC.Web.Core/Notify/StudioWhatsNewNotify.cs b/web/ASC.Web.Core/Notify/StudioWhatsNewNotify.cs index 754a068ee3..6d7ca691f2 100644 --- a/web/ASC.Web.Core/Notify/StudioWhatsNewNotify.cs +++ b/web/ASC.Web.Core/Notify/StudioWhatsNewNotify.cs @@ -83,7 +83,7 @@ namespace ASC.Web.Studio.Core.Notify { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var paymentManager, var tenantUtil, var studioNotifyHelper, var userManager, var securityContext, var authContext, var authManager, var commonLinkUtility, var displayUserSettingsHelper, var feedAggregateDataProvider, var coreSettings) = scopeClass; + var (tenantManager, paymentManager, tenantUtil, studioNotifyHelper, userManager, securityContext, authContext, authManager, commonLinkUtility, displayUserSettingsHelper, feedAggregateDataProvider, coreSettings) = scopeClass; var tenant = tenantManager.GetTenant(tenantid); if (tenant == null || tenant.Status != TenantStatus.Active || diff --git a/web/ASC.Web.Core/QuotaSync.cs b/web/ASC.Web.Core/QuotaSync.cs index 8cd9adc1c0..2c1bcb874d 100644 --- a/web/ASC.Web.Core/QuotaSync.cs +++ b/web/ASC.Web.Core/QuotaSync.cs @@ -54,7 +54,7 @@ namespace ASC.Web.Studio.Core.Quota { using var scope = ServiceProvider.CreateScope(); var scopeClass = scope.ServiceProvider.GetService(); - (var tenantManager, var storageFactoryConfig, var storageFactory) = scopeClass; + var (tenantManager, storageFactoryConfig, storageFactory) = scopeClass; tenantManager.SetCurrentTenant(TenantId); var storageModules = storageFactoryConfig.GetModuleList(string.Empty).ToList(); From a53cdc568d8cd1e924d1452c7ce394615b792c64 Mon Sep 17 00:00:00 2001 From: pavelbannov Date: Wed, 9 Sep 2020 15:08:28 +0300 Subject: [PATCH 15/18] Consumers: fix --- config/autofac.consumers.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/config/autofac.consumers.json b/config/autofac.consumers.json index 9dfa4c0a04..92f6f61d91 100644 --- a/config/autofac.consumers.json +++ b/config/autofac.consumers.json @@ -41,11 +41,11 @@ "type": "ASC.FederatedLogin.LoginProviders.BoxLoginProvider, ASC.FederatedLogin" }, { - "key": "box", + "key": "Box", "type": "ASC.Core.Common.Configuration.Consumer, ASC.Core.Common" }, { - "key": "box", + "key": "Box", "type": "ASC.FederatedLogin.LoginProviders.BoxLoginProvider, ASC.FederatedLogin" } ], @@ -191,11 +191,11 @@ "type": "ASC.FederatedLogin.LoginProviders.FacebookLoginProvider, ASC.FederatedLogin" }, { - "key": "facebook", + "key": "Facebook", "type": "ASC.Core.Common.Configuration.Consumer, ASC.Core.Common" }, { - "key": "facebook", + "key": "Facebook", "type": "ASC.FederatedLogin.LoginProviders.FacebookLoginProvider, ASC.FederatedLogin" } ], @@ -252,11 +252,11 @@ "type": "ASC.FederatedLogin.LoginProviders.GoogleLoginProvider, ASC.FederatedLogin" }, { - "key": "google", + "key": "Google", "type": "ASC.Core.Common.Configuration.Consumer, ASC.Core.Common" }, { - "key": "google", + "key": "Google", "type": "ASC.FederatedLogin.LoginProviders.GoogleLoginProvider, ASC.FederatedLogin" } ], @@ -283,11 +283,11 @@ "type": "ASC.FederatedLogin.LoginProviders.LinkedInLoginProvider, ASC.FederatedLogin" }, { - "key": "linkedin", + "key": "LinkedIn", "type": "ASC.Core.Common.Configuration.Consumer, ASC.Core.Common" }, { - "key": "linkedin", + "key": "LinkedIn", "type": "ASC.FederatedLogin.LoginProviders.LinkedInLoginProvider, ASC.FederatedLogin" } ], @@ -406,11 +406,11 @@ "type": "ASC.FederatedLogin.LoginProviders.TwitterLoginProvider, ASC.FederatedLogin" }, { - "key": "twitter", + "key": "Twitter", "type": "ASC.Core.Common.Configuration.Consumer, ASC.Core.Common" }, { - "key": "twitter", + "key": "Twitter", "type": "ASC.FederatedLogin.LoginProviders.TwitterLoginProvider, ASC.FederatedLogin" } ], From 5f62bfb00df51099bd9078153f680c6b96c9cbde Mon Sep 17 00:00:00 2001 From: SuhorukovAnton <62381554+SuhorukovAnton@users.noreply.github.com> Date: Wed, 9 Sep 2020 17:02:51 +0300 Subject: [PATCH 16/18] scope: bugfix --- .../Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs index c494c83bc4..24e072cb85 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs @@ -172,10 +172,10 @@ namespace ASC.Files.Thirdparty.ProviderDao internal class ProviderDaoBaseScope { private TenantManager TenantManager { get; } - private IFolderDao FolderDao { get; } + private FolderDao FolderDao { get; } private IFileDao FileDao { get; } - public ProviderDaoBaseScope(TenantManager tenantManager, IFolderDao folderDao, IFileDao fileDao) + public ProviderDaoBaseScope(TenantManager tenantManager, FolderDao folderDao, IFileDao fileDao) { TenantManager = tenantManager; FolderDao = folderDao; From 3f37da9891976029714b42790490b958e773a2fb Mon Sep 17 00:00:00 2001 From: pavelbannov Date: Thu, 10 Sep 2020 12:02:26 +0300 Subject: [PATCH 17/18] fix notify --- web/ASC.Web.Core/Notify/StudioNotifyServiceHelper.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/web/ASC.Web.Core/Notify/StudioNotifyServiceHelper.cs b/web/ASC.Web.Core/Notify/StudioNotifyServiceHelper.cs index ddfb9d3227..f130e30de2 100644 --- a/web/ASC.Web.Core/Notify/StudioNotifyServiceHelper.cs +++ b/web/ASC.Web.Core/Notify/StudioNotifyServiceHelper.cs @@ -103,7 +103,10 @@ namespace ASC.Web.Core.Notify item.SenderNames.AddRange(senderNames); } - item.Tags.AddRange(args.Select(r => new Tag { Tag_ = r.Tag, Value = r.Value.ToString() })); + if (args != null) + { + item.Tags.AddRange(args.Select(r => new Tag { Tag_ = r.Tag, Value = r.Value.ToString() })); + } Cache.Publish(item, CacheNotifyAction.Any); } From fb0dec0a16c6aca77c4c92de794254f36cc26ecd Mon Sep 17 00:00:00 2001 From: pavelbannov Date: Thu, 10 Sep 2020 12:30:33 +0300 Subject: [PATCH 18/18] Files: fix --- .../Thirdparty/ProviderDao/ProviderDaoBase.cs | 34 +++---------------- 1 file changed, 5 insertions(+), 29 deletions(-) diff --git a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs index 24e072cb85..b670af55d8 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderDaoBase.cs @@ -129,14 +129,13 @@ namespace ASC.Files.Thirdparty.ProviderDao protected File PerformCrossDaoFileCopy(string fromFileId, int toFolderId, bool deleteSourceFile) { var fromSelector = GetSelector(fromFileId); - using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); - var (tenantManager, _, fileDao) = scopeClass; + using var scope = ServiceProvider.CreateScope(); + var tenantManager = scope.ServiceProvider.GetService(); tenantManager.SetCurrentTenant(TenantID); return CrossDao.PerformCrossDaoFileCopy( fromFileId, fromSelector.GetFileDao(fromFileId), fromSelector.ConvertId, - toFolderId, fileDao, r => r, + toFolderId, scope.ServiceProvider.GetService>(), r => r, deleteSourceFile); } @@ -155,11 +154,10 @@ namespace ASC.Files.Thirdparty.ProviderDao { var fromSelector = GetSelector(fromFolderId); using var scope = ServiceProvider.CreateScope(); - var scopeClass = scope.ServiceProvider.GetService(); - var (_, folderDao, fileDao) = scopeClass; + return CrossDao.PerformCrossDaoFolderCopy( fromFolderId, fromSelector.GetFolderDao(fromFolderId), fromSelector.GetFileDao(fromFolderId), fromSelector.ConvertId, - toRootFolderId, folderDao, fileDao, r => r, + toRootFolderId, scope.ServiceProvider.GetService(), scope.ServiceProvider.GetService>(), r => r, deleteSourceFolder, cancellationToken); } @@ -169,34 +167,12 @@ namespace ASC.Files.Thirdparty.ProviderDao } } - internal class ProviderDaoBaseScope - { - private TenantManager TenantManager { get; } - private FolderDao FolderDao { get; } - private IFileDao FileDao { get; } - - public ProviderDaoBaseScope(TenantManager tenantManager, FolderDao folderDao, IFileDao fileDao) - { - TenantManager = tenantManager; - FolderDao = folderDao; - FileDao = fileDao; - } - - public void Deconstruct(out TenantManager tenantManager, out IFolderDao folderDao, out IFileDao fileDao) - { - tenantManager = TenantManager; - folderDao = FolderDao; - fileDao = FileDao; - } - } - public static class ProviderDaoBaseExtention { public static DIHelper AddProviderDaoBaseService(this DIHelper services) { if (services.TryAddScoped()) { - services.TryAddScoped(); return services .AddSharpBoxDaoSelectorService() .AddSharePointSelectorService()