diff --git a/Oqtane.Client/Modules/Admin/Login/Index.razor b/Oqtane.Client/Modules/Admin/Login/Index.razor
index 5310049d..41f36dc3 100644
--- a/Oqtane.Client/Modules/Admin/Login/Index.razor
+++ b/Oqtane.Client/Modules/Admin/Login/Index.razor
@@ -81,8 +81,7 @@
private async Task Login()
{
- var authstateprovider = (IdentityAuthenticationStateProvider)ServiceProvider.GetService(typeof(IdentityAuthenticationStateProvider));
- if (authstateprovider == null)
+ if (PageState.Runtime == Runtime.Server)
{
// server-side Blazor
User user = new User();
@@ -116,6 +115,7 @@
if (user.IsAuthenticated)
{
await logger.LogInformation("Login Successful For Username {Username}", _username);
+ var authstateprovider = (IdentityAuthenticationStateProvider)ServiceProvider.GetService(typeof(IdentityAuthenticationStateProvider));
authstateprovider.NotifyAuthenticationChanged();
NavigationManager.NavigateTo(NavigateUrl(_returnUrl, "reload"));
}
diff --git a/Oqtane.Client/Oqtane.Client.csproj b/Oqtane.Client/Oqtane.Client.csproj
index d66027f3..a95adf1b 100644
--- a/Oqtane.Client/Oqtane.Client.csproj
+++ b/Oqtane.Client/Oqtane.Client.csproj
@@ -10,7 +10,7 @@
7.3
3.0
- Debug;Release;Wasm
+ Debug;Release;WebAssembly
0.0.9
Oqtane
Shaun Walker
@@ -24,7 +24,7 @@
Oqtane
-
+
TRACE;WASM
diff --git a/Oqtane.Client/Program.cs b/Oqtane.Client/Program.cs
index ca04c0c4..b256ca9b 100644
--- a/Oqtane.Client/Program.cs
+++ b/Oqtane.Client/Program.cs
@@ -1,4 +1,7 @@
-namespace Oqtane
+// DO NOT REMOVE - needed for client-side Blazor
+using Microsoft.AspNetCore.Blazor.Hosting;
+
+namespace Oqtane.Client
{
public class Program
{
diff --git a/Oqtane.Client/Services/Interfaces/IModuleDefinitionService.cs b/Oqtane.Client/Services/Interfaces/IModuleDefinitionService.cs
index 04450500..e0bc3a24 100644
--- a/Oqtane.Client/Services/Interfaces/IModuleDefinitionService.cs
+++ b/Oqtane.Client/Services/Interfaces/IModuleDefinitionService.cs
@@ -1,4 +1,5 @@
using Oqtane.Models;
+using Oqtane.UI;
using System.Collections.Generic;
using System.Threading.Tasks;
@@ -11,6 +12,6 @@ namespace Oqtane.Services
Task UpdateModuleDefinitionAsync(ModuleDefinition moduleDefinition);
Task InstallModuleDefinitionsAsync();
Task DeleteModuleDefinitionAsync(int moduleDefinitionId, int siteId);
- Task LoadModuleDefinitionsAsync(int siteId);
+ Task LoadModuleDefinitionsAsync(int siteId, Runtime runtime);
}
}
diff --git a/Oqtane.Client/Services/ModuleDefinitionService.cs b/Oqtane.Client/Services/ModuleDefinitionService.cs
index ea1e658f..0d3cc4aa 100644
--- a/Oqtane.Client/Services/ModuleDefinitionService.cs
+++ b/Oqtane.Client/Services/ModuleDefinitionService.cs
@@ -7,7 +7,7 @@ using Microsoft.AspNetCore.Components;
using System;
using System.Reflection;
using Oqtane.Shared;
-using Oqtane.Providers;
+using Oqtane.UI;
namespace Oqtane.Services
{
@@ -16,14 +16,12 @@ namespace Oqtane.Services
private readonly HttpClient _http;
private readonly SiteState _siteState;
private readonly NavigationManager _navigationManager;
- private readonly IServiceProvider _serviceProvider;
- public ModuleDefinitionService(HttpClient http, SiteState siteState, NavigationManager navigationManager, IServiceProvider serviceProvider)
+ public ModuleDefinitionService(HttpClient http, SiteState siteState, NavigationManager navigationManager)
{
_http = http;
_siteState = siteState;
_navigationManager = navigationManager;
- _serviceProvider = serviceProvider;
}
private string Apiurl
@@ -57,14 +55,13 @@ namespace Oqtane.Services
await _http.DeleteAsync(Apiurl + "/" + moduleDefinitionId.ToString() + "?siteid=" + siteId.ToString());
}
- public async Task LoadModuleDefinitionsAsync(int siteId)
+ public async Task LoadModuleDefinitionsAsync(int siteId, Runtime runtime)
{
// get list of modules from the server
List moduledefinitions = await GetModuleDefinitionsAsync(siteId);
// download assemblies to browser when running client-side Blazor
- var authstateprovider = (IdentityAuthenticationStateProvider)_serviceProvider.GetService(typeof(IdentityAuthenticationStateProvider));
- if (authstateprovider != null)
+ if (runtime == Runtime.WebAssembly)
{
// get list of loaded assemblies on the client ( in the client-side hosting module the browser client has its own app domain )
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
diff --git a/Oqtane.Client/Themes/Controls/Login.razor b/Oqtane.Client/Themes/Controls/Login.razor
index f8dbddd3..5778af99 100644
--- a/Oqtane.Client/Themes/Controls/Login.razor
+++ b/Oqtane.Client/Themes/Controls/Login.razor
@@ -33,8 +33,7 @@
{
await UserService.LogoutUserAsync(PageState.User);
- var authstateprovider = (IdentityAuthenticationStateProvider)ServiceProvider.GetService(typeof(IdentityAuthenticationStateProvider));
- if (authstateprovider == null)
+ if (PageState.Runtime == Runtime.Server)
{
// server-side Blazor
var interop = new Interop(jsRuntime);
@@ -45,6 +44,7 @@
else
{
// client-side Blazor
+ var authstateprovider = (IdentityAuthenticationStateProvider)ServiceProvider.GetService(typeof(IdentityAuthenticationStateProvider));
authstateprovider.NotifyAuthenticationChanged();
NavigationManager.NavigateTo(NavigateUrl(PageState.Page.Path, "reload"));
}
diff --git a/Oqtane.Client/UI/PageState.cs b/Oqtane.Client/UI/PageState.cs
index e801ad73..a2678802 100644
--- a/Oqtane.Client/UI/PageState.cs
+++ b/Oqtane.Client/UI/PageState.cs
@@ -18,5 +18,6 @@ namespace Oqtane.UI
public string Action { get; set; }
public bool EditMode { get; set; }
public DateTime LastSyncDate { get; set; }
+ public Runtime Runtime { get; set; }
}
}
diff --git a/Oqtane.Client/UI/Runtime.cs b/Oqtane.Client/UI/Runtime.cs
new file mode 100644
index 00000000..dcc886b1
--- /dev/null
+++ b/Oqtane.Client/UI/Runtime.cs
@@ -0,0 +1,8 @@
+namespace Oqtane.UI
+{
+ public enum Runtime
+ {
+ Server,
+ WebAssembly
+ }
+}
diff --git a/Oqtane.Client/UI/SiteRouter.razor b/Oqtane.Client/UI/SiteRouter.razor
index 6bc85872..205c4ef4 100644
--- a/Oqtane.Client/UI/SiteRouter.razor
+++ b/Oqtane.Client/UI/SiteRouter.razor
@@ -13,6 +13,7 @@
@inject ILogService LogService
@using System.Diagnostics.CodeAnalysis
@using Oqtane.Enums
+@using System.Runtime.InteropServices
@implements IHandleAfterRender
@DynamicComponent
@@ -81,6 +82,7 @@
bool editmode = false;
Reload reload = Reload.None;
DateTime lastsyncdate = DateTime.UtcNow;
+ Runtime runtime = GetRuntime();
// get Url path and querystring ( and remove anchors )
string path = new Uri(_absoluteUri).PathAndQuery.Substring(1);
@@ -162,7 +164,7 @@
if (PageState == null || reload >= Reload.Site)
{
- await ModuleDefinitionService.LoadModuleDefinitionsAsync(site.SiteId);
+ await ModuleDefinitionService.LoadModuleDefinitionsAsync(site.SiteId, runtime);
pages = await PageService.GetPagesAsync(site.SiteId);
}
else
@@ -248,7 +250,8 @@
Uri = new Uri(_absoluteUri, UriKind.Absolute),
QueryString = querystring,
ModuleId = moduleid,
- Action = action
+ Action = action,
+ Runtime = runtime
};
if (PageState != null && (PageState.ModuleId != _pagestate.ModuleId || PageState.Action != _pagestate.Action))
@@ -458,4 +461,15 @@
return modules;
}
+ private Runtime GetRuntime()
+ {
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.Create("WEBASSEMBLY")))
+ {
+ return Runtime.WebAssembly;
+ }
+ else
+ {
+ return Runtime.Server;
+ }
+ }
}
diff --git a/Oqtane.Server/Oqtane.Server.csproj b/Oqtane.Server/Oqtane.Server.csproj
index 0e0e0d95..32847187 100644
--- a/Oqtane.Server/Oqtane.Server.csproj
+++ b/Oqtane.Server/Oqtane.Server.csproj
@@ -8,7 +8,7 @@
https://dotnet.myget.org/F/blazor-dev/api/v3/index.json;
true
- Debug;Release;Wasm
+ Debug;Release;WebAssembly
0.0.9
Oqtane
Shaun Walker
@@ -22,7 +22,7 @@
Oqtane
-
+
TRACE;WASM
diff --git a/Oqtane.Server/Program.cs b/Oqtane.Server/Program.cs
index 89bb47b3..b440e758 100644
--- a/Oqtane.Server/Program.cs
+++ b/Oqtane.Server/Program.cs
@@ -1,9 +1,11 @@
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
+// DO NOT REMOVE - needed for client-side Blazor
+using Microsoft.AspNetCore.Blazor.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.AspNetCore;
-// used by client-side Blazor
-
-namespace Oqtane
+namespace Oqtane.Server
{
public class Program
{
diff --git a/Oqtane.Server/Repository/SiteRepository.cs b/Oqtane.Server/Repository/SiteRepository.cs
index d1d0d1d5..096871c7 100644
--- a/Oqtane.Server/Repository/SiteRepository.cs
+++ b/Oqtane.Server/Repository/SiteRepository.cs
@@ -243,12 +243,14 @@ namespace Oqtane.Repository
_pageTemplates.Add(new PageTemplate { Name = "Login", Parent = "", Path = "login", Icon = "lock-locked", IsNavigation = false, IsPersonalizable = false, EditMode = false,
PagePermissions = _permissionRepository.EncodePermissions(new List {
new Permission(PermissionNames.View, Constants.AdminRole, true),
+ new Permission(PermissionNames.View, Constants.AllUsersRole, true),
new Permission(PermissionNames.Edit, Constants.AdminRole, true)
}),
PageTemplateModules = new List {
new PageTemplateModule { ModuleDefinitionName = "Oqtane.Modules.Admin.Login, Oqtane.Client", Title = "User Login", Pane = "Content",
ModulePermissions = _permissionRepository.EncodePermissions( new List {
new Permission(PermissionNames.View, Constants.AdminRole, true),
+ new Permission(PermissionNames.View, Constants.AllUsersRole, true),
new Permission(PermissionNames.Edit, Constants.AdminRole, true)
}), Content = "" }
}
@@ -256,12 +258,14 @@ namespace Oqtane.Repository
_pageTemplates.Add(new PageTemplate { Name = "Register", Parent = "", Path = "register", Icon = "person", IsNavigation = false, IsPersonalizable = false, EditMode = false,
PagePermissions = _permissionRepository.EncodePermissions(new List {
new Permission(PermissionNames.View, Constants.AdminRole, true),
+ new Permission(PermissionNames.View, Constants.AllUsersRole, true),
new Permission(PermissionNames.Edit, Constants.AdminRole, true)
}),
PageTemplateModules = new List {
new PageTemplateModule { ModuleDefinitionName = "Oqtane.Modules.Admin.Register, Oqtane.Client", Title = "User Registration", Pane = "Content",
ModulePermissions = _permissionRepository.EncodePermissions( new List {
new Permission(PermissionNames.View, Constants.AdminRole, true),
+ new Permission(PermissionNames.View, Constants.AllUsersRole, true),
new Permission(PermissionNames.Edit, Constants.AdminRole, true)
}), Content = "" }
}
@@ -270,12 +274,14 @@ namespace Oqtane.Repository
_pageTemplates.Add(new PageTemplate { Name = "Reset", Parent = "", Path = "reset", Icon = "person", IsNavigation = false, IsPersonalizable = false, EditMode = false,
PagePermissions = _permissionRepository.EncodePermissions(new List {
new Permission(PermissionNames.View, Constants.AdminRole, true),
+ new Permission(PermissionNames.View, Constants.AllUsersRole, true),
new Permission(PermissionNames.Edit, Constants.AdminRole, true)
}),
PageTemplateModules = new List {
new PageTemplateModule { ModuleDefinitionName = "Oqtane.Modules.Admin.Reset, Oqtane.Client", Title = "Password Reset", Pane = "Content",
ModulePermissions = _permissionRepository.EncodePermissions( new List {
new Permission(PermissionNames.View, Constants.AdminRole, true),
+ new Permission(PermissionNames.View, Constants.AllUsersRole, true),
new Permission(PermissionNames.Edit, Constants.AdminRole, true)
}), Content = "" }
}
@@ -283,12 +289,14 @@ namespace Oqtane.Repository
_pageTemplates.Add(new PageTemplate { Name = "Profile", Parent = "", Path = "profile", Icon = "person", IsNavigation = false, IsPersonalizable = false, EditMode = false,
PagePermissions = _permissionRepository.EncodePermissions(new List {
new Permission(PermissionNames.View, Constants.AdminRole, true),
+ new Permission(PermissionNames.View, Constants.RegisteredRole, true),
new Permission(PermissionNames.Edit, Constants.AdminRole, true)
}),
PageTemplateModules = new List {
new PageTemplateModule { ModuleDefinitionName = "Oqtane.Modules.Admin.UserProfile, Oqtane.Client", Title = "User Profile", Pane = "Content",
ModulePermissions = _permissionRepository.EncodePermissions( new List {
new Permission(PermissionNames.View, Constants.AdminRole, true),
+ new Permission(PermissionNames.View, Constants.RegisteredRole, true),
new Permission(PermissionNames.Edit, Constants.AdminRole, true)
}), Content = "" }
}
diff --git a/Oqtane.Server/Startup.cs b/Oqtane.Server/Startup.cs
index 92e3476f..b961fd06 100644
--- a/Oqtane.Server/Startup.cs
+++ b/Oqtane.Server/Startup.cs
@@ -19,7 +19,9 @@ using Oqtane.Infrastructure.Interfaces;
using Oqtane.Repository;
using Oqtane.Security;
using Oqtane.Services;
-using Oqtane.Shared; // needed for WASM
+// DO NOT REMOVE - needed for client-side Blazor
+using Oqtane.Shared;
+using Microsoft.AspNetCore.ResponseCompression;
namespace Oqtane
{
diff --git a/Oqtane.Shared/Oqtane.Shared.csproj b/Oqtane.Shared/Oqtane.Shared.csproj
index d252b2aa..830bda51 100644
--- a/Oqtane.Shared/Oqtane.Shared.csproj
+++ b/Oqtane.Shared/Oqtane.Shared.csproj
@@ -3,7 +3,7 @@
netstandard2.1
7.3
- Debug;Release;Wasm
+ Debug;Release;WebAssembly
0.0.9
Oqtane
Shaun Walker
@@ -17,7 +17,7 @@
Oqtane
-
+
TRACE;WASM
diff --git a/Oqtane.sln b/Oqtane.sln
index 4c51a92b..3832d333 100644
--- a/Oqtane.sln
+++ b/Oqtane.sln
@@ -11,45 +11,45 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Oqtane.Shared", "Oqtane.Sha
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Oqtane.Upgrade", "Oqtane.Upgrade\Oqtane.Upgrade.csproj", "{2E8C6889-37CF-4C8D-88B1-505547F25098}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Oqtane.Test", "Oqtane.Test\Oqtane.Test.csproj", "{823B556D-8D4E-4BB8-A65A-C4EB5E7E7424}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Oqtane.Test", "Oqtane.Test\Oqtane.Test.csproj", "{823B556D-8D4E-4BB8-A65A-C4EB5E7E7424}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
- Wasm|Any CPU = Wasm|Any CPU
+ WebAssembly|Any CPU = WebAssembly|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{083BB22D-DF24-43A2-95E5-8F385CCB3318}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{083BB22D-DF24-43A2-95E5-8F385CCB3318}.Debug|Any CPU.Build.0 = Debug|Any CPU
{083BB22D-DF24-43A2-95E5-8F385CCB3318}.Release|Any CPU.ActiveCfg = Release|Any CPU
{083BB22D-DF24-43A2-95E5-8F385CCB3318}.Release|Any CPU.Build.0 = Release|Any CPU
- {083BB22D-DF24-43A2-95E5-8F385CCB3318}.Wasm|Any CPU.ActiveCfg = Wasm|Any CPU
- {083BB22D-DF24-43A2-95E5-8F385CCB3318}.Wasm|Any CPU.Build.0 = Wasm|Any CPU
+ {083BB22D-DF24-43A2-95E5-8F385CCB3318}.WebAssembly|Any CPU.ActiveCfg = WebAssembly|Any CPU
+ {083BB22D-DF24-43A2-95E5-8F385CCB3318}.WebAssembly|Any CPU.Build.0 = WebAssembly|Any CPU
{FD15B24A-7F6A-4830-9CA2-9C621771C330}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FD15B24A-7F6A-4830-9CA2-9C621771C330}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FD15B24A-7F6A-4830-9CA2-9C621771C330}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FD15B24A-7F6A-4830-9CA2-9C621771C330}.Release|Any CPU.Build.0 = Release|Any CPU
- {FD15B24A-7F6A-4830-9CA2-9C621771C330}.Wasm|Any CPU.ActiveCfg = Wasm|Any CPU
- {FD15B24A-7F6A-4830-9CA2-9C621771C330}.Wasm|Any CPU.Build.0 = Wasm|Any CPU
+ {FD15B24A-7F6A-4830-9CA2-9C621771C330}.WebAssembly|Any CPU.ActiveCfg = WebAssembly|Any CPU
+ {FD15B24A-7F6A-4830-9CA2-9C621771C330}.WebAssembly|Any CPU.Build.0 = WebAssembly|Any CPU
{19D67A9D-3F2E-41BD-80E6-0B50CA83C3AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{19D67A9D-3F2E-41BD-80E6-0B50CA83C3AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{19D67A9D-3F2E-41BD-80E6-0B50CA83C3AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{19D67A9D-3F2E-41BD-80E6-0B50CA83C3AE}.Release|Any CPU.Build.0 = Release|Any CPU
- {19D67A9D-3F2E-41BD-80E6-0B50CA83C3AE}.Wasm|Any CPU.ActiveCfg = Wasm|Any CPU
- {19D67A9D-3F2E-41BD-80E6-0B50CA83C3AE}.Wasm|Any CPU.Build.0 = Wasm|Any CPU
+ {19D67A9D-3F2E-41BD-80E6-0B50CA83C3AE}.WebAssembly|Any CPU.ActiveCfg = WebAssembly|Any CPU
+ {19D67A9D-3F2E-41BD-80E6-0B50CA83C3AE}.WebAssembly|Any CPU.Build.0 = WebAssembly|Any CPU
{2E8C6889-37CF-4C8D-88B1-505547F25098}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2E8C6889-37CF-4C8D-88B1-505547F25098}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2E8C6889-37CF-4C8D-88B1-505547F25098}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2E8C6889-37CF-4C8D-88B1-505547F25098}.Release|Any CPU.Build.0 = Release|Any CPU
- {2E8C6889-37CF-4C8D-88B1-505547F25098}.Wasm|Any CPU.ActiveCfg = Debug|Any CPU
- {2E8C6889-37CF-4C8D-88B1-505547F25098}.Wasm|Any CPU.Build.0 = Debug|Any CPU
+ {2E8C6889-37CF-4C8D-88B1-505547F25098}.WebAssembly|Any CPU.ActiveCfg = Debug|Any CPU
+ {2E8C6889-37CF-4C8D-88B1-505547F25098}.WebAssembly|Any CPU.Build.0 = Debug|Any CPU
{823B556D-8D4E-4BB8-A65A-C4EB5E7E7424}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{823B556D-8D4E-4BB8-A65A-C4EB5E7E7424}.Debug|Any CPU.Build.0 = Debug|Any CPU
{823B556D-8D4E-4BB8-A65A-C4EB5E7E7424}.Release|Any CPU.ActiveCfg = Release|Any CPU
{823B556D-8D4E-4BB8-A65A-C4EB5E7E7424}.Release|Any CPU.Build.0 = Release|Any CPU
- {823B556D-8D4E-4BB8-A65A-C4EB5E7E7424}.Wasm|Any CPU.ActiveCfg = Debug|Any CPU
- {823B556D-8D4E-4BB8-A65A-C4EB5E7E7424}.Wasm|Any CPU.Build.0 = Debug|Any CPU
+ {823B556D-8D4E-4BB8-A65A-C4EB5E7E7424}.WebAssembly|Any CPU.ActiveCfg = Debug|Any CPU
+ {823B556D-8D4E-4BB8-A65A-C4EB5E7E7424}.WebAssembly|Any CPU.Build.0 = Debug|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE