fixes to emable module package installation from wwwroot/modules
This commit is contained in:
parent
93a09f6db8
commit
dbcb973119
|
@ -107,17 +107,9 @@ namespace Oqtane.Infrastructure
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (install)
|
if (install && restart)
|
||||||
{
|
{
|
||||||
if (restart)
|
RestartApplication();
|
||||||
{
|
|
||||||
RestartApplication();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_cache.Remove("moduledefinitions");
|
|
||||||
_cache.Remove("jobs");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.Extensions.Hosting;
|
using Microsoft.Extensions.Hosting;
|
||||||
// DO NOT REMOVE - needed for client-side Blazor
|
|
||||||
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
|
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.AspNetCore;
|
using Microsoft.AspNetCore;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
@ -14,11 +12,9 @@ namespace Oqtane.Server
|
||||||
public static void Main(string[] args)
|
public static void Main(string[] args)
|
||||||
{
|
{
|
||||||
var host = BuildWebHost(args);
|
var host = BuildWebHost(args);
|
||||||
|
// execute any database migrations for the framework or extensions
|
||||||
using (var serviceScope = host.Services.GetRequiredService<IServiceScopeFactory>().CreateScope())
|
using (var serviceScope = host.Services.GetRequiredService<IServiceScopeFactory>().CreateScope())
|
||||||
{
|
{
|
||||||
var installationManager = serviceScope.ServiceProvider.GetService<IInstallationManager>();
|
|
||||||
// install any modules or themes stored in nugget, then restart app to ensure all is loaded in order
|
|
||||||
installationManager.InstallPackages("Modules,Themes", true);
|
|
||||||
var databaseManager = serviceScope.ServiceProvider.GetService<DatabaseManager>();
|
var databaseManager = serviceScope.ServiceProvider.GetService<DatabaseManager>();
|
||||||
databaseManager.StartupMigration();
|
databaseManager.StartupMigration();
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using Microsoft.Extensions.Caching.Memory;
|
using Microsoft.Extensions.Caching.Memory;
|
||||||
|
using Oqtane.Extensions;
|
||||||
using Oqtane.Models;
|
using Oqtane.Models;
|
||||||
using Oqtane.Modules;
|
using Oqtane.Modules;
|
||||||
using Oqtane.Shared;
|
using Oqtane.Shared;
|
||||||
|
@ -36,7 +37,7 @@ namespace Oqtane.Repository
|
||||||
public void UpdateModuleDefinition(ModuleDefinition moduleDefinition)
|
public void UpdateModuleDefinition(ModuleDefinition moduleDefinition)
|
||||||
{
|
{
|
||||||
_permissions.UpdatePermissions(moduleDefinition.SiteId, EntityNames.ModuleDefinition, moduleDefinition.ModuleDefinitionId, moduleDefinition.Permissions);
|
_permissions.UpdatePermissions(moduleDefinition.SiteId, EntityNames.ModuleDefinition, moduleDefinition.ModuleDefinitionId, moduleDefinition.Permissions);
|
||||||
_cache.Remove("moduledefinitions");
|
_cache.Remove("moduledefinitions:" + moduleDefinition.SiteId.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DeleteModuleDefinition(int moduleDefinitionId, int siteId)
|
public void DeleteModuleDefinition(int moduleDefinitionId, int siteId)
|
||||||
|
@ -45,27 +46,35 @@ namespace Oqtane.Repository
|
||||||
_permissions.DeletePermissions(siteId, EntityNames.ModuleDefinition, moduleDefinitionId);
|
_permissions.DeletePermissions(siteId, EntityNames.ModuleDefinition, moduleDefinitionId);
|
||||||
_db.ModuleDefinition.Remove(moduleDefinition);
|
_db.ModuleDefinition.Remove(moduleDefinition);
|
||||||
_db.SaveChanges();
|
_db.SaveChanges();
|
||||||
_cache.Remove("moduledefinitions");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ModuleDefinition> LoadModuleDefinitions(int siteId)
|
public List<ModuleDefinition> LoadModuleDefinitions(int siteId)
|
||||||
{
|
{
|
||||||
List<ModuleDefinition> moduleDefinitions;
|
// get module definitions for site
|
||||||
|
List<ModuleDefinition> moduleDefinitions = _cache.GetOrCreate("moduledefinitions:" + siteId.ToString(), entry =>
|
||||||
|
{
|
||||||
|
entry.SlidingExpiration = TimeSpan.FromMinutes(30);
|
||||||
|
return LoadSiteModuleDefinitions(siteId);
|
||||||
|
});
|
||||||
|
return moduleDefinitions;
|
||||||
|
}
|
||||||
|
|
||||||
// get run-time module definitions
|
private List<ModuleDefinition> LoadSiteModuleDefinitions(int siteId)
|
||||||
moduleDefinitions = _cache.GetOrCreate("moduledefinitions", entry =>
|
{
|
||||||
|
// get module assemblies
|
||||||
|
List<ModuleDefinition> moduleDefinitions = _cache.GetOrCreate("moduledefinitions", entry =>
|
||||||
{
|
{
|
||||||
entry.SlidingExpiration = TimeSpan.FromMinutes(30);
|
entry.SlidingExpiration = TimeSpan.FromMinutes(30);
|
||||||
return LoadModuleDefinitionsFromAssemblies();
|
return LoadModuleDefinitionsFromAssemblies();
|
||||||
});
|
});
|
||||||
|
|
||||||
// get module defintion permissions for site
|
// get module definition permissions for site
|
||||||
List<Permission> permissions = _permissions.GetPermissions(siteId, EntityNames.ModuleDefinition).ToList();
|
List<Permission> permissions = _permissions.GetPermissions(siteId, EntityNames.ModuleDefinition).ToList();
|
||||||
|
|
||||||
// get module definitions in database
|
// get module definitions in database
|
||||||
List<ModuleDefinition> moduledefs = _db.ModuleDefinition.ToList();
|
List<ModuleDefinition> moduledefs = _db.ModuleDefinition.ToList();
|
||||||
|
|
||||||
// sync run-time module definitions with database
|
// sync module assemblies with database
|
||||||
foreach (ModuleDefinition moduledefinition in moduleDefinitions)
|
foreach (ModuleDefinition moduledefinition in moduleDefinitions)
|
||||||
{
|
{
|
||||||
ModuleDefinition moduledef = moduledefs.Where(item => item.ModuleDefinitionName == moduledefinition.ModuleDefinitionName).FirstOrDefault();
|
ModuleDefinition moduledef = moduledefs.Where(item => item.ModuleDefinitionName == moduledefinition.ModuleDefinitionName).FirstOrDefault();
|
||||||
|
@ -88,8 +97,8 @@ namespace Oqtane.Repository
|
||||||
{
|
{
|
||||||
moduledefinition.Permissions = _permissions.EncodePermissions(permissions.Where(item => item.EntityId == moduledef.ModuleDefinitionId));
|
moduledefinition.Permissions = _permissions.EncodePermissions(permissions.Where(item => item.EntityId == moduledef.ModuleDefinitionId));
|
||||||
}
|
}
|
||||||
// remove module definition from list
|
// remove module definition from list as it is already synced
|
||||||
moduledefs.Remove(moduledef);
|
moduledefs.Remove(moduledef);
|
||||||
}
|
}
|
||||||
moduledefinition.ModuleDefinitionId = moduledef.ModuleDefinitionId;
|
moduledefinition.ModuleDefinitionId = moduledef.ModuleDefinitionId;
|
||||||
moduledefinition.SiteId = siteId;
|
moduledefinition.SiteId = siteId;
|
||||||
|
@ -104,6 +113,7 @@ namespace Oqtane.Repository
|
||||||
{
|
{
|
||||||
_permissions.DeletePermissions(siteId, EntityNames.ModuleDefinition, moduledefinition.ModuleDefinitionId);
|
_permissions.DeletePermissions(siteId, EntityNames.ModuleDefinition, moduledefinition.ModuleDefinitionId);
|
||||||
_db.ModuleDefinition.Remove(moduledefinition); // delete
|
_db.ModuleDefinition.Remove(moduledefinition); // delete
|
||||||
|
_db.SaveChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
return moduleDefinitions;
|
return moduleDefinitions;
|
||||||
|
@ -166,11 +176,18 @@ namespace Oqtane.Repository
|
||||||
moduledefinition.AssemblyName = assembly.FullName.Split(",")[0];
|
moduledefinition.AssemblyName = assembly.FullName.Split(",")[0];
|
||||||
if (moduledefinition.Categories == "Admin")
|
if (moduledefinition.Categories == "Admin")
|
||||||
{
|
{
|
||||||
moduledefinition.Permissions = "[{\"PermissionName\":\"Utilize\",\"Permissions\":\"" + Constants.AdminRole + "\"}]";
|
moduledefinition.Permissions = new List<Permission>
|
||||||
|
{
|
||||||
|
new Permission(PermissionNames.Utilize, Constants.AdminRole, true)
|
||||||
|
}.EncodePermissions();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
moduledefinition.Permissions = "[{\"PermissionName\":\"Utilize\",\"Permissions\":\"" + Constants.AdminRole + ";" + Constants.RegisteredRole + "\"}]";
|
moduledefinition.Permissions = new List<Permission>
|
||||||
|
{
|
||||||
|
new Permission(PermissionNames.Utilize, Constants.AdminRole, true),
|
||||||
|
new Permission(PermissionNames.Utilize, Constants.RegisteredRole, true)
|
||||||
|
}.EncodePermissions();
|
||||||
}
|
}
|
||||||
moduledefinitions.Add(moduledefinition);
|
moduledefinitions.Add(moduledefinition);
|
||||||
index = moduledefinitions.FindIndex(item => item.ModuleDefinitionName == qualifiedModuleType);
|
index = moduledefinitions.FindIndex(item => item.ModuleDefinitionName == qualifiedModuleType);
|
||||||
|
|
|
@ -153,7 +153,14 @@ namespace Oqtane
|
||||||
services.AddSingleton<IInstallationManager, InstallationManager>();
|
services.AddSingleton<IInstallationManager, InstallationManager>();
|
||||||
services.AddSingleton<ISyncManager, SyncManager>();
|
services.AddSingleton<ISyncManager, SyncManager>();
|
||||||
services.AddSingleton<DatabaseManager>();
|
services.AddSingleton<DatabaseManager>();
|
||||||
|
|
||||||
|
// install any modules or themes ( this needs to occur BEFORE the assemblies are loaded into the app domain )
|
||||||
|
#pragma warning disable ASP0000
|
||||||
|
ServiceProvider sp = services.BuildServiceProvider();
|
||||||
|
#pragma warning restore ASP0000
|
||||||
|
var InstallationManager = sp.GetRequiredService<IInstallationManager>();
|
||||||
|
InstallationManager.InstallPackages("Modules,Themes", false);
|
||||||
|
|
||||||
// register transient scoped core services
|
// register transient scoped core services
|
||||||
services.AddTransient<IModuleDefinitionRepository, ModuleDefinitionRepository>();
|
services.AddTransient<IModuleDefinitionRepository, ModuleDefinitionRepository>();
|
||||||
services.AddTransient<IThemeRepository, ThemeRepository>();
|
services.AddTransient<IThemeRepository, ThemeRepository>();
|
||||||
|
@ -181,12 +188,13 @@ namespace Oqtane
|
||||||
services.AddTransient<ISiteTemplateRepository, SiteTemplateRepository>();
|
services.AddTransient<ISiteTemplateRepository, SiteTemplateRepository>();
|
||||||
services.AddTransient<ISqlRepository, SqlRepository>();
|
services.AddTransient<ISqlRepository, SqlRepository>();
|
||||||
|
|
||||||
|
// load the external assemblies into the app domain
|
||||||
services.AddOqtaneModules();
|
services.AddOqtaneModules();
|
||||||
services.AddOqtaneThemes();
|
services.AddOqtaneThemes();
|
||||||
services.AddOqtaneSiteTemplates();
|
services.AddOqtaneSiteTemplates();
|
||||||
|
|
||||||
services.AddMvc()
|
services.AddMvc()
|
||||||
.AddOqtaneApplicationParts()
|
.AddOqtaneApplicationParts() // register any Controllers from custom modules
|
||||||
.AddNewtonsoftJson();
|
.AddNewtonsoftJson();
|
||||||
|
|
||||||
services.AddOqtaneServices();
|
services.AddOqtaneServices();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user