From 0ef24ebc3ff1f5eeda2b9e81845e8a649f858caa Mon Sep 17 00:00:00 2001 From: sbwalker Date: Thu, 23 Jan 2025 09:08:02 -0500 Subject: [PATCH] allow packages to be managed across installations --- .../Modules/Admin/SystemInfo/Index.razor | 17 ++++++++--- .../Modules/Admin/SystemInfo/Index.resx | 10 +++++-- .../Controllers/PackageController.cs | 30 ++++++++++++++++--- Oqtane.Server/Controllers/SystemController.cs | 1 + 4 files changed, 48 insertions(+), 10 deletions(-) diff --git a/Oqtane.Client/Modules/Admin/SystemInfo/Index.razor b/Oqtane.Client/Modules/Admin/SystemInfo/Index.razor index eb3cb283..3485d814 100644 --- a/Oqtane.Client/Modules/Admin/SystemInfo/Index.razor +++ b/Oqtane.Client/Modules/Admin/SystemInfo/Index.razor @@ -133,11 +133,17 @@
- +
+
+ +
+ +
+


  @@ -180,8 +186,9 @@ private string _notificationlevel = string.Empty; private string _swagger = string.Empty; private string _packageregistryurl = string.Empty; + private string _packageregistryemail = string.Empty; - private string _log = string.Empty; + private string _log = string.Empty; protected override async Task OnInitializedAsync() { @@ -211,7 +218,8 @@ _notificationlevel = systeminfo["Logging:LogLevel:Notify"].ToString(); _swagger = systeminfo["UseSwagger"].ToString(); _packageregistryurl = systeminfo["PackageRegistryUrl"].ToString(); - } + _packageregistryemail = systeminfo["PackageRegistryEmail"].ToString(); + } systeminfo = await SystemService.GetSystemInfoAsync("log"); if (systeminfo != null) @@ -230,7 +238,8 @@ settings.Add("Logging:LogLevel:Notify", _notificationlevel); settings.Add("UseSwagger", _swagger); settings.Add("PackageRegistryUrl", _packageregistryurl); - await SystemService.UpdateSystemInfoAsync(settings); + settings.Add("PackageRegistryEmail", _packageregistryemail); + await SystemService.UpdateSystemInfoAsync(settings); AddModuleMessage(Localizer["Success.UpdateConfig.Restart"], MessageType.Success); } catch (Exception ex) diff --git a/Oqtane.Client/Resources/Modules/Admin/SystemInfo/Index.resx b/Oqtane.Client/Resources/Modules/Admin/SystemInfo/Index.resx index 76747197..48525017 100644 --- a/Oqtane.Client/Resources/Modules/Admin/SystemInfo/Index.resx +++ b/Oqtane.Client/Resources/Modules/Admin/SystemInfo/Index.resx @@ -220,10 +220,10 @@ You Have Been Successfully Registered For Updates - Specify The Package Manager Service For Installing Modules, Themes, And Translations. If This Field Is Blank It Means The Package Manager Service Is Disabled For This Installation. + Specify The Url Of The Package Manager Service For Installing Modules, Themes, And Translations. If This Field Is Blank It Means The Package Manager Service Is Disabled For This Installation. - Package Manager: + Package Manager Url: Specify If Swagger Is Enabled For Your Server API @@ -294,4 +294,10 @@ Process: + + Package Manager Email: + + + Specify The Email Address Of The User Account Used For Interacting With The Package Manager Service. This Account Is Used For Managing Packages Across Multiple Installations. + \ No newline at end of file diff --git a/Oqtane.Server/Controllers/PackageController.cs b/Oqtane.Server/Controllers/PackageController.cs index 795eb525..f1aba718 100644 --- a/Oqtane.Server/Controllers/PackageController.cs +++ b/Oqtane.Server/Controllers/PackageController.cs @@ -12,6 +12,8 @@ using Oqtane.Infrastructure; using Oqtane.Enums; using System.Net.Http.Headers; using System.Text.Json; +using Oqtane.Managers; +using System.Net; // ReSharper disable PartialTypeWithSinglePart namespace Oqtane.Controllers @@ -20,13 +22,15 @@ namespace Oqtane.Controllers public class PackageController : Controller { private readonly IInstallationManager _installationManager; + private readonly IUserManager _userManager; private readonly IWebHostEnvironment _environment; private readonly IConfigManager _configManager; private readonly ILogManager _logger; - public PackageController(IInstallationManager installationManager, IWebHostEnvironment environment, IConfigManager configManager, ILogManager logger) + public PackageController(IInstallationManager installationManager, IUserManager userManager, IWebHostEnvironment environment, IConfigManager configManager, ILogManager logger) { _installationManager = installationManager; + _userManager = userManager; _environment = environment; _configManager = configManager; _logger = logger; @@ -45,7 +49,7 @@ namespace Oqtane.Controllers { client.DefaultRequestHeaders.Add("Referer", HttpContext.Request.Scheme + "://" + HttpContext.Request.Host.Value); client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(Constants.PackageId, Constants.Version)); - packages = await GetJson>(client, url + $"/api/registry/packages/?id={_configManager.GetInstallationId()}&type={type.ToLower()}&version={Constants.Version}&search={search}&price={price}&package={package}&sort={sort}"); + packages = await GetJson>(client, url + $"/api/registry/packages/?id={_configManager.GetInstallationId()}&type={type.ToLower()}&version={Constants.Version}&search={WebUtility.UrlEncode(search)}&price={price}&package={package}&sort={sort}&email={WebUtility.UrlEncode(GetPackageRegistryEmail())}"); } } return packages; @@ -64,7 +68,7 @@ namespace Oqtane.Controllers { client.DefaultRequestHeaders.Add("Referer", HttpContext.Request.Scheme + "://" + HttpContext.Request.Host.Value); client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(Constants.PackageId, Constants.Version)); - packages = await GetJson>(client, url + $"/api/registry/updates/?id={_configManager.GetInstallationId()}&version={Constants.Version}&type={type}"); + packages = await GetJson>(client, url + $"/api/registry/updates/?id={_configManager.GetInstallationId()}&version={Constants.Version}&type={type}&email={WebUtility.UrlEncode(GetPackageRegistryEmail())}"); } } return packages; @@ -83,7 +87,7 @@ namespace Oqtane.Controllers { client.DefaultRequestHeaders.Add("Referer", HttpContext.Request.Scheme + "://" + HttpContext.Request.Host.Value); client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(Constants.PackageId, Constants.Version)); - package = await GetJson(client, url + $"/api/registry/package/?id={_configManager.GetInstallationId()}&package={packageid}&version={version}&download={download}"); + package = await GetJson(client, url + $"/api/registry/package/?id={_configManager.GetInstallationId()}&package={packageid}&version={version}&download={download}&email={WebUtility.UrlEncode(GetPackageRegistryEmail())}"); } if (package != null) @@ -117,6 +121,24 @@ namespace Oqtane.Controllers return package; } + private string GetPackageRegistryEmail() + { + var email = _configManager.GetSetting("PackageRegistryEmail", ""); + if (string.IsNullOrEmpty(email)) + { + if (User.Identity.IsAuthenticated) + { + var user = _userManager.GetUser(User.Identity.Name, -1); + if (user != null) + { + email = user.Email; + _configManager.AddOrUpdateSetting("PackageRegistryEmail", email, false); + } + } + } + return email; + } + private async Task GetJson(HttpClient httpClient, string url) { try diff --git a/Oqtane.Server/Controllers/SystemController.cs b/Oqtane.Server/Controllers/SystemController.cs index b34611f4..74aa9a27 100644 --- a/Oqtane.Server/Controllers/SystemController.cs +++ b/Oqtane.Server/Controllers/SystemController.cs @@ -54,6 +54,7 @@ namespace Oqtane.Controllers systeminfo.Add("Logging:LogLevel:Notify", _configManager.GetSetting("Logging:LogLevel:Notify", "Error")); systeminfo.Add("UseSwagger", _configManager.GetSetting("UseSwagger", "true")); systeminfo.Add("PackageRegistryUrl", _configManager.GetSetting("PackageRegistryUrl", Constants.PackageRegistryUrl)); + systeminfo.Add("PackageRegistryEmail", _configManager.GetSetting("PackageRegistryEmail", "")); break; case "log": string log = "";