diff --git a/.gitignore b/.gitignore
index 251d9eeb..33c751ad 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,7 +6,9 @@ artifacts/
msbuild.binlog
.vscode/
*.binlog
+*.nupkg
Oqtane.Server/appsettings.json
Oqtane.Server/Data/*.mdf
-Oqtane.Server/Data/*.ldf
\ No newline at end of file
+Oqtane.Server/Data/*.ldf
+
diff --git a/Oqtane.Client/App.razor b/Oqtane.Client/App.razor
index 6ad2be28..9e2793d7 100644
--- a/Oqtane.Client/App.razor
+++ b/Oqtane.Client/App.razor
@@ -1,29 +1,33 @@
@using Oqtane.Shared
-@using Oqtane.Client.Shared
@using Oqtane.Services
@inject IInstallationService InstallationService
-@if (!Installed)
+@if (Initialized)
{
-
-}
-else
-{
-
-
-
-
-
+ @if (!Installed)
+ {
+
+ }
+ else
+ {
+
+
+
+
+
+ }
}
@code {
+ private bool Initialized = false;
private bool Installed = false;
private PageState PageState { get; set; }
- protected override async Task OnInitAsync()
+ protected override async Task OnParametersSetAsync()
{
var response = await InstallationService.IsInstalled();
Installed = response.Success;
+ Initialized = true;
}
private void ChangeState(PageState pagestate)
diff --git a/Oqtane.Client/Modules/Admin/Admin/Index.razor b/Oqtane.Client/Modules/Admin/Dashboard/Index.razor
similarity index 78%
rename from Oqtane.Client/Modules/Admin/Admin/Index.razor
rename to Oqtane.Client/Modules/Admin/Dashboard/Index.razor
index 3c38f89a..0e2d7fa9 100644
--- a/Oqtane.Client/Modules/Admin/Admin/Index.razor
+++ b/Oqtane.Client/Modules/Admin/Dashboard/Index.razor
@@ -2,7 +2,8 @@
@using Oqtane.Modules
@using Oqtane.Services
@using Oqtane.Models;
-@using Oqtane.Client.Modules.Controls
+@using Oqtane.Security
+@namespace Oqtane.Modules.Admin.Dashboard
@inherits ModuleBase
@inject IPageService PageService
@inject IUserService UserService
@@ -10,7 +11,7 @@
@foreach (var p in pages)
{
- if (p.IsNavigation && UserService.IsAuthorized(PageState.User, p.ViewPermissions))
+ if (p.IsNavigation && UserSecurity.IsAuthorized(PageState.User, "View", p.Permissions))
{
string url = NavigateUrl(p.Path);
-
@@ -21,12 +22,13 @@
}
}
-
+
+
@code {
List pages;
- protected override void OnInit()
+ protected override void OnInitialized()
{
// display list of pages which are children of current page
pages = PageState.Pages.Where(item => item.ParentId == PageState.Page.PageId).ToList();
diff --git a/Oqtane.Client/Modules/Admin/Login/Index.razor b/Oqtane.Client/Modules/Admin/Login/Index.razor
index c381e244..2f24c684 100644
--- a/Oqtane.Client/Modules/Admin/Login/Index.razor
+++ b/Oqtane.Client/Modules/Admin/Login/Index.razor
@@ -5,6 +5,7 @@
@using Oqtane.Services
@using Oqtane.Providers
@using Oqtane.Shared
+@namespace Oqtane.Modules.Admin.Login
@inherits ModuleBase
@inject IUriHelper UriHelper
@inject IJSRuntime jsRuntime
@@ -42,21 +43,14 @@
@code {
-public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Anonymous; } }
+ public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Anonymous; } }
-public string Message { get; set; } = "";
-public string Username { get; set; } = "";
-public string Password { get; set; } = "";
-public bool Remember { get; set; } = false;
+ public string Message { get; set; } = "";
+ public string Username { get; set; } = "";
+ public string Password { get; set; } = "";
+ public bool Remember { get; set; } = false;
-private async Task Login()
-{
- User user = new User();
- user.Username = Username;
- user.Password = Password;
- user.IsPersistent = Remember;
- user = await UserService.LoginUserAsync(user);
- if (user.IsAuthenticated)
+ private async Task Login()
{
string ReturnUrl = PageState.QueryString["returnurl"];
@@ -64,27 +58,48 @@ private async Task Login()
if (authstateprovider == null)
{
// server-side Blazor
- var interop = new Interop(jsRuntime);
- string antiforgerytoken = await interop.GetElementByName("__RequestVerificationToken");
- var fields = new { __RequestVerificationToken = antiforgerytoken, username = Username, password = Password, remember = Remember, returnurl = ReturnUrl };
- await interop.SubmitForm("/login/", fields);
+ User user = new User();
+ user.SiteId = PageState.Site.SiteId;
+ user.Username = Username;
+ user.Password = Password;
+ user = await UserService.LoginUserAsync(user, false, false);
+ if (user.IsAuthenticated)
+ {
+ // complete the login on the server so that the cookies are set correctly on SignalR
+ var interop = new Interop(jsRuntime);
+ string antiforgerytoken = await interop.GetElementByName("__RequestVerificationToken");
+ var fields = new { __RequestVerificationToken = antiforgerytoken, username = Username, password = Password, remember = Remember, returnurl = ReturnUrl };
+ await interop.SubmitForm("/login/", fields);
+ }
+ else
+ {
+ Message = "Login Failed. Please Remember That Passwords Are Case Sensitive.
";
+ }
}
else
{
// client-side Blazor
- authstateprovider.NotifyAuthenticationChanged();
- UriHelper.NavigateTo(NavigateUrl(ReturnUrl, true));
+ User user = new User();
+ user.SiteId = PageState.Site.SiteId;
+ user.Username = Username;
+ user.Password = Password;
+ user = await UserService.LoginUserAsync(user, true, Remember);
+ if (user.IsAuthenticated)
+ {
+ authstateprovider.NotifyAuthenticationChanged();
+ PageState.Reload = Constants.ReloadSite;
+ UriHelper.NavigateTo(NavigateUrl(ReturnUrl));
+ }
+ else
+ {
+ Message = "Login Failed. Please Remember That Passwords Are Case Sensitive.
";
+ }
}
}
- else
+
+ private void Cancel()
{
- Message = "Login Failed. Please Remember That Passwords Are Case Sensitive.
";
+ string ReturnUrl = PageState.QueryString["returnurl"];
+ UriHelper.NavigateTo(ReturnUrl);
}
}
-
-private void Cancel()
-{
- string ReturnUrl = PageState.QueryString["returnurl"];
- UriHelper.NavigateTo(NavigateUrl(ReturnUrl));
-}
-}
diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor
new file mode 100644
index 00000000..49980307
--- /dev/null
+++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor
@@ -0,0 +1,50 @@
+@using Microsoft.AspNetCore.Components.Routing
+@using Oqtane.Modules.Controls
+@using Oqtane.Modules
+@using Oqtane.Services
+@using Oqtane.Shared
+@namespace Oqtane.Modules.Admin.ModuleDefinitions
+@inherits ModuleBase
+@inject IUriHelper UriHelper
+@inject IFileService FileService
+@inject IModuleDefinitionService ModuleDefinitionService
+
+
+
+
+
+ |
+
+
+ |
+
+
+@if (uploaded)
+{
+
+}
+else
+{
+
+}
+Cancel
+
+@code {
+ public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Host; } }
+
+ bool uploaded = false;
+
+ private async Task UploadFile()
+ {
+ await FileService.UploadFilesAsync("Modules");
+ uploaded = true;
+ StateHasChanged();
+ }
+
+ private async Task InstallFile()
+ {
+ await ModuleDefinitionService.InstallModulesAsync();
+ PageState.Reload = Constants.ReloadApplication;
+ UriHelper.NavigateTo(NavigateUrl());
+ }
+}
diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor
index 55b017d4..53ad0d55 100644
--- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor
+++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor
@@ -1,9 +1,9 @@
@using Oqtane.Services
@using Oqtane.Models
@using Oqtane.Modules
-@using Oqtane.Client.Modules.Controls
+@using Oqtane.Modules.Controls
+@namespace Oqtane.Modules.Admin.ModuleDefinitions
@inherits ModuleBase
-
@inject IModuleDefinitionService ModuleDefinitionService
@if (moduledefinitions == null)
@@ -12,7 +12,8 @@
}
else
{
-
+
+
Name |
@@ -30,11 +31,11 @@ else
}
@code {
- public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Host; } }
+ public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Host; } }
List moduledefinitions;
- protected override async Task OnInitAsync()
+ protected override async Task OnInitializedAsync()
{
moduledefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync();
}
diff --git a/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor b/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor
index 68d4d13c..b57abb63 100644
--- a/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor
+++ b/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor
@@ -3,107 +3,125 @@
@using Oqtane.Models
@using Oqtane.Modules
@using Oqtane.Shared
-@using Oqtane.Client.Modules.Controls
+@using Oqtane.Security
+@using Oqtane.Modules.Controls
+@namespace Oqtane.Modules.Admin.ModuleSettings
@inherits ModuleBase
@inject IUriHelper UriHelper
@inject IThemeService ThemeService
@inject IModuleService ModuleService
@inject IPageModuleService PageModuleService
-