add ability to validate and download packages
This commit is contained in:
		@ -146,7 +146,7 @@ else
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            _package = await PackageService.GetPackageAsync(Constants.PackageId + "." + code, version);
 | 
			
		||||
            _package = await PackageService.GetPackageAsync(Constants.PackageId + "." + code, version, false);
 | 
			
		||||
            if (_package != null)
 | 
			
		||||
            {
 | 
			
		||||
                StateHasChanged();
 | 
			
		||||
@ -168,7 +168,7 @@ else
 | 
			
		||||
	{
 | 
			
		||||
		try
 | 
			
		||||
		{
 | 
			
		||||
			await PackageService.DownloadPackageAsync(_package.PackageId, _package.Version, Constants.PackagesFolder);
 | 
			
		||||
			await PackageService.DownloadPackageAsync(_package.PackageId, _package.Version);
 | 
			
		||||
			await logger.LogInformation("Language Package {Name} {Version} Downloaded Successfully", _package.PackageId, _package.Version);
 | 
			
		||||
			AddModuleMessage(string.Format(Localizer["Success.Language.Download"], NavigateUrl("admin/system")), MessageType.Success);
 | 
			
		||||
			_package = null;
 | 
			
		||||
 | 
			
		||||
@ -263,7 +263,7 @@
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            var package = await PackageService.GetPackageAsync(packageid, version);
 | 
			
		||||
            var package = await PackageService.GetPackageAsync(packageid, version, false);
 | 
			
		||||
            if (package != null)
 | 
			
		||||
            {
 | 
			
		||||
                _productname = package.Name;
 | 
			
		||||
@ -292,7 +292,7 @@
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            await PackageService.DownloadPackageAsync(_packageid, _packageversion, Constants.PackagesFolder);
 | 
			
		||||
            await PackageService.DownloadPackageAsync(_packageid, _packageversion);
 | 
			
		||||
            await logger.LogInformation("Package {PackageId} {Version} Downloaded Successfully", _packageid, _packageversion);
 | 
			
		||||
            AddModuleMessage(string.Format(Localizer["Success.Module.Download"], NavigateUrl("admin/system")), MessageType.Success);
 | 
			
		||||
            _productname = "";
 | 
			
		||||
 | 
			
		||||
@ -61,7 +61,24 @@
 | 
			
		||||
					<div class="row mb-1 align-items-center">
 | 
			
		||||
						<Label Class="col-sm-3" For="packagename" HelpText="The unique name of the package from which this module was installed. This value must be specified within the module's IModule interface specification." ResourceKey="PackageName">Package Name: </Label>
 | 
			
		||||
						<div class="col-sm-9">
 | 
			
		||||
							<input id="packagename" class="form-control" @bind="@_packagename" disabled />
 | 
			
		||||
                            @if (!string.IsNullOrEmpty(_packagename))
 | 
			
		||||
                            {
 | 
			
		||||
                                <div class="input-group">
 | 
			
		||||
                                    <input id="packagename" class="form-control" @bind="@_packagename" disabled />
 | 
			
		||||
                                    @if (string.IsNullOrEmpty(_packageurl))
 | 
			
		||||
                                    {
 | 
			
		||||
                                        <button type="button" class="btn btn-secondary" @onclick="ValidatePackage">@Localizer["Validate"]</button>
 | 
			
		||||
                                    }
 | 
			
		||||
                                    else
 | 
			
		||||
                                    {
 | 
			
		||||
                                        <a href="@_packageurl" target="_blank" class="btn btn-primary">@SharedLocalizer["Download"]</a>
 | 
			
		||||
                                    }
 | 
			
		||||
                                </div>
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                <input id="packagename" class="form-control" @bind="@_packagename" disabled />
 | 
			
		||||
                            }
 | 
			
		||||
						</div>
 | 
			
		||||
					</div>
 | 
			
		||||
					<div class="row mb-1 align-items-center">
 | 
			
		||||
@ -191,7 +208,7 @@
 | 
			
		||||
							</p>
 | 
			
		||||
						</div>
 | 
			
		||||
						<div class="modal-footer">
 | 
			
		||||
							<button type="button" class="btn btn-success" @onclick="DownloadPackage">@SharedLocalizer["Accept"]</button>
 | 
			
		||||
							<button type="button" class="btn btn-success" @onclick="DownloadTranslation">@SharedLocalizer["Accept"]</button>
 | 
			
		||||
							<button type="button" class="btn btn-secondary" @onclick="HideModal">@SharedLocalizer["Cancel"]</button>
 | 
			
		||||
						</div>
 | 
			
		||||
					</div>
 | 
			
		||||
@ -213,6 +230,7 @@
 | 
			
		||||
    private string _moduledefinitionname = "";
 | 
			
		||||
    private string _version;
 | 
			
		||||
    private string _packagename = "";
 | 
			
		||||
    private string _packageurl = ""; 
 | 
			
		||||
    private string _owner = "";
 | 
			
		||||
    private string _url = "";
 | 
			
		||||
    private string _contact = "";
 | 
			
		||||
@ -364,7 +382,7 @@
 | 
			
		||||
        var version = _packages.Where(item => item.PackageId == packagename).FirstOrDefault().Version;
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            _package = await PackageService.GetPackageAsync(packagename, version);
 | 
			
		||||
            _package = await PackageService.GetPackageAsync(packagename, version, false);
 | 
			
		||||
            if (_package != null)
 | 
			
		||||
            {
 | 
			
		||||
                StateHasChanged();
 | 
			
		||||
@ -382,11 +400,11 @@
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private async Task DownloadPackage()
 | 
			
		||||
    private async Task DownloadTranslation()
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            await PackageService.DownloadPackageAsync(_package.PackageId, _package.Version, Constants.PackagesFolder);
 | 
			
		||||
            await PackageService.DownloadPackageAsync(_package.PackageId, _package.Version);
 | 
			
		||||
            await logger.LogInformation("Package {PackageId} {Version} Downloaded Successfully", _package.PackageId, _package.Version);
 | 
			
		||||
            AddModuleMessage(string.Format(Localizer["Success.Translation.Download"], NavigateUrl("admin/system")), MessageType.Success);
 | 
			
		||||
            _package = null;
 | 
			
		||||
@ -398,4 +416,28 @@
 | 
			
		||||
            AddModuleMessage(Localizer["Error.Translation.Download"], MessageType.Error);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private async Task ValidatePackage()
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            var package = await PackageService.GetPackageAsync(_packagename, _version, true);
 | 
			
		||||
            if (package == null || string.IsNullOrEmpty(package.PackageUrl))
 | 
			
		||||
            {
 | 
			
		||||
                AddModuleMessage(Localizer["Message.Validate"], MessageType.Warning);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                _packageurl = package.PackageUrl;
 | 
			
		||||
                AddModuleMessage(Localizer["Message.Download"], MessageType.Info);
 | 
			
		||||
            }
 | 
			
		||||
            StateHasChanged();
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception ex)
 | 
			
		||||
        {
 | 
			
		||||
            await logger.LogError(ex, "Error Downloading Package {PackageId} {Version}", _packagename, _version);
 | 
			
		||||
            AddModuleMessage(Localizer["Error.Validate"], MessageType.Error);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -128,8 +128,7 @@ else
 | 
			
		||||
    private async Task LoadModuleDefinitions()
 | 
			
		||||
    {
 | 
			
		||||
        _moduleDefinitions = _allModuleDefinitions.Where(item => item.Categories.Contains(_category)).ToList();
 | 
			
		||||
        var list = _moduleDefinitions.Where(item => !string.IsNullOrEmpty(item.PackageName)).Select(item => item.PackageName).Distinct().ToList();
 | 
			
		||||
        _packages = await PackageService.GetPackagesAsync(list);
 | 
			
		||||
        _packages = await PackageService.GetPackageUpdatesAsync("module");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private string PurchaseLink(string packagename)
 | 
			
		||||
@ -187,7 +186,7 @@ else
 | 
			
		||||
	{
 | 
			
		||||
		try
 | 
			
		||||
		{
 | 
			
		||||
			await PackageService.DownloadPackageAsync(packagename, version, Constants.PackagesFolder);
 | 
			
		||||
			await PackageService.DownloadPackageAsync(packagename, version);
 | 
			
		||||
			await logger.LogInformation("Module Downloaded {ModuleDefinitionName} {Version}", packagename, version);
 | 
			
		||||
			AddModuleMessage(string.Format(Localizer["Success.Module.Install"], NavigateUrl("admin/system")), MessageType.Success);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@ -263,7 +263,7 @@
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            var package = await PackageService.GetPackageAsync(packageid, version);
 | 
			
		||||
            var package = await PackageService.GetPackageAsync(packageid, version, false);
 | 
			
		||||
            if (package != null)
 | 
			
		||||
            {
 | 
			
		||||
                _productname = package.Name;
 | 
			
		||||
@ -292,7 +292,7 @@
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            await PackageService.DownloadPackageAsync(_packageid, _version, Constants.PackagesFolder);
 | 
			
		||||
            await PackageService.DownloadPackageAsync(_packageid, _version);
 | 
			
		||||
            await logger.LogInformation("Package {PackageId} {Version} Downloaded Successfully", _packageid, _version);
 | 
			
		||||
			AddModuleMessage(string.Format(Localizer["Success.Theme.Download"], NavigateUrl("admin/system")), MessageType.Success);
 | 
			
		||||
            _productname = "";
 | 
			
		||||
 | 
			
		||||
@ -2,6 +2,7 @@
 | 
			
		||||
@using System.Net
 | 
			
		||||
@inherits ModuleBase
 | 
			
		||||
@inject IThemeService ThemeService
 | 
			
		||||
@inject IPackageService PackageService
 | 
			
		||||
@inject NavigationManager NavigationManager
 | 
			
		||||
@inject IStringLocalizer<Edit> Localizer
 | 
			
		||||
@inject IStringLocalizer<SharedResources> SharedLocalizer
 | 
			
		||||
@ -44,8 +45,25 @@
 | 
			
		||||
	        <div class="row mb-1 align-items-center">
 | 
			
		||||
                <Label Class="col-sm-3" For="packagename" HelpText="The unique name of the package from which this theme was installed. This value must be specified within the theme's ITheme interface specification." ResourceKey="PackageName">Package Name: </Label>
 | 
			
		||||
		        <div class="col-sm-9">
 | 
			
		||||
			        <input id="packagename" class="form-control" @bind="@_packagename" disabled />
 | 
			
		||||
		        </div>
 | 
			
		||||
                    @if (!string.IsNullOrEmpty(_packagename))
 | 
			
		||||
                    {
 | 
			
		||||
                        <div class="input-group">
 | 
			
		||||
                            <input id="packagename" class="form-control" @bind="@_packagename" disabled />
 | 
			
		||||
                            @if (string.IsNullOrEmpty(_packageurl))
 | 
			
		||||
                            {
 | 
			
		||||
                                <button type="button" class="btn btn-secondary" @onclick="ValidatePackage">@Localizer["Validate"]</button>
 | 
			
		||||
                            }
 | 
			
		||||
                            else
 | 
			
		||||
                            {
 | 
			
		||||
                                <a href="@_packageurl" target="_blank" class="btn btn-primary">@SharedLocalizer["Download"]</a>
 | 
			
		||||
                            }
 | 
			
		||||
                        </div>
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        <input id="packagename" class="form-control" @bind="@_packagename" disabled />
 | 
			
		||||
                    }
 | 
			
		||||
                </div>
 | 
			
		||||
	        </div>
 | 
			
		||||
	        <div class="row mb-1 align-items-center">
 | 
			
		||||
                <Label Class="col-sm-3" For="owner" HelpText="The owner or creator of the theme" ResourceKey="Owner">Owner: </Label>
 | 
			
		||||
@ -97,7 +115,8 @@
 | 
			
		||||
    private string _isenabled;
 | 
			
		||||
    private string _name;
 | 
			
		||||
    private string _version;
 | 
			
		||||
    private string _packagename;
 | 
			
		||||
    private string _packagename = "";
 | 
			
		||||
    private string _packageurl = "";
 | 
			
		||||
    private string _owner = "";
 | 
			
		||||
    private string _url = "";
 | 
			
		||||
    private string _contact = "";
 | 
			
		||||
@ -166,4 +185,27 @@
 | 
			
		||||
            AddModuleMessage(SharedLocalizer["Message.InfoRequired"], MessageType.Warning);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private async Task ValidatePackage()
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            var package = await PackageService.GetPackageAsync(_packagename, _version, true);
 | 
			
		||||
            if (package == null || string.IsNullOrEmpty(package.PackageUrl))
 | 
			
		||||
            {
 | 
			
		||||
                AddModuleMessage(Localizer["Message.Validate"], MessageType.Warning);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                _packageurl = package.PackageUrl;
 | 
			
		||||
                AddModuleMessage(Localizer["Message.Download"], MessageType.Info);
 | 
			
		||||
            }
 | 
			
		||||
            StateHasChanged();
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception ex)
 | 
			
		||||
        {
 | 
			
		||||
            await logger.LogError(ex, "Error Downloading Package {PackageId} {Version}", _packagename, _version);
 | 
			
		||||
            AddModuleMessage(Localizer["Error.Validate"], MessageType.Error);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -79,8 +79,7 @@ else
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            _themes = await ThemeService.GetThemesAsync();
 | 
			
		||||
            var list = _themes.Where(item => !string.IsNullOrEmpty(item.PackageName)).Select(item => item.PackageName).Distinct().ToList();
 | 
			
		||||
            _packages = await PackageService.GetPackagesAsync(list);
 | 
			
		||||
            _packages = await PackageService.GetPackageUpdatesAsync("theme");
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception ex)
 | 
			
		||||
        {
 | 
			
		||||
@ -147,7 +146,7 @@ else
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            await PackageService.DownloadPackageAsync(packagename, version, Constants.PackagesFolder);
 | 
			
		||||
            await PackageService.DownloadPackageAsync(packagename, version);
 | 
			
		||||
            await logger.LogInformation("Theme Downloaded {ThemeName} {Version}", packagename, version);
 | 
			
		||||
            AddModuleMessage(string.Format(Localizer["Success.Theme.Install"], NavigateUrl("admin/system")), MessageType.Success);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -85,8 +85,8 @@
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            await PackageService.DownloadPackageAsync(packageid, version, Constants.PackagesFolder);
 | 
			
		||||
            await PackageService.DownloadPackageAsync(Constants.UpdaterPackageId, version, Constants.PackagesFolder);
 | 
			
		||||
            await PackageService.DownloadPackageAsync(packageid, version);
 | 
			
		||||
            await PackageService.DownloadPackageAsync(Constants.UpdaterPackageId, version);
 | 
			
		||||
            AddModuleMessage(Localizer["Success.Framework.Download"], MessageType.Success);
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception ex)
 | 
			
		||||
 | 
			
		||||
@ -228,4 +228,16 @@
 | 
			
		||||
  <data name="View License" xml:space="preserve">
 | 
			
		||||
    <value>View License</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="Error.Validate" xml:space="preserve">
 | 
			
		||||
    <value>Error Validating Package</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="Message.Download" xml:space="preserve">
 | 
			
		||||
    <value>Package Version Has Been Verified. Please Select The Download Button To Obtain The Package.</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="Message.Validate" xml:space="preserve">
 | 
			
		||||
    <value>This Package Version Has Not Been Registered In The Oqtane Marketplace Or You Do Not Have The Right To Use It From This Installation</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="Validate" xml:space="preserve">
 | 
			
		||||
    <value>Validate</value>
 | 
			
		||||
  </data>
 | 
			
		||||
</root>
 | 
			
		||||
@ -180,4 +180,16 @@
 | 
			
		||||
  <data name="View License" xml:space="preserve">
 | 
			
		||||
    <value>View License</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="Error.Validate" xml:space="preserve">
 | 
			
		||||
    <value>Error Validating Package</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="Message.Download" xml:space="preserve">
 | 
			
		||||
    <value>Package Version Has Been Verified. Please Select The Download Button To Obtain The Package.</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="Message.Validate" xml:space="preserve">
 | 
			
		||||
    <value>This Package Version Has Not Been Registered In The Oqtane Marketplace Or You Do Not Have The Right To Use It From This Installation</value>
 | 
			
		||||
  </data>
 | 
			
		||||
  <data name="Validate" xml:space="preserve">
 | 
			
		||||
    <value>Validate</value>
 | 
			
		||||
  </data>
 | 
			
		||||
</root>
 | 
			
		||||
@ -39,11 +39,10 @@ namespace Oqtane.Services
 | 
			
		||||
        Task<List<Package>> GetPackagesAsync(string type, string search, string price, string package, string sort);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Returns a list of packages matching the list of package names
 | 
			
		||||
        /// Returns a list of packages based on installationid
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="names"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        Task<List<Package>> GetPackagesAsync(List<string> packagenames);
 | 
			
		||||
        Task<List<Package>> GetPackageUpdatesAsync(string type);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Returns a specific package
 | 
			
		||||
@ -51,7 +50,7 @@ namespace Oqtane.Services
 | 
			
		||||
        /// <param name="packageId"></param>
 | 
			
		||||
        /// <param name="version"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        Task<Package> GetPackageAsync(string packageId, string version);
 | 
			
		||||
        Task<Package> GetPackageAsync(string packageId, string version, bool download);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Downloads a specific package as .nupkg file
 | 
			
		||||
@ -60,7 +59,7 @@ namespace Oqtane.Services
 | 
			
		||||
        /// <param name="version"></param>
 | 
			
		||||
        /// <param name="folder"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        Task DownloadPackageAsync(string packageId, string version, string folder);
 | 
			
		||||
        Task DownloadPackageAsync(string packageId, string version);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Installs all packages located in //TODO: 2dm where?
 | 
			
		||||
 | 
			
		||||
@ -31,19 +31,19 @@ namespace Oqtane.Services
 | 
			
		||||
            return await GetJsonAsync<List<Package>>($"{Apiurl}?type={type}&search={WebUtility.UrlEncode(search)}&price={price}&package={package}&sort={sort}");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task<List<Package>> GetPackagesAsync(List<string> packagenames)
 | 
			
		||||
        public async Task<List<Package>> GetPackageUpdatesAsync(string type)
 | 
			
		||||
        {
 | 
			
		||||
            return await GetJsonAsync<List<Package>>($"{Apiurl}/list/?names={string.Join(",", packagenames)}");
 | 
			
		||||
            return await GetJsonAsync<List<Package>>($"{Apiurl}/updates/?type={type}");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task<Package> GetPackageAsync(string packageId, string version)
 | 
			
		||||
        public async Task<Package> GetPackageAsync(string packageId, string version, bool download)
 | 
			
		||||
        {
 | 
			
		||||
            return await PostJsonAsync<Package>($"{Apiurl}?packageid={packageId}&version={version}", null);
 | 
			
		||||
            return await PostJsonAsync<Package>($"{Apiurl}?packageid={packageId}&version={version}&download={download}&install=false", null);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task DownloadPackageAsync(string packageId, string version, string folder)
 | 
			
		||||
        public async Task DownloadPackageAsync(string packageId, string version)
 | 
			
		||||
        {
 | 
			
		||||
            await PostAsync($"{Apiurl}?packageid={packageId}&version={version}&folder={folder}");
 | 
			
		||||
            await PostAsync($"{Apiurl}?packageid={packageId}&version={version}&download=true&install=true");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task InstallPackagesAsync()
 | 
			
		||||
 | 
			
		||||
@ -51,20 +51,20 @@ namespace Oqtane.Controllers
 | 
			
		||||
            return packages;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // GET: api/<controller>/list/?names=x,y,z
 | 
			
		||||
        [HttpGet("list")]
 | 
			
		||||
        public async Task<IEnumerable<Package>> GetPackages(string names)
 | 
			
		||||
        // GET: api/<controller>/updates/?type=x
 | 
			
		||||
        [HttpGet("updates")]
 | 
			
		||||
        public async Task<IEnumerable<Package>> GetPackageUpdates(string type)
 | 
			
		||||
        {
 | 
			
		||||
            // get packages
 | 
			
		||||
            List<Package> packages = new List<Package>();
 | 
			
		||||
            var url = _configManager.GetSetting("PackageRegistryUrl", Constants.PackageRegistryUrl);
 | 
			
		||||
            if (!string.IsNullOrEmpty(url) && !string.IsNullOrEmpty(names))
 | 
			
		||||
            if (!string.IsNullOrEmpty(url))
 | 
			
		||||
            {
 | 
			
		||||
                using (var client = new HttpClient())
 | 
			
		||||
                {
 | 
			
		||||
                    client.DefaultRequestHeaders.Add("Referer", HttpContext.Request.Scheme + "://" + HttpContext.Request.Host.Value);
 | 
			
		||||
                    client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(Constants.PackageId, Constants.Version));
 | 
			
		||||
                    packages = await GetJson<List<Package>>(client, url + $"/api/registry/list/?id={_configManager.GetInstallationId()}&version={Constants.Version}&list={names}");
 | 
			
		||||
                    packages = await GetJson<List<Package>>(client, url + $"/api/registry/updates/?id={_configManager.GetInstallationId()}&version={Constants.Version}&type={type}");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return packages;
 | 
			
		||||
@ -72,14 +72,13 @@ namespace Oqtane.Controllers
 | 
			
		||||
 | 
			
		||||
        [HttpPost]
 | 
			
		||||
        [Authorize(Roles = RoleNames.Host)]
 | 
			
		||||
        public async Task<Package> Post(string packageid, string version, string folder)
 | 
			
		||||
        public async Task<Package> Post(string packageid, string version, string download, string install)
 | 
			
		||||
        {
 | 
			
		||||
            // get package info
 | 
			
		||||
            Package package = null;
 | 
			
		||||
            var url = _configManager.GetSetting("PackageRegistryUrl", Constants.PackageRegistryUrl);
 | 
			
		||||
            if (!string.IsNullOrEmpty(url))
 | 
			
		||||
            {
 | 
			
		||||
                var download = (string.IsNullOrEmpty(folder)) ? "false" : "true";
 | 
			
		||||
                using (var client = new HttpClient())
 | 
			
		||||
                {
 | 
			
		||||
                    client.DefaultRequestHeaders.Add("Referer", HttpContext.Request.Scheme + "://" + HttpContext.Request.Host.Value);
 | 
			
		||||
@ -89,16 +88,16 @@ namespace Oqtane.Controllers
 | 
			
		||||
 | 
			
		||||
                if (package != null)
 | 
			
		||||
                {
 | 
			
		||||
                    if (bool.Parse(download))
 | 
			
		||||
                    if (bool.Parse(install))
 | 
			
		||||
                    {
 | 
			
		||||
                        using (var httpClient = new HttpClient())
 | 
			
		||||
                        {
 | 
			
		||||
                            folder = Path.Combine(_environment.ContentRootPath, folder);
 | 
			
		||||
                            var folder = Path.Combine(_environment.ContentRootPath, Constants.PackagesFolder);
 | 
			
		||||
                            var response = await httpClient.GetAsync(package.PackageUrl).ConfigureAwait(false);
 | 
			
		||||
                            if (response.IsSuccessStatusCode)
 | 
			
		||||
                            {
 | 
			
		||||
                                string filename = packageid + "." + version + ".nupkg";
 | 
			
		||||
                                using (var fileStream = new FileStream(Path.Combine(folder, filename), FileMode.Create, FileAccess.Write, FileShare.None))
 | 
			
		||||
                                using (var fileStream = new FileStream(Path.Combine(Constants.PackagesFolder, filename), FileMode.Create, FileAccess.Write, FileShare.None))
 | 
			
		||||
                                {
 | 
			
		||||
                                    await response.Content.CopyToAsync(fileStream).ConfigureAwait(false);
 | 
			
		||||
                                }
 | 
			
		||||
@ -112,7 +111,7 @@ namespace Oqtane.Controllers
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    _logger.Log(LogLevel.Error, this, LogFunction.Create, "Package {PackageId}.{Version} Is Not Registered", packageid, version);
 | 
			
		||||
                    _logger.Log(LogLevel.Error, this, LogFunction.Create, "Package {PackageId}.{Version} Is Not Registered In The Marketplace", packageid, version);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return package;
 | 
			
		||||
@ -120,17 +119,31 @@ namespace Oqtane.Controllers
 | 
			
		||||
 | 
			
		||||
        private async Task<T> GetJson<T>(HttpClient httpClient, string url)
 | 
			
		||||
        {
 | 
			
		||||
            Uri uri = new Uri(url);
 | 
			
		||||
            var response = await httpClient.GetAsync(uri).ConfigureAwait(false);
 | 
			
		||||
            if (response.IsSuccessStatusCode)
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                var stream = await response.Content.ReadAsStreamAsync();
 | 
			
		||||
                using (var streamReader = new StreamReader(stream))
 | 
			
		||||
                Uri uri = new Uri(url);
 | 
			
		||||
                var response = await httpClient.GetAsync(uri).ConfigureAwait(false);
 | 
			
		||||
                if (response.IsSuccessStatusCode && ValidateJsonContent(response.Content))
 | 
			
		||||
                {
 | 
			
		||||
                    return await JsonSerializer.DeserializeAsync<T>(stream, new JsonSerializerOptions(JsonSerializerDefaults.Web));
 | 
			
		||||
                    var stream = await response.Content.ReadAsStreamAsync();
 | 
			
		||||
                    using (var streamReader = new StreamReader(stream))
 | 
			
		||||
                    {
 | 
			
		||||
                        return await JsonSerializer.DeserializeAsync<T>(stream, new JsonSerializerOptions(JsonSerializerDefaults.Web));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                return default(T);
 | 
			
		||||
            }
 | 
			
		||||
            return default(T);
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
            {
 | 
			
		||||
                _logger.Log(LogLevel.Error, this, LogFunction.Read, ex, "Error Accessing Marketplace API {Url}", url);
 | 
			
		||||
                return default(T);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private static bool ValidateJsonContent(HttpContent content)
 | 
			
		||||
        {
 | 
			
		||||
            var mediaType = content?.Headers.ContentType?.MediaType;
 | 
			
		||||
            return mediaType != null && mediaType.Equals("application/json", StringComparison.OrdinalIgnoreCase);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        [HttpGet("install")]
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user