diff --git a/web/ASC.Web.Api/Api/Settings/WhitelabelController.cs b/web/ASC.Web.Api/Api/Settings/WhitelabelController.cs index c4a0b6a5c2..71937a06c6 100644 --- a/web/ASC.Web.Api/Api/Settings/WhitelabelController.cs +++ b/web/ASC.Web.Api/Api/Settings/WhitelabelController.cs @@ -29,8 +29,7 @@ namespace ASC.Web.Api.Controllers.Settings; public class WhitelabelController : BaseSettingsController { private Tenant Tenant { get { return ApiContext.Tenant; } } - - private readonly TenantExtra _tenantExtra; + private readonly PermissionContext _permissionContext; private readonly SettingsManager _settingsManager; private readonly TenantInfoSettingsHelper _tenantInfoSettingsHelper; @@ -38,11 +37,9 @@ public class WhitelabelController : BaseSettingsController private readonly TenantLogoManager _tenantLogoManager; private readonly CoreBaseSettings _coreBaseSettings; private readonly CommonLinkUtility _commonLinkUtility; - private readonly StorageFactory _storageFactory; public WhitelabelController( - ApiContext apiContext, - TenantExtra tenantExtra, + ApiContext apiContext, PermissionContext permissionContext, SettingsManager settingsManager, WebItemManager webItemManager, @@ -51,11 +48,9 @@ public class WhitelabelController : BaseSettingsController TenantLogoManager tenantLogoManager, CoreBaseSettings coreBaseSettings, CommonLinkUtility commonLinkUtility, - IMemoryCache memoryCache, - StorageFactory storageFactory, + IMemoryCache memoryCache, IHttpContextAccessor httpContextAccessor) : base(apiContext, memoryCache, webItemManager, httpContextAccessor) - { - _tenantExtra = tenantExtra; + { _permissionContext = permissionContext; _settingsManager = settingsManager; _tenantInfoSettingsHelper = tenantInfoSettingsHelper; @@ -63,46 +58,18 @@ public class WhitelabelController : BaseSettingsController _tenantLogoManager = tenantLogoManager; _coreBaseSettings = coreBaseSettings; _commonLinkUtility = commonLinkUtility; - _storageFactory = storageFactory; } ///false [HttpPost("whitelabel/save")] - public bool SaveWhiteLabelSettings(WhiteLabelRequestsDto inDto, [FromQuery] WhiteLabelQueryRequestsDto inQueryDto) + public bool SaveWhiteLabelSettings(WhiteLabelRequestsDto inDto) { _permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings); DemandWhiteLabelPermission(); - if (inQueryDto.IsDefault) - { - DemandRebrandingPermission(); - SaveWhiteLabelSettingsForDefaultTenant(inDto); - } - else - { - SaveWhiteLabelSettingsForCurrentTenant(inDto); - } - return true; - } - - private void SaveWhiteLabelSettingsForCurrentTenant(WhiteLabelRequestsDto inDto) - { - var settings = _settingsManager.Load(); - - SaveWhiteLabelSettingsForTenant(settings, null, Tenant.Id, inDto); - } - - private void SaveWhiteLabelSettingsForDefaultTenant(WhiteLabelRequestsDto inDto) - { - var settings = _settingsManager.LoadForDefaultTenant(); - var storage = _storageFactory.GetStorage(string.Empty, "static_partnerdata"); - - SaveWhiteLabelSettingsForTenant(settings, storage, Tenant.DefaultTenant, inDto); - } - - private void SaveWhiteLabelSettingsForTenant(TenantWhiteLabelSettings settings, IDataStore storage, int tenantId, WhiteLabelRequestsDto inDto) - { + var settings = _settingsManager.Load(); + if (inDto.Logo != null) { var logoDict = new Dictionary(); @@ -112,17 +79,18 @@ public class WhitelabelController : BaseSettingsController logoDict.Add(Int32.Parse(l.Key), l.Value); } - _tenantWhiteLabelSettingsHelper.SetLogo(settings, logoDict, storage); + _tenantWhiteLabelSettingsHelper.SetLogo(settings, logoDict, null); } settings.SetLogoText(inDto.LogoText); - _tenantWhiteLabelSettingsHelper.Save(settings, tenantId, _tenantLogoManager); + _tenantWhiteLabelSettingsHelper.Save(settings, Tenant.Id, _tenantLogoManager); + return true; } ///false [HttpPost("whitelabel/savefromfiles")] - public bool SaveWhiteLabelSettingsFromFiles([FromQuery] WhiteLabelQueryRequestsDto inDto) + public bool SaveWhiteLabelSettingsFromFiles() { _permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings); @@ -133,46 +101,20 @@ public class WhitelabelController : BaseSettingsController throw new InvalidOperationException("No input files"); } - if (inDto.IsDefault) - { - DemandRebrandingPermission(); - SaveWhiteLabelSettingsFromFilesForDefaultTenant(); - } - else - { - SaveWhiteLabelSettingsFromFilesForCurrentTenant(); - } - return true; - } - - private void SaveWhiteLabelSettingsFromFilesForCurrentTenant() - { - var settings = _settingsManager.Load(); - - SaveWhiteLabelSettingsFromFilesForTenant(settings, null, Tenant.Id); - } - - private void SaveWhiteLabelSettingsFromFilesForDefaultTenant() - { - var settings = _settingsManager.LoadForDefaultTenant(); - var storage = _storageFactory.GetStorage(string.Empty, "static_partnerdata"); - - SaveWhiteLabelSettingsFromFilesForTenant(settings, storage, Tenant.DefaultTenant); - } - - private void SaveWhiteLabelSettingsFromFilesForTenant(TenantWhiteLabelSettings settings, IDataStore storage, int tenantId) - { + var settings = _settingsManager.Load(); + foreach (var f in HttpContext.Request.Form.Files) { var parts = f.FileName.Split('.'); var logoType = (WhiteLabelLogoTypeEnum)Convert.ToInt32(parts[0]); var fileExt = parts[1]; - _tenantWhiteLabelSettingsHelper.SetLogoFromStream(settings, logoType, fileExt, f.OpenReadStream(), storage); + _tenantWhiteLabelSettingsHelper.SetLogoFromStream(settings, logoType, fileExt, f.OpenReadStream(), null); } - _settingsManager.SaveForTenant(settings, tenantId); - } + _settingsManager.SaveForTenant(settings, Tenant.Id); + return true; + } ///false [HttpGet("whitelabel/sizes")] @@ -207,47 +149,31 @@ public class WhitelabelController : BaseSettingsController Dictionary result; - if (inDto.IsDefault) - { - result = new Dictionary + var _tenantWhiteLabelSettings = _settingsManager.Load(); + + result = new Dictionary { - { ((int)WhiteLabelLogoTypeEnum.LightSmall).ToString(), _commonLinkUtility.GetFullAbsolutePath(_tenantWhiteLabelSettingsHelper.GetAbsoluteDefaultLogoPath(WhiteLabelLogoTypeEnum.LightSmall, !inDto.IsRetina)) }, - { ((int)WhiteLabelLogoTypeEnum.Dark).ToString(), _commonLinkUtility.GetFullAbsolutePath(_tenantWhiteLabelSettingsHelper.GetAbsoluteDefaultLogoPath(WhiteLabelLogoTypeEnum.Dark, !inDto.IsRetina)) }, - { ((int)WhiteLabelLogoTypeEnum.Favicon).ToString(), _commonLinkUtility.GetFullAbsolutePath(_tenantWhiteLabelSettingsHelper.GetAbsoluteDefaultLogoPath(WhiteLabelLogoTypeEnum.Favicon, !inDto.IsRetina)) }, - { ((int)WhiteLabelLogoTypeEnum.DocsEditor).ToString(), _commonLinkUtility.GetFullAbsolutePath(_tenantWhiteLabelSettingsHelper.GetAbsoluteDefaultLogoPath(WhiteLabelLogoTypeEnum.DocsEditor, !inDto.IsRetina)) }, - { ((int)WhiteLabelLogoTypeEnum.DocsEditorEmbed).ToString(), _commonLinkUtility.GetFullAbsolutePath(_tenantWhiteLabelSettingsHelper.GetAbsoluteDefaultLogoPath(WhiteLabelLogoTypeEnum.DocsEditorEmbed, !inDto.IsRetina)) }, - { ((int)WhiteLabelLogoTypeEnum.LeftMenu).ToString(), _commonLinkUtility.GetFullAbsolutePath(_tenantWhiteLabelSettingsHelper.GetAbsoluteDefaultLogoPath(WhiteLabelLogoTypeEnum.LeftMenu, !inDto.IsRetina)) }, - { ((int)WhiteLabelLogoTypeEnum.AboutPage).ToString(), _commonLinkUtility.GetFullAbsolutePath(_tenantWhiteLabelSettingsHelper.GetAbsoluteDefaultLogoPath(WhiteLabelLogoTypeEnum.AboutPage, !inDto.IsRetina)) } + { ((int)WhiteLabelLogoTypeEnum.LightSmall).ToString(), _commonLinkUtility.GetFullAbsolutePath(_tenantWhiteLabelSettingsHelper.GetAbsoluteLogoPath(_tenantWhiteLabelSettings, WhiteLabelLogoTypeEnum.LightSmall, !inDto.IsRetina)) }, + { ((int)WhiteLabelLogoTypeEnum.Dark).ToString(), _commonLinkUtility.GetFullAbsolutePath(_tenantWhiteLabelSettingsHelper.GetAbsoluteLogoPath(_tenantWhiteLabelSettings, WhiteLabelLogoTypeEnum.Dark, !inDto.IsRetina)) }, + { ((int)WhiteLabelLogoTypeEnum.Favicon).ToString(), _commonLinkUtility.GetFullAbsolutePath(_tenantWhiteLabelSettingsHelper.GetAbsoluteLogoPath(_tenantWhiteLabelSettings, WhiteLabelLogoTypeEnum.Favicon, !inDto.IsRetina)) }, + { ((int)WhiteLabelLogoTypeEnum.DocsEditor).ToString(), _commonLinkUtility.GetFullAbsolutePath(_tenantWhiteLabelSettingsHelper.GetAbsoluteLogoPath(_tenantWhiteLabelSettings, WhiteLabelLogoTypeEnum.DocsEditor, !inDto.IsRetina)) }, + { ((int)WhiteLabelLogoTypeEnum.DocsEditorEmbed).ToString(), _commonLinkUtility.GetFullAbsolutePath(_tenantWhiteLabelSettingsHelper.GetAbsoluteLogoPath(_tenantWhiteLabelSettings,WhiteLabelLogoTypeEnum.DocsEditorEmbed, !inDto.IsRetina)) }, + { ((int)WhiteLabelLogoTypeEnum.LeftMenu).ToString(), _commonLinkUtility.GetFullAbsolutePath(_tenantWhiteLabelSettingsHelper.GetAbsoluteLogoPath(_tenantWhiteLabelSettings,WhiteLabelLogoTypeEnum.LeftMenu, !inDto.IsRetina)) }, + { ((int)WhiteLabelLogoTypeEnum.AboutPage).ToString(), _commonLinkUtility.GetFullAbsolutePath(_tenantWhiteLabelSettingsHelper.GetAbsoluteLogoPath(_tenantWhiteLabelSettings,WhiteLabelLogoTypeEnum.AboutPage, !inDto.IsRetina)) } }; - } - else - { - var _tenantWhiteLabelSettings = _settingsManager.Load(); - - result = new Dictionary - { - { ((int)WhiteLabelLogoTypeEnum.LightSmall).ToString(), _commonLinkUtility.GetFullAbsolutePath(_tenantWhiteLabelSettingsHelper.GetAbsoluteLogoPath(_tenantWhiteLabelSettings, WhiteLabelLogoTypeEnum.LightSmall, !inDto.IsRetina)) }, - { ((int)WhiteLabelLogoTypeEnum.Dark).ToString(), _commonLinkUtility.GetFullAbsolutePath(_tenantWhiteLabelSettingsHelper.GetAbsoluteLogoPath(_tenantWhiteLabelSettings, WhiteLabelLogoTypeEnum.Dark, !inDto.IsRetina)) }, - { ((int)WhiteLabelLogoTypeEnum.Favicon).ToString(), _commonLinkUtility.GetFullAbsolutePath(_tenantWhiteLabelSettingsHelper.GetAbsoluteLogoPath(_tenantWhiteLabelSettings, WhiteLabelLogoTypeEnum.Favicon, !inDto.IsRetina)) }, - { ((int)WhiteLabelLogoTypeEnum.DocsEditor).ToString(), _commonLinkUtility.GetFullAbsolutePath(_tenantWhiteLabelSettingsHelper.GetAbsoluteLogoPath(_tenantWhiteLabelSettings, WhiteLabelLogoTypeEnum.DocsEditor, !inDto.IsRetina)) }, - { ((int)WhiteLabelLogoTypeEnum.DocsEditorEmbed).ToString(), _commonLinkUtility.GetFullAbsolutePath(_tenantWhiteLabelSettingsHelper.GetAbsoluteLogoPath(_tenantWhiteLabelSettings,WhiteLabelLogoTypeEnum.DocsEditorEmbed, !inDto.IsRetina)) }, - { ((int)WhiteLabelLogoTypeEnum.LeftMenu).ToString(), _commonLinkUtility.GetFullAbsolutePath(_tenantWhiteLabelSettingsHelper.GetAbsoluteLogoPath(_tenantWhiteLabelSettings,WhiteLabelLogoTypeEnum.LeftMenu, !inDto.IsRetina)) }, - { ((int)WhiteLabelLogoTypeEnum.AboutPage).ToString(), _commonLinkUtility.GetFullAbsolutePath(_tenantWhiteLabelSettingsHelper.GetAbsoluteLogoPath(_tenantWhiteLabelSettings,WhiteLabelLogoTypeEnum.AboutPage, !inDto.IsRetina)) } - }; - } return result; } ///false [HttpGet("whitelabel/logotext")] - public object GetWhiteLabelLogoText([FromQuery] WhiteLabelQueryRequestsDto inDto) + public object GetWhiteLabelLogoText() { _permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings); DemandWhiteLabelPermission(); - var settings = inDto.IsDefault ? _settingsManager.LoadForDefaultTenant() : _settingsManager.Load(); + var settings = _settingsManager.Load(); return settings.LogoText ?? TenantWhiteLabelSettings.DefaultLogoText; } @@ -255,52 +181,28 @@ public class WhitelabelController : BaseSettingsController ///false [HttpPut("whitelabel/restore")] - public bool RestoreWhiteLabelOptions(WhiteLabelQueryRequestsDto inDto) + public bool RestoreWhiteLabelOptions() { _permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings); - DemandWhiteLabelPermission(); - if (inDto.IsDefault) - { - DemandRebrandingPermission(); - RestoreWhiteLabelOptionsForDefaultTenant(); - } - else - { - RestoreWhiteLabelOptionsForCurrentTenant(); - } - return true; - } - - private void RestoreWhiteLabelOptionsForCurrentTenant() - { var settings = _settingsManager.Load(); - - RestoreWhiteLabelOptionsForTenant(settings, null, Tenant.Id); + + _tenantWhiteLabelSettingsHelper.RestoreDefault(settings, _tenantLogoManager, Tenant.Id, null); var tenantInfoSettings = _settingsManager.Load(); _tenantInfoSettingsHelper.RestoreDefaultLogo(tenantInfoSettings, _tenantLogoManager); - _settingsManager.Save(tenantInfoSettings); - } + _settingsManager.Save(tenantInfoSettings); - private void RestoreWhiteLabelOptionsForDefaultTenant() - { - var settings = _settingsManager.LoadForDefaultTenant(); - var storage = _storageFactory.GetStorage(string.Empty, "static_partnerdata"); - - RestoreWhiteLabelOptionsForTenant(settings, storage, Tenant.DefaultTenant); - } - - private void RestoreWhiteLabelOptionsForTenant(TenantWhiteLabelSettings settings, IDataStore storage, int tenantId) - { - _tenantWhiteLabelSettingsHelper.RestoreDefault(settings, _tenantLogoManager, tenantId, storage); + return true; } ///false [HttpGet("companywhitelabel")] public List GetLicensorData() - { + { + _permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings); + var result = new List(); var instance = CompanyWhiteLabelSettings.Instance(_settingsManager); @@ -318,17 +220,18 @@ public class WhitelabelController : BaseSettingsController ///false [HttpPost("rebranding/company")] public bool SaveCompanyWhiteLabelSettings(CompanyWhiteLabelSettingsWrapper companyWhiteLabelSettingsWrapper) - { + { + _permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings); + DemandWhiteLabelPermission(); + if (companyWhiteLabelSettingsWrapper.Settings == null) { throw new ArgumentNullException("settings"); } - DemandRebrandingPermission(); - companyWhiteLabelSettingsWrapper.Settings.IsLicensor = false; - _settingsManager.SaveForDefaultTenant(companyWhiteLabelSettingsWrapper.Settings); + _settingsManager.Save(companyWhiteLabelSettingsWrapper.Settings); return true; } @@ -337,18 +240,21 @@ public class WhitelabelController : BaseSettingsController [HttpGet("rebranding/company")] public CompanyWhiteLabelSettings GetCompanyWhiteLabelSettings() { - return _settingsManager.LoadForDefaultTenant(); + _permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings); + + return _settingsManager.Load(); } ///false [HttpDelete("rebranding/company")] public CompanyWhiteLabelSettings DeleteCompanyWhiteLabelSettings() { - DemandRebrandingPermission(); + _permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings); + DemandWhiteLabelPermission(); var defaultSettings = _settingsManager.GetDefault(); - _settingsManager.SaveForDefaultTenant(defaultSettings); + _settingsManager.Save(defaultSettings); return defaultSettings; } @@ -356,15 +262,16 @@ public class WhitelabelController : BaseSettingsController ///false [HttpPost("rebranding/additional")] public bool SaveAdditionalWhiteLabelSettings(AdditionalWhiteLabelSettingsWrapper wrapper) - { + { + _permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings); + DemandWhiteLabelPermission(); + if (wrapper.Settings == null) { throw new ArgumentNullException("settings"); } - DemandRebrandingPermission(); - - _settingsManager.SaveForDefaultTenant(wrapper.Settings); + _settingsManager.Save(wrapper.Settings); return true; } @@ -373,43 +280,35 @@ public class WhitelabelController : BaseSettingsController [HttpGet("rebranding/additional")] public AdditionalWhiteLabelSettings GetAdditionalWhiteLabelSettings() { - return _settingsManager.LoadForDefaultTenant(); + _permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings); + + return _settingsManager.Load(); } ///false [HttpDelete("rebranding/additional")] public AdditionalWhiteLabelSettings DeleteAdditionalWhiteLabelSettings() { - DemandRebrandingPermission(); + _permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings); + DemandWhiteLabelPermission(); var defaultSettings = _settingsManager.GetDefault(); - _settingsManager.SaveForDefaultTenant(defaultSettings); + _settingsManager.Save(defaultSettings); return defaultSettings; } ///false [HttpPost("rebranding/mail")] - public bool SaveMailWhiteLabelSettingsFromBody([FromBody] MailWhiteLabelSettings settings) - { - return SaveMailWhiteLabelSettings(settings); - } - - ///false - [HttpPost("rebranding/mail")] - public bool SaveMailWhiteLabelSettingsFromForm([FromForm] MailWhiteLabelSettings settings) - { - return SaveMailWhiteLabelSettings(settings); - } - - private bool SaveMailWhiteLabelSettings(MailWhiteLabelSettings settings) - { + public bool SaveMailWhiteLabelSettings(MailWhiteLabelSettings settings) + { + _permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings); + DemandWhiteLabelPermission(); + ArgumentNullException.ThrowIfNull(settings); - DemandRebrandingPermission(); - - _settingsManager.SaveForDefaultTenant(settings); + _settingsManager.Save(settings); return true; } @@ -417,13 +316,14 @@ public class WhitelabelController : BaseSettingsController [HttpPut("rebranding/mail")] public bool UpdateMailWhiteLabelSettings(MailWhiteLabelSettingsRequestsDto inDto) { - DemandRebrandingPermission(); + _permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings); + DemandWhiteLabelPermission(); - var settings = _settingsManager.LoadForDefaultTenant(); + var settings = _settingsManager.Load(); settings.FooterEnabled = inDto.FooterEnabled; - _settingsManager.SaveForDefaultTenant(settings); + _settingsManager.Save(settings); return true; } @@ -431,38 +331,40 @@ public class WhitelabelController : BaseSettingsController ///false [HttpGet("rebranding/mail")] public MailWhiteLabelSettings GetMailWhiteLabelSettings() - { - return _settingsManager.LoadForDefaultTenant(); + { + _permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings); + + return _settingsManager.Load(); } ///false [HttpDelete("rebranding/mail")] public MailWhiteLabelSettings DeleteMailWhiteLabelSettings() - { - DemandRebrandingPermission(); + { + _permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings); + DemandWhiteLabelPermission(); var defaultSettings = _settingsManager.GetDefault(); - _settingsManager.SaveForDefaultTenant(defaultSettings); + _settingsManager.Save(defaultSettings); return defaultSettings; } + ///false + [HttpGet("enableWhitelabel")] + public bool GetEnableWhitelabel() + { + _permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings); + + return _coreBaseSettings.Standalone || _tenantLogoManager.WhiteLabelEnabled && _tenantLogoManager.WhiteLabelPaid; + } + private void DemandWhiteLabelPermission() { if (!_coreBaseSettings.Standalone && (!_tenantLogoManager.WhiteLabelEnabled || !_tenantLogoManager.WhiteLabelPaid)) { throw new BillingException(Resource.ErrorNotAllowedOption, "WhiteLabel"); } - } - - private void DemandRebrandingPermission() - { - _tenantExtra.DemandControlPanelPermission(); - - if (_coreBaseSettings.CustomMode) - { - throw new SecurityException(); - } } }