From dd3523eedd340257b694b8240cb5a6806cb5167f Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Wed, 12 Feb 2020 09:19:05 -0500 Subject: [PATCH 01/14] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index e719bd89..09989025 100644 --- a/README.md +++ b/README.md @@ -55,3 +55,6 @@ Control panel for adding, editing, and deleting pages as well as adding new modu ![Manage Page](https://github.com/oqtane/framework/blob/master/screenshot5.png?raw=true "Manage Page") +Admin dashboard for accessing the variuous administrative features of the framework: + +![Admin Dashboard](https://github.com/oqtane/framework/blob/master/screenshot6.png?raw=true "Admin Dashboard") From fea799657b5b369ec2d6fb316cd3d79b8d2cca42 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Wed, 12 Feb 2020 09:34:30 -0500 Subject: [PATCH 02/14] Update README.md --- README.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/README.md b/README.md index 09989025..69579d51 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,27 @@ Oqtane uses Blazor, a new web framework for .NET Core that lets you build intera # Roadmap This project is a work in progress and the schedule for implementing enhancements is dependent upon the availability of community members who are willing/able to assist. +V1 (MVP) +- Multi-Tenant ( Shared Database & Isolated Database ) +- Modular Architecture / Headless API +- Dynamic Page Compositing Model / Site & Page Management +- Authentication / User Management / Profile Management +- Authorization / Roles Management / Granular Permissions +- Dynamic Routing +- Extensibility via Custom Modules +- Extensibility via Custom Themes +- Event Logging +- Folder / File Management +- Recycle Bin +- Scheduled Jobs ( Background Processing ) +- Notifications / Email Delivery +- Auto-Upgrade Framework + +V.Next +- Localization +- Migrate to Code-Behind Pattern ( *.razor.cs ) +- Generic Repository Pattern + # Background Oqtane was created by [Shaun Walker](https://www.linkedin.com/in/shaunbrucewalker/) and is inspired by the DotNetNuke web application framework. Initially created as a proof of concept, Oqtane is a native Blazor application written from the ground up using modern .NET Core technology. It is a modular application framework offering a fully dynamic page compositing model, multi-site support, designer friendly templates (skins), and extensibility via third party modules. From 77ea4cb129bde9cf21e9c504bbf4fb48c21453f2 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Wed, 12 Feb 2020 09:38:55 -0500 Subject: [PATCH 03/14] Update README.md --- README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 69579d51..c941481d 100644 --- a/README.md +++ b/README.md @@ -19,20 +19,20 @@ Oqtane uses Blazor, a new web framework for .NET Core that lets you build intera This project is a work in progress and the schedule for implementing enhancements is dependent upon the availability of community members who are willing/able to assist. V1 (MVP) -- Multi-Tenant ( Shared Database & Isolated Database ) -- Modular Architecture / Headless API -- Dynamic Page Compositing Model / Site & Page Management -- Authentication / User Management / Profile Management -- Authorization / Roles Management / Granular Permissions -- Dynamic Routing -- Extensibility via Custom Modules -- Extensibility via Custom Themes -- Event Logging -- Folder / File Management -- Recycle Bin -- Scheduled Jobs ( Background Processing ) -- Notifications / Email Delivery -- Auto-Upgrade Framework +- Multi-Tenant ( Shared Database & Isolated Database ) *done* +- Modular Architecture / Headless API *done* +- Dynamic Page Compositing Model / Site & Page Management *done* +- Authentication / User Management / Profile Management *done* +- Authorization / Roles Management / Granular Permissions *done* +- Dynamic Routing *done* +- Extensibility via Custom Modules *done* +- Extensibility via Custom Themes *done* +- Event Logging *done* +- Folder / File Management *done* +- Recycle Bin *done* +- Scheduled Jobs ( Background Processing ) *done* +- Notifications / Email Delivery *done* +- Auto-Upgrade Framework *done* V.Next - Localization From a1a3b607fa137181888d664616dc0d460913132d Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Wed, 12 Feb 2020 09:40:10 -0500 Subject: [PATCH 04/14] Update README.md --- README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index c941481d..5373bf75 100644 --- a/README.md +++ b/README.md @@ -19,20 +19,20 @@ Oqtane uses Blazor, a new web framework for .NET Core that lets you build intera This project is a work in progress and the schedule for implementing enhancements is dependent upon the availability of community members who are willing/able to assist. V1 (MVP) -- Multi-Tenant ( Shared Database & Isolated Database ) *done* -- Modular Architecture / Headless API *done* -- Dynamic Page Compositing Model / Site & Page Management *done* -- Authentication / User Management / Profile Management *done* -- Authorization / Roles Management / Granular Permissions *done* -- Dynamic Routing *done* -- Extensibility via Custom Modules *done* -- Extensibility via Custom Themes *done* -- Event Logging *done* -- Folder / File Management *done* -- Recycle Bin *done* -- Scheduled Jobs ( Background Processing ) *done* -- Notifications / Email Delivery *done* -- Auto-Upgrade Framework *done* +- Multi-Tenant ( Shared Database & Isolated Database ) **done** +- Modular Architecture / Headless API **done** +- Dynamic Page Compositing Model / Site & Page Management **done** +- Authentication / User Management / Profile Management **done** +- Authorization / Roles Management / Granular Permissions **done** +- Dynamic Routing **done** +- Extensibility via Custom Modules **done** +- Extensibility via Custom Themes **done** +- Event Logging **done** +- Folder / File Management **done** +- Recycle Bin **done** +- Scheduled Jobs ( Background Processing ) **done** +- Notifications / Email Delivery **done** +- Auto-Upgrade Framework **done** V.Next - Localization From 115d395dd4a1228c77c95248242a56eaa5b871d8 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Thu, 13 Feb 2020 15:23:53 -0500 Subject: [PATCH 05/14] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5373bf75..8675866c 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ V1 (MVP) - Auto-Upgrade Framework **done** V.Next +- Optional Encryption of Settings Values ( ie. via an IsSecure flag ) - Localization - Migrate to Code-Behind Pattern ( *.razor.cs ) - Generic Repository Pattern From 12a48bb67c80f84f5b8eb58b863d91c4aaa2e092 Mon Sep 17 00:00:00 2001 From: Pavel Vesely Date: Sun, 16 Feb 2020 12:56:35 +0100 Subject: [PATCH 06/14] Missing nullcheck -> crash when 404 --- Oqtane.Client/Shared/SiteRouter.razor | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Oqtane.Client/Shared/SiteRouter.razor b/Oqtane.Client/Shared/SiteRouter.razor index a04c759f..90719d40 100644 --- a/Oqtane.Client/Shared/SiteRouter.razor +++ b/Oqtane.Client/Shared/SiteRouter.razor @@ -196,7 +196,10 @@ { page = pages.Where(item => item.Path == path).FirstOrDefault(); reload = Reload.Page; - editmode = page.EditMode; + if (page!=null) + { + editmode = page.EditMode; + } } user = null; From b9528e3f12762d882d9f932a025e912368207252 Mon Sep 17 00:00:00 2001 From: Emanuele Filardo Date: Sun, 16 Feb 2020 19:24:12 +0100 Subject: [PATCH 07/14] Check if moduledefinitionname has valid value --- Oqtane.Client/Themes/Controls/ControlPanel.razor | 2 +- Oqtane.Server/appsettings.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Oqtane.Client/Themes/Controls/ControlPanel.razor b/Oqtane.Client/Themes/Controls/ControlPanel.razor index e8b526d4..90715df5 100644 --- a/Oqtane.Client/Themes/Controls/ControlPanel.razor +++ b/Oqtane.Client/Themes/Controls/ControlPanel.razor @@ -298,7 +298,7 @@ private async Task AddModule() { - if (UserSecurity.IsAuthorized(PageState.User, "Edit", PageState.Page.Permissions)) + if (UserSecurity.IsAuthorized(PageState.User, "Edit", PageState.Page.Permissions) && !string.IsNullOrWhiteSpace(moduledefinitionname) && moduledefinitionname != "-") { if (moduletype == "new") { diff --git a/Oqtane.Server/appsettings.json b/Oqtane.Server/appsettings.json index dbfefb7f..c45f957d 100644 --- a/Oqtane.Server/appsettings.json +++ b/Oqtane.Server/appsettings.json @@ -1,5 +1,5 @@ { "ConnectionStrings": { - "DefaultConnection": "" + "DefaultConnection": "Data Source=(LocalDb)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\Oqtane-202002161845.mdf;Initial Catalog=Oqtane-202002161845;Integrated Security=SSPI;" } -} \ No newline at end of file +} From 43f928667d17ee18901b3254d2a8d7303d7f639f Mon Sep 17 00:00:00 2001 From: Emanuele Filardo Date: Sun, 16 Feb 2020 19:25:00 +0100 Subject: [PATCH 08/14] Delete appsettings.json --- Oqtane.Server/appsettings.json | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 Oqtane.Server/appsettings.json diff --git a/Oqtane.Server/appsettings.json b/Oqtane.Server/appsettings.json deleted file mode 100644 index c45f957d..00000000 --- a/Oqtane.Server/appsettings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "ConnectionStrings": { - "DefaultConnection": "Data Source=(LocalDb)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\Oqtane-202002161845.mdf;Initial Catalog=Oqtane-202002161845;Integrated Security=SSPI;" - } -} From 44d855e6d4652c61e9a44a1cc05bf39bf1ad4769 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Tue, 18 Feb 2020 17:27:53 -0500 Subject: [PATCH 09/14] Re-create appsettings.json Mistakenly removed by PR #213 --- Oqtane.Server/appsettings.json | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Oqtane.Server/appsettings.json diff --git a/Oqtane.Server/appsettings.json b/Oqtane.Server/appsettings.json new file mode 100644 index 00000000..7f07c90a --- /dev/null +++ b/Oqtane.Server/appsettings.json @@ -0,0 +1,5 @@ +{ + "ConnectionStrings": { + "DefaultConnection": "" + } +} From ece378c54fde41b42e556e886224025f04d40436 Mon Sep 17 00:00:00 2001 From: Hisham Bin Ateya Date: Sat, 15 Feb 2020 09:07:29 +0300 Subject: [PATCH 10/14] Unable to deleted the root site --- Oqtane.Server/Controllers/SiteController.cs | 11 +++++++++-- Oqtane.Server/Repository/SiteRepository.cs | 11 +++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/Oqtane.Server/Controllers/SiteController.cs b/Oqtane.Server/Controllers/SiteController.cs index 23b5c4d7..dc8361ec 100644 --- a/Oqtane.Server/Controllers/SiteController.cs +++ b/Oqtane.Server/Controllers/SiteController.cs @@ -87,8 +87,15 @@ namespace Oqtane.Controllers [Authorize(Roles = Constants.HostRole)] public void Delete(int id) { - Sites.DeleteSite(id); - logger.Log(LogLevel.Information, this, LogFunction.Delete, "Site Deleted {SiteId}", id); + if (Sites.GetSites().Count() > 1) + { + Sites.DeleteSite(id); + logger.Log(LogLevel.Information, this, LogFunction.Delete, "Site Deleted {SiteId}", id); + } + else + { + logger.Log(LogLevel.Warning, this, LogFunction.Delete, "Unable to delete the root site."); + } } } } diff --git a/Oqtane.Server/Repository/SiteRepository.cs b/Oqtane.Server/Repository/SiteRepository.cs index d206c763..6c569863 100644 --- a/Oqtane.Server/Repository/SiteRepository.cs +++ b/Oqtane.Server/Repository/SiteRepository.cs @@ -142,10 +142,13 @@ namespace Oqtane.Repository } public void DeleteSite(int siteId) - { - Site site = db.Site.Find(siteId); - db.Site.Remove(site); - db.SaveChanges(); + { + if (db.Site.Count() > 1) + { + var site = db.Site.Find(siteId); + db.Site.Remove(site); + db.SaveChanges(); + } } private void CreateSite(Site site) From d0e03ecbe2c982beb1a3554dfd2e41c228978fd1 Mon Sep 17 00:00:00 2001 From: Hisham Bin Ateya Date: Sat, 15 Feb 2020 09:32:31 +0300 Subject: [PATCH 11/14] Disable the action button --- Oqtane.Client/Modules/Admin/Sites/Index.razor | 2 +- .../Modules/Controls/ActionDialog.razor | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Oqtane.Client/Modules/Admin/Sites/Index.razor b/Oqtane.Client/Modules/Admin/Sites/Index.razor index 7133f8b5..9b758fdd 100644 --- a/Oqtane.Client/Modules/Admin/Sites/Index.razor +++ b/Oqtane.Client/Modules/Admin/Sites/Index.razor @@ -20,7 +20,7 @@ else - + @context.Name diff --git a/Oqtane.Client/Modules/Controls/ActionDialog.razor b/Oqtane.Client/Modules/Controls/ActionDialog.razor index 3a8a94ce..aaffa1f7 100644 --- a/Oqtane.Client/Modules/Controls/ActionDialog.razor +++ b/Oqtane.Client/Modules/Controls/ActionDialog.razor @@ -28,7 +28,14 @@ } @if (authorized) { - + if (Disabled) + { + + } + else + { + + } } @code { @@ -36,13 +43,13 @@ public string Header { get; set; } // required [Parameter] - public string Message { get; set; } // required + public string Message { get; set; } // required [Parameter] public string Text { get; set; } // optional - defaults to Action if not specified [Parameter] - public string Action { get; set; } // optional + public string Action { get; set; } // optional [Parameter] public SecurityAccessLevel? Security { get; set; } // optional - can be used to explicitly specify SecurityAccessLevel @@ -50,6 +57,9 @@ [Parameter] public string Class { get; set; } // optional + [Parameter] + public bool Disabled { get; set; } // optional + [Parameter] public string EditMode { get; set; } // optional - specifies if a user must be in edit mode to see the action - default is true From 0eef1790c3bc5fc71c12a971da87c7bfc62cfd8e Mon Sep 17 00:00:00 2001 From: Hisham Bin Ateya Date: Thu, 20 Feb 2020 17:16:14 +0300 Subject: [PATCH 12/14] Add Disabled property to ActionLink --- Oqtane.Client/Modules/Controls/ActionLink.razor | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Oqtane.Client/Modules/Controls/ActionLink.razor b/Oqtane.Client/Modules/Controls/ActionLink.razor index d3c3a08b..2ed9c3e7 100644 --- a/Oqtane.Client/Modules/Controls/ActionLink.razor +++ b/Oqtane.Client/Modules/Controls/ActionLink.razor @@ -4,7 +4,14 @@ @if (authorized) { - @text + if (Disabled) + { + @text + } + else + { + @text + } } @code { @@ -26,6 +33,9 @@ [Parameter] public string Style { get; set; } // optional + [Parameter] + public bool Disabled { get; set; } // optional + [Parameter] public string EditMode { get; set; } // optional - specifies if a user must be in edit mode to see the action - default is true From a66ecbdfa2a6d16253c6bb32a7011a0608bfc065 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Thu, 20 Feb 2020 11:13:03 -0500 Subject: [PATCH 13/14] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8675866c..998e1b29 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ V.Next - Localization - Migrate to Code-Behind Pattern ( *.razor.cs ) - Generic Repository Pattern +- JwT token authentication # Background Oqtane was created by [Shaun Walker](https://www.linkedin.com/in/shaunbrucewalker/) and is inspired by the DotNetNuke web application framework. Initially created as a proof of concept, Oqtane is a native Blazor application written from the ground up using modern .NET Core technology. It is a modular application framework offering a fully dynamic page compositing model, multi-site support, designer friendly templates (skins), and extensibility via third party modules. From a826c7d2715bd7189061a68af9e6abe316aacbf0 Mon Sep 17 00:00:00 2001 From: Shaun Walker Date: Sat, 22 Feb 2020 14:41:47 -0500 Subject: [PATCH 14/14] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 998e1b29..f3fa1aa3 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,9 @@ Oqtane uses Blazor, a new web framework for .NET Core that lets you build intera **To get started with Oqtane:** - 1. Oqtane is currently compatible with **[.NET Core 3.1](https://dotnet.microsoft.com/download/dotnet-core/3.1)**. + 1. Install **[.NET Core 3.1 SDK](https://dotnet.microsoft.com/download/dotnet-core/3.1)**. - 2. Install the latest edition of [Visual Studio 2019](https://visualstudio.com/vs/) (version 16.4 or higher) with the **ASP.NET and web development** workload. Installing the latest edition will also install the latest version of .NET Core 3.1. + 2. Install the latest edition of [Visual Studio 2019](https://visualstudio.com/vs/) (version 16.4 or higher) with the **ASP.NET and web development** workload. If you do not have a SQL Server installation available already and you wish to use LocalDB for development, you must also install the **.NET desktop development workload**. 3. Download or Clone the Oqtane source code to your local system. Open the **Oqtane.sln** solution file. If you want to develop using **server-side** Blazor (which includes a full debugging experience in Visual Studio) you should choose to Build the solution using the default Debug configuration. If you want to develop using **client-side** Blazor (WebAssembly) you should first choose the "Wasm" configuration option in the Visual Studio toolbar and then Build.