Added ability for Runtime and RenderMode to be set per Site - enabling the framework to support multiple hosting models concurrently in the same installation. Fixed WebAssembly Prerendering issue (this also resolved the issue where the component taghelper was not passing parameters correctly to the app when running on WebAssembly). Fix #1702 - remove web,config from upgrade package.
This commit is contained in:
@ -102,15 +102,7 @@ namespace Oqtane.Controllers
|
||||
[HttpGet("load")]
|
||||
public IActionResult Load()
|
||||
{
|
||||
if (_configManager.GetSection("Runtime").Value == "WebAssembly")
|
||||
{
|
||||
return File(GetAssemblies(), System.Net.Mime.MediaTypeNames.Application.Octet, "oqtane.dll");
|
||||
}
|
||||
else
|
||||
{
|
||||
HttpContext.Response.StatusCode = (int)HttpStatusCode.Forbidden;
|
||||
return null;
|
||||
}
|
||||
return File(GetAssemblies(), System.Net.Mime.MediaTypeNames.Application.Octet, "oqtane.dll");
|
||||
}
|
||||
|
||||
private byte[] GetAssemblies()
|
||||
|
@ -84,10 +84,16 @@ namespace Oqtane.Controllers
|
||||
[Authorize(Roles = RoleNames.Admin)]
|
||||
public Site Put(int id, [FromBody] Site site)
|
||||
{
|
||||
if (ModelState.IsValid && site.SiteId == _alias.SiteId && site.TenantId == _alias.TenantId && _sites.GetSite(site.SiteId, false) != null)
|
||||
var current = _sites.GetSite(site.SiteId, false);
|
||||
if (ModelState.IsValid && site.SiteId == _alias.SiteId && site.TenantId == _alias.TenantId && current != null)
|
||||
{
|
||||
site = _sites.UpdateSite(site);
|
||||
_syncManager.AddSyncEvent(_alias.TenantId, EntityNames.Site, site.SiteId);
|
||||
bool reload = false;
|
||||
if (current.Runtime != site.Runtime || current.RenderMode != site.RenderMode)
|
||||
{
|
||||
reload = true;
|
||||
}
|
||||
_syncManager.AddSyncEvent(_alias.TenantId, EntityNames.Site, site.SiteId, reload);
|
||||
_logger.Log(site.SiteId, LogLevel.Information, this, LogFunction.Update, "Site Updated {Site}", site);
|
||||
}
|
||||
else
|
||||
|
@ -585,7 +585,9 @@ namespace Oqtane.Infrastructure
|
||||
DefaultThemeType = (!string.IsNullOrEmpty(install.DefaultTheme)) ? install.DefaultTheme : Constants.DefaultTheme,
|
||||
DefaultContainerType = (!string.IsNullOrEmpty(install.DefaultContainer)) ? install.DefaultContainer : Constants.DefaultContainer,
|
||||
AdminContainerType = (!string.IsNullOrEmpty(install.DefaultAdminContainer)) ? install.DefaultAdminContainer : Constants.DefaultAdminContainer,
|
||||
SiteTemplateType = install.SiteTemplate
|
||||
SiteTemplateType = install.SiteTemplate,
|
||||
Runtime = (!string.IsNullOrEmpty(install.Runtime)) ? install.Runtime : _configManager.GetSection("Runtime").Value,
|
||||
RenderMode = (!string.IsNullOrEmpty(install.RenderMode)) ? install.RenderMode : _configManager.GetSection("RenderMode").Value
|
||||
};
|
||||
site = sites.AddSite(site);
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Oqtane.Models;
|
||||
|
||||
@ -8,5 +8,6 @@ namespace Oqtane.Infrastructure
|
||||
{
|
||||
List<SyncEvent> GetSyncEvents(int tenantId, DateTime lastSyncDate);
|
||||
void AddSyncEvent(int tenantId, string entityName, int entityId);
|
||||
void AddSyncEvent(int tenantId, string entityName, int entityId, bool reload);
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,12 @@ namespace Oqtane.Infrastructure
|
||||
|
||||
public void AddSyncEvent(int tenantId, string entityName, int entityId)
|
||||
{
|
||||
SyncEvents.Add(new SyncEvent { TenantId = tenantId, EntityName = entityName, EntityId = entityId, ModifiedOn = DateTime.UtcNow });
|
||||
AddSyncEvent(tenantId, entityName, entityId, false);
|
||||
}
|
||||
|
||||
public void AddSyncEvent(int tenantId, string entityName, int entityId, bool reload)
|
||||
{
|
||||
SyncEvents.Add(new SyncEvent { TenantId = tenantId, EntityName = entityName, EntityId = entityId, Reload = reload, ModifiedOn = DateTime.UtcNow });
|
||||
// trim sync events
|
||||
SyncEvents.RemoveAll(item => item.ModifiedOn < DateTime.UtcNow.AddHours(-1));
|
||||
}
|
||||
|
@ -1,8 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Oqtane.Databases.Interfaces;
|
||||
using Oqtane.Interfaces;
|
||||
|
||||
namespace Oqtane.Migrations
|
||||
{
|
||||
|
33
Oqtane.Server/Migrations/Tenant/03000001_AddSiteRuntime.cs
Normal file
33
Oqtane.Server/Migrations/Tenant/03000001_AddSiteRuntime.cs
Normal file
@ -0,0 +1,33 @@
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Oqtane.Databases.Interfaces;
|
||||
using Oqtane.Migrations.EntityBuilders;
|
||||
using Oqtane.Repository;
|
||||
|
||||
namespace Oqtane.Migrations.Tenant
|
||||
{
|
||||
[DbContext(typeof(TenantDBContext))]
|
||||
[Migration("Tenant.03.00.00.01")]
|
||||
public class AddSiteRuntime : MultiDatabaseMigration
|
||||
{
|
||||
public AddSiteRuntime(IDatabase database) : base(database)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
var siteEntityBuilder = new SiteEntityBuilder(migrationBuilder, ActiveDatabase);
|
||||
siteEntityBuilder.AddStringColumn("Runtime", 50, true, true);
|
||||
siteEntityBuilder.UpdateColumn("Runtime", "'Server'");
|
||||
siteEntityBuilder.AddStringColumn("RenderMode", 50, true, true);
|
||||
siteEntityBuilder.UpdateColumn("RenderMode", "'ServerPrerendered'");
|
||||
}
|
||||
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
var siteEntityBuilder = new SiteEntityBuilder(migrationBuilder, ActiveDatabase);
|
||||
siteEntityBuilder.DropColumn("Runtime");
|
||||
siteEntityBuilder.DropColumn("RenderMode");
|
||||
}
|
||||
}
|
||||
}
|
@ -23,14 +23,16 @@ namespace Oqtane.Pages
|
||||
private readonly ILocalizationManager _localizationManager;
|
||||
private readonly ILanguageRepository _languages;
|
||||
private readonly IAntiforgery _antiforgery;
|
||||
private readonly ISiteRepository _sites;
|
||||
|
||||
public HostModel(IConfiguration configuration, ITenantManager tenantManager, ILocalizationManager localizationManager, ILanguageRepository languages, IAntiforgery antiforgery)
|
||||
public HostModel(IConfiguration configuration, ITenantManager tenantManager, ILocalizationManager localizationManager, ILanguageRepository languages, IAntiforgery antiforgery, ISiteRepository sites)
|
||||
{
|
||||
_configuration = configuration;
|
||||
_tenantManager = tenantManager;
|
||||
_localizationManager = localizationManager;
|
||||
_languages = languages;
|
||||
_antiforgery = antiforgery;
|
||||
_sites = sites;
|
||||
}
|
||||
|
||||
public string AntiForgeryToken = "";
|
||||
@ -48,7 +50,7 @@ namespace Oqtane.Pages
|
||||
Runtime = _configuration.GetSection("Runtime").Value;
|
||||
}
|
||||
|
||||
if (Runtime != "WebAssembly" && _configuration.GetSection("RenderMode").Exists())
|
||||
if (_configuration.GetSection("RenderMode").Exists())
|
||||
{
|
||||
RenderMode = (RenderMode)Enum.Parse(typeof(RenderMode), _configuration.GetSection("RenderMode").Value, true);
|
||||
}
|
||||
@ -67,6 +69,19 @@ namespace Oqtane.Pages
|
||||
var alias = _tenantManager.GetAlias();
|
||||
if (alias != null)
|
||||
{
|
||||
var site = _sites.GetSite(alias.SiteId);
|
||||
if (site != null)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(site.Runtime))
|
||||
{
|
||||
Runtime = site.Runtime;
|
||||
}
|
||||
if (!string.IsNullOrEmpty(site.RenderMode))
|
||||
{
|
||||
RenderMode = (RenderMode)Enum.Parse(typeof(RenderMode), site.RenderMode, true);
|
||||
}
|
||||
}
|
||||
|
||||
// if culture not specified
|
||||
if (HttpContext.Request.Cookies[CookieRequestCultureProvider.DefaultCookieName] == null)
|
||||
{
|
||||
@ -142,7 +157,6 @@ namespace Oqtane.Pages
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void ProcessResource(Resource resource)
|
||||
{
|
||||
switch (resource.ResourceType)
|
||||
@ -171,7 +185,6 @@ namespace Oqtane.Pages
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private string CrossOrigin(string crossorigin)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(crossorigin))
|
||||
|
@ -163,8 +163,8 @@ namespace Oqtane
|
||||
endpoints.MapFallbackToPage("/_Host");
|
||||
});
|
||||
|
||||
// create a sync event to identify server application startup
|
||||
sync.AddSyncEvent(-1, "Application", -1);
|
||||
// create a global sync event to identify server application startup
|
||||
sync.AddSyncEvent(-1, "Application", -1, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user