diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..b9a82bce --- /dev/null +++ b/.editorconfig @@ -0,0 +1,53 @@ +root = true + +[*] +end_of_line = crlf +charset = utf-8 +indent_style = space +indent_size = 4 + +[*.{json,csproj,props,targets}] +indent_size = 2 + +[*.cs] +# Prefer "var" everywhere +csharp_style_var_for_built_in_types = true : suggestion +csharp_style_var_when_type_is_apparent = true : suggestion +csharp_style_var_elsewhere = true : suggestion + +# Newline settings +csharp_new_line_before_open_brace = all +csharp_new_line_before_else = true +csharp_new_line_before_catch = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_members_in_anonymous_types = true + +# Sort using and Import directives with System.* appearing first +dotnet_sort_system_directives_first = true + +# Avoid "this." if not necessary +dotnet_style_qualification_for_field = false : suggestion +dotnet_style_qualification_for_property = false : suggestion +dotnet_style_qualification_for_method = false : suggestion +dotnet_style_qualification_for_event = false : suggestion + +# Use language keywords instead of framework type names for type references +dotnet_style_predefined_type_for_locals_parameters_members = true : suggestion +dotnet_style_predefined_type_for_member_access = false : suggestion + +# Suggest more modern language features when available +csharp_style_pattern_matching_over_is_with_cast_check = true : none +csharp_style_pattern_matching_over_as_with_null_check = true : none +csharp_style_inlined_variable_declaration = true : none +csharp_style_throw_expression = true : none +csharp_style_conditional_delegate_call = true : none + +dotnet_style_object_initializer = true : suggestion +dotnet_style_collection_initializer = true : suggestion +dotnet_style_coalesce_expression = true : suggestion +dotnet_style_null_propagation = true : suggestion +dotnet_style_explicit_tuple_names = true : suggestion + +trim_trailing_whitespace = true +insert_final_newline = true \ No newline at end of file diff --git a/Oqtane.Client/Modules/Admin/Error/Index.razor b/Oqtane.Client/Modules/Admin/Error/Index.razor index 9e0df574..7ddb0ce3 100644 --- a/Oqtane.Client/Modules/Admin/Error/Index.razor +++ b/Oqtane.Client/Modules/Admin/Error/Index.razor @@ -8,7 +8,7 @@ protected override async Task OnInitializedAsync() { Module module = await ModuleService.GetModuleAsync(ModuleState.ModuleId); - if (UserSecurity.IsAuthorized(PageState.User, Constants.HostRole)) + if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) { string message = "A Problem Was Encountered Loading Module " + module.ModuleDefinitionName; AddModuleMessage(message, MessageType.Error); diff --git a/Oqtane.Client/Modules/Admin/Roles/Users.razor b/Oqtane.Client/Modules/Admin/Roles/Users.razor index c292d3d5..a583aedc 100644 --- a/Oqtane.Client/Modules/Admin/Roles/Users.razor +++ b/Oqtane.Client/Modules/Admin/Roles/Users.razor @@ -88,7 +88,7 @@ else Role role = await RoleService.GetRoleAsync(roleid); name = role.Name; users = await UserRoleService.GetUserRolesAsync(PageState.Site.SiteId); - users = users.Where(item => item.Role.Name == Constants.RegisteredRole).ToList(); + users = users.Where(item => item.Role.Name == RoleNames.Registered).ToList(); await GetUserRoles(); } catch (Exception ex) diff --git a/Oqtane.Client/Modules/Admin/Sites/Add.razor b/Oqtane.Client/Modules/Admin/Sites/Add.razor index 042e168b..7ee36435 100644 --- a/Oqtane.Client/Modules/Admin/Sites/Add.razor +++ b/Oqtane.Client/Modules/Admin/Sites/Add.razor @@ -216,7 +216,7 @@ else private string _username = string.Empty; private string _password = string.Empty; private bool _integratedsecurity = true; - private string _hostusername = Constants.HostUser; + private string _hostusername = UserNames.Host; private string _hostpassword = string.Empty; private string _name = string.Empty; @@ -311,7 +311,7 @@ else // validate host credentials var user = new User(); user.SiteId = PageState.Site.SiteId; - user.Username = Constants.HostUser; + user.Username = UserNames.Host; user.Password = _hostpassword; user = await UserService.LoginUserAsync(user, false, false); if (user.IsAuthenticated) diff --git a/Oqtane.Client/Modules/Admin/Tenants/Edit.razor b/Oqtane.Client/Modules/Admin/Tenants/Edit.razor index 94ee91d6..245ce1cb 100644 --- a/Oqtane.Client/Modules/Admin/Tenants/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Tenants/Edit.razor @@ -9,7 +9,7 @@ - @if (name == Constants.MasterTenant) + @if (name == TenantNames.Master) { } diff --git a/Oqtane.Client/Modules/Admin/Tenants/Index.razor b/Oqtane.Client/Modules/Admin/Tenants/Index.razor index 1ce7c686..5858a059 100644 --- a/Oqtane.Client/Modules/Admin/Tenants/Index.razor +++ b/Oqtane.Client/Modules/Admin/Tenants/Index.razor @@ -17,7 +17,7 @@ else - + @context.Name diff --git a/Oqtane.Client/Modules/Admin/UserProfile/Index.razor b/Oqtane.Client/Modules/Admin/UserProfile/Index.razor index 9c718ef1..30e6b075 100644 --- a/Oqtane.Client/Modules/Admin/UserProfile/Index.razor +++ b/Oqtane.Client/Modules/Admin/UserProfile/Index.razor @@ -79,7 +79,7 @@ else @foreach (Profile profile in profiles) { var p = profile; - if (!p.IsPrivate || UserSecurity.IsAuthorized(PageState.User, Constants.AdminRole)) + if (!p.IsPrivate || UserSecurity.IsAuthorized(PageState.User, RoleNames.Admin)) { if (p.Category != category) { @@ -299,7 +299,7 @@ else { settings = SettingService.SetSetting(settings, profile.Name, profile.DefaultValue); } - if (!profile.IsPrivate || UserSecurity.IsAuthorized(PageState.User, Constants.AdminRole)) + if (!profile.IsPrivate || UserSecurity.IsAuthorized(PageState.User, RoleNames.Admin)) { if (profile.IsRequired && string.IsNullOrEmpty(SettingService.GetSetting(settings, profile.Name, string.Empty))) { diff --git a/Oqtane.Client/Modules/Admin/Users/Index.razor b/Oqtane.Client/Modules/Admin/Users/Index.razor index 682e2d3b..efcd89a2 100644 --- a/Oqtane.Client/Modules/Admin/Users/Index.razor +++ b/Oqtane.Client/Modules/Admin/Users/Index.razor @@ -58,10 +58,10 @@ else { if (string.IsNullOrEmpty(_search)) { - return allroles.Where(item => item.Role.Name == Constants.RegisteredRole).ToList(); + return allroles.Where(item => item.Role.Name == RoleNames.Registered).ToList(); } return allroles - .Where(item => item.Role.Name == Constants.RegisteredRole && + .Where(item => item.Role.Name == RoleNames.Registered && ( item.User.Username.Contains(search, StringComparison.OrdinalIgnoreCase) || item.User.Email.Contains(search, StringComparison.OrdinalIgnoreCase) || diff --git a/Oqtane.Client/Modules/Admin/Users/Roles.razor b/Oqtane.Client/Modules/Admin/Users/Roles.razor index a4e946df..9a056a43 100644 --- a/Oqtane.Client/Modules/Admin/Users/Roles.razor +++ b/Oqtane.Client/Modules/Admin/Users/Roles.razor @@ -63,7 +63,7 @@ else @context.Role.Name - @if (context.Role.Name != Constants.RegisteredRole) + @if (context.Role.Name != RoleNames.Registered) { } diff --git a/Oqtane.Client/Modules/Controls/ActionDialog.razor b/Oqtane.Client/Modules/Controls/ActionDialog.razor index fc22605c..94254ab9 100644 --- a/Oqtane.Client/Modules/Controls/ActionDialog.razor +++ b/Oqtane.Client/Modules/Controls/ActionDialog.razor @@ -134,10 +134,10 @@ authorized = UserSecurity.IsAuthorized(PageState.User,PermissionNames.Edit, ModuleState.Permissions); break; case SecurityAccessLevel.Admin: - authorized = UserSecurity.IsAuthorized(PageState.User, Constants.AdminRole); + authorized = UserSecurity.IsAuthorized(PageState.User, RoleNames.Admin); break; case SecurityAccessLevel.Host: - authorized = UserSecurity.IsAuthorized(PageState.User, Constants.HostRole); + authorized = UserSecurity.IsAuthorized(PageState.User, RoleNames.Host); break; } } diff --git a/Oqtane.Client/Modules/Controls/ActionLink.razor b/Oqtane.Client/Modules/Controls/ActionLink.razor index 7de2331a..a4bcba0f 100644 --- a/Oqtane.Client/Modules/Controls/ActionLink.razor +++ b/Oqtane.Client/Modules/Controls/ActionLink.razor @@ -135,10 +135,10 @@ authorized = UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, ModuleState.Permissions); break; case SecurityAccessLevel.Admin: - authorized = UserSecurity.IsAuthorized(PageState.User, Constants.AdminRole); + authorized = UserSecurity.IsAuthorized(PageState.User, RoleNames.Admin); break; case SecurityAccessLevel.Host: - authorized = UserSecurity.IsAuthorized(PageState.User, Constants.HostRole); + authorized = UserSecurity.IsAuthorized(PageState.User, RoleNames.Host); break; } } diff --git a/Oqtane.Client/Modules/Controls/FileManager.razor b/Oqtane.Client/Modules/Controls/FileManager.razor index 7872aba0..291b2acb 100644 --- a/Oqtane.Client/Modules/Controls/FileManager.razor +++ b/Oqtane.Client/Modules/Controls/FileManager.razor @@ -173,7 +173,7 @@ _haseditpermission = false; if (!string.IsNullOrEmpty(Folder)) { - _haseditpermission = UserSecurity.IsAuthorized(PageState.User, Constants.HostRole); + _haseditpermission = UserSecurity.IsAuthorized(PageState.User, RoleNames.Host); _files = await FileService.GetFilesAsync(Folder); } else diff --git a/Oqtane.Client/Modules/Controls/Label.razor b/Oqtane.Client/Modules/Controls/Label.razor index 751b222a..0d32a14b 100644 --- a/Oqtane.Client/Modules/Controls/Label.razor +++ b/Oqtane.Client/Modules/Controls/Label.razor @@ -1,5 +1,6 @@ @namespace Oqtane.Modules.Controls @inherits ModuleControlBase +@using Microsoft.Extensions.Localization @if (!string.IsNullOrEmpty(HelpText)) { @@ -26,6 +27,9 @@ else [Parameter] public string HelpText { get; set; } // optional - tooltip for this label + [Parameter] + public string ResourceKey { get; set; } + protected override void OnParametersSet() { _openLabel = "@localizer[$"{ResourceKey}.Text"]; + HelpText = localizer[$"{ResourceKey}.{nameof(HelpText)}"]; + } + } + } } } diff --git a/Oqtane.Client/Modules/Controls/ModuleMessage.razor b/Oqtane.Client/Modules/Controls/ModuleMessage.razor index 171a8926..680f45c0 100644 --- a/Oqtane.Client/Modules/Controls/ModuleMessage.razor +++ b/Oqtane.Client/Modules/Controls/ModuleMessage.razor @@ -6,7 +6,7 @@ {
- @if (UserSecurity.IsAuthorized(PageState.User, Constants.AdminRole)) + @if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Admin)) {
@@ -51,7 +51,7 @@

- @if (UserSecurity.GetPermissionStrings(PageState.Page.Permissions).FirstOrDefault(item => item.PermissionName == PermissionNames.View).Permissions.Split(';').Contains(Constants.AllUsersRole)) + @if (UserSecurity.GetPermissionStrings(PageState.Page.Permissions).FirstOrDefault(item => item.PermissionName == PermissionNames.View).Permissions.Split(';').Contains(RoleNames.Everyone)) {
@@ -510,8 +510,8 @@ if (permissionstring.PermissionName == PermissionNames.View) { List ids = permissionstring.Permissions.Split(';').ToList(); - if (!ids.Contains(Constants.AllUsersRole)) ids.Add(Constants.AllUsersRole); - if (!ids.Contains(Constants.RegisteredRole)) ids.Add(Constants.RegisteredRole); + if (!ids.Contains(RoleNames.Everyone)) ids.Add(RoleNames.Everyone); + if (!ids.Contains(RoleNames.Registered)) ids.Add(RoleNames.Registered); permissionstring.Permissions = string.Join(";", ids.ToArray()); } } @@ -531,12 +531,12 @@ switch (action) { case "publish": - if (!ids.Contains(Constants.AllUsersRole)) ids.Add(Constants.AllUsersRole); - if (!ids.Contains(Constants.RegisteredRole)) ids.Add(Constants.RegisteredRole); + if (!ids.Contains(RoleNames.Everyone)) ids.Add(RoleNames.Everyone); + if (!ids.Contains(RoleNames.Registered)) ids.Add(RoleNames.Registered); break; case "unpublish": - ids.Remove(Constants.AllUsersRole); - ids.Remove(Constants.RegisteredRole); + ids.Remove(RoleNames.Everyone); + ids.Remove(RoleNames.Registered); break; } permissionstring.Permissions = string.Join(";", ids.ToArray()); diff --git a/Oqtane.Client/Themes/Controls/ModuleActionsBase.cs b/Oqtane.Client/Themes/Controls/ModuleActionsBase.cs index a6a3f2ba..b0e95901 100644 --- a/Oqtane.Client/Themes/Controls/ModuleActionsBase.cs +++ b/Oqtane.Client/Themes/Controls/ModuleActionsBase.cs @@ -33,7 +33,7 @@ namespace Oqtane.Themes.Controls { actionList.Add(new ActionViewModel {Icon = Icons.Cog, Name = "Manage Settings", Action = async (u, m) => await Settings(u, m)}); - if (UserSecurity.GetPermissionStrings(ModuleState.Permissions).FirstOrDefault(item => item.PermissionName == PermissionNames.View).Permissions.Split(';').Contains(Constants.AllUsersRole)) + if (UserSecurity.GetPermissionStrings(ModuleState.Permissions).FirstOrDefault(item => item.PermissionName == PermissionNames.View).Permissions.Split(';').Contains(RoleNames.Everyone)) { actionList.Add(new ActionViewModel {Icon=Icons.CircleX, Name = "Unpublish Module", Action = async (s, m) => await Unpublish(s, m) }); } @@ -141,8 +141,8 @@ namespace Oqtane.Themes.Controls if (permissionstring.PermissionName == PermissionNames.View) { List ids = permissionstring.Permissions.Split(';').ToList(); - if (!ids.Contains(Constants.AllUsersRole)) ids.Add(Constants.AllUsersRole); - if (!ids.Contains(Constants.RegisteredRole)) ids.Add(Constants.RegisteredRole); + if (!ids.Contains(RoleNames.Everyone)) ids.Add(RoleNames.Everyone); + if (!ids.Contains(RoleNames.Registered)) ids.Add(RoleNames.Registered); permissionstring.Permissions = string.Join(";", ids.ToArray()); } } @@ -159,8 +159,8 @@ namespace Oqtane.Themes.Controls if (permissionstring.PermissionName == PermissionNames.View) { List ids = permissionstring.Permissions.Split(';').ToList(); - ids.Remove(Constants.AllUsersRole); - ids.Remove(Constants.RegisteredRole); + ids.Remove(RoleNames.Everyone); + ids.Remove(RoleNames.Registered); permissionstring.Permissions = string.Join(";", ids.ToArray()); } } diff --git a/Oqtane.Client/UI/Installer.razor b/Oqtane.Client/UI/Installer.razor index 8b915b5f..6ee0bba4 100644 --- a/Oqtane.Client/UI/Installer.razor +++ b/Oqtane.Client/UI/Installer.razor @@ -131,7 +131,7 @@ private string _databaseName = "Oqtane-" + DateTime.UtcNow.ToString("yyyyMMddHHmm"); private string _username = string.Empty; private string _password = string.Empty; - private string _hostUsername = Constants.HostUser; + private string _hostUsername = UserNames.Host; private string _hostPassword = string.Empty; private string _confirmPassword = string.Empty; private string _hostEmail = string.Empty; @@ -188,8 +188,8 @@ Aliases = uri.Authority, HostEmail = _hostEmail, HostPassword = _hostPassword, - HostName = Constants.HostUser, - TenantName = Constants.MasterTenant, + HostName = UserNames.Host, + TenantName = TenantNames.Master, IsNewTenant = true, SiteName = Constants.DefaultSite }; diff --git a/Oqtane.Client/UI/Pane.razor b/Oqtane.Client/UI/Pane.razor index 0c2c0f69..32abb374 100644 --- a/Oqtane.Client/UI/Pane.razor +++ b/Oqtane.Client/UI/Pane.razor @@ -31,7 +31,7 @@ else protected override void OnParametersSet() { - if (PageState.EditMode && UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.Permissions) && Name != Constants.AdminPane) + if (PageState.EditMode && UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, PageState.Page.Permissions) && Name != PaneNames.Admin) { _useadminborder = true; _paneadminborder = "app-pane-admin-border"; @@ -47,7 +47,7 @@ else { if (PageState.ModuleId != -1 && PageState.Action != Constants.DefaultAction) { - if (Name.ToLower() == Constants.AdminPane.ToLower()) + if (Name.ToLower() == PaneNames.Admin.ToLower()) { Module module = PageState.Modules.FirstOrDefault(item => item.ModuleId == PageState.ModuleId); if (module != null && !module.IsDeleted) @@ -81,10 +81,10 @@ else authorized = UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, module.Permissions); break; case SecurityAccessLevel.Admin: - authorized = UserSecurity.IsAuthorized(PageState.User, Constants.AdminRole); + authorized = UserSecurity.IsAuthorized(PageState.User, RoleNames.Admin); break; case SecurityAccessLevel.Host: - authorized = UserSecurity.IsAuthorized(PageState.User, Constants.HostRole); + authorized = UserSecurity.IsAuthorized(PageState.User, RoleNames.Host); break; } } diff --git a/Oqtane.Client/UI/SiteRouter.razor b/Oqtane.Client/UI/SiteRouter.razor index b79ea29d..ae34d6f8 100644 --- a/Oqtane.Client/UI/SiteRouter.razor +++ b/Oqtane.Client/UI/SiteRouter.razor @@ -505,7 +505,7 @@ // ensure module's pane exists in current page and if not, assign it to the Admin pane if (page.Panes == null || page.Panes.FindIndex(item => item.Equals(module.Pane, StringComparison.OrdinalIgnoreCase)) == -1) { - module.Pane = Constants.AdminPane; + module.Pane = PaneNames.Admin; } // calculate module position within pane diff --git a/Oqtane.Server/Controllers/AliasController.cs b/Oqtane.Server/Controllers/AliasController.cs index c4422587..188160a0 100644 --- a/Oqtane.Server/Controllers/AliasController.cs +++ b/Oqtane.Server/Controllers/AliasController.cs @@ -14,7 +14,7 @@ using Microsoft.AspNetCore.Http; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class AliasController : Controller { private readonly IAliasRepository _aliases; @@ -32,7 +32,7 @@ namespace Oqtane.Controllers // GET: api/ [HttpGet] - [Authorize(Roles = Constants.AdminRole)] + [Authorize(Roles = RoleNames.Admin)] public IEnumerable Get() { return _aliases.GetAliases(); @@ -40,7 +40,7 @@ namespace Oqtane.Controllers // GET api//5 [HttpGet("{id}")] - [Authorize(Roles = Constants.AdminRole)] + [Authorize(Roles = RoleNames.Admin)] public Alias Get(int id) { return _aliases.GetAlias(id); @@ -86,7 +86,7 @@ namespace Oqtane.Controllers // POST api/ [HttpPost] - [Authorize(Roles = Constants.AdminRole)] + [Authorize(Roles = RoleNames.Admin)] public Alias Post([FromBody] Alias alias) { if (ModelState.IsValid) @@ -99,7 +99,7 @@ namespace Oqtane.Controllers // PUT api//5 [HttpPut("{id}")] - [Authorize(Roles = Constants.AdminRole)] + [Authorize(Roles = RoleNames.Admin)] public Alias Put(int id, [FromBody] Alias alias) { if (ModelState.IsValid) @@ -112,7 +112,7 @@ namespace Oqtane.Controllers // DELETE api//5 [HttpDelete("{id}")] - [Authorize(Roles = Constants.AdminRole)] + [Authorize(Roles = RoleNames.Admin)] public void Delete(int id) { _aliases.DeleteAlias(id); diff --git a/Oqtane.Server/Controllers/FileController.cs b/Oqtane.Server/Controllers/FileController.cs index 19281dff..fb43a7cb 100644 --- a/Oqtane.Server/Controllers/FileController.cs +++ b/Oqtane.Server/Controllers/FileController.cs @@ -22,7 +22,7 @@ using Microsoft.AspNetCore.Routing.Constraints; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class FileController : Controller { private readonly IWebHostEnvironment _environment; @@ -58,7 +58,7 @@ namespace Oqtane.Controllers } else { - if (User.IsInRole(Constants.HostRole)) + if (User.IsInRole(RoleNames.Host)) { folder = GetFolderPath(folder); if (Directory.Exists(folder)) @@ -132,7 +132,7 @@ namespace Oqtane.Controllers // PUT api//5 [HttpPut("{id}")] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public Models.File Put(int id, [FromBody] Models.File file) { if (ModelState.IsValid && _userPermissions.IsAuthorized(User, EntityNames.Folder, file.FolderId, PermissionNames.Edit)) @@ -164,7 +164,7 @@ namespace Oqtane.Controllers // DELETE api//5 [HttpDelete("{id}")] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public void Delete(int id) { Models.File file = _files.GetFile(id); @@ -282,7 +282,7 @@ namespace Oqtane.Controllers } else { - if (User.IsInRole(Constants.HostRole)) + if (User.IsInRole(RoleNames.Host)) { folderPath = GetFolderPath(folder); } diff --git a/Oqtane.Server/Controllers/FolderController.cs b/Oqtane.Server/Controllers/FolderController.cs index 52a0c9fb..aad20a77 100644 --- a/Oqtane.Server/Controllers/FolderController.cs +++ b/Oqtane.Server/Controllers/FolderController.cs @@ -15,7 +15,7 @@ using Microsoft.AspNetCore.Hosting; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class FolderController : Controller { private readonly IWebHostEnvironment _environment; @@ -93,7 +93,7 @@ namespace Oqtane.Controllers // POST api/ [HttpPost] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public Folder Post([FromBody] Folder folder) { if (ModelState.IsValid) @@ -106,7 +106,7 @@ namespace Oqtane.Controllers else { permissions = new List { - new Permission(PermissionNames.Edit, Constants.AdminRole, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true), }.EncodePermissions(); } if (_userPermissions.IsAuthorized(User, PermissionNames.Edit, permissions)) @@ -141,7 +141,7 @@ namespace Oqtane.Controllers // PUT api//5 [HttpPut("{id}")] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public Folder Put(int id, [FromBody] Folder folder) { if (ModelState.IsValid && _userPermissions.IsAuthorized(User, EntityNames.Folder, folder.FolderId, PermissionNames.Edit)) @@ -182,7 +182,7 @@ namespace Oqtane.Controllers // PUT api//?siteid=x&folderid=y&parentid=z [HttpPut] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public void Put(int siteid, int folderid, int? parentid) { if (_userPermissions.IsAuthorized(User, EntityNames.Folder, folderid, PermissionNames.Edit)) @@ -209,7 +209,7 @@ namespace Oqtane.Controllers // DELETE api//5 [HttpDelete("{id}")] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public void Delete(int id) { if (_userPermissions.IsAuthorized(User, EntityNames.Folder, id, PermissionNames.Edit)) diff --git a/Oqtane.Server/Controllers/InstallationController.cs b/Oqtane.Server/Controllers/InstallationController.cs index 29583e8a..73998b13 100644 --- a/Oqtane.Server/Controllers/InstallationController.cs +++ b/Oqtane.Server/Controllers/InstallationController.cs @@ -14,7 +14,7 @@ using Oqtane.Themes; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class InstallationController : Controller { private readonly IConfigurationRoot _config; @@ -36,7 +36,7 @@ namespace Oqtane.Controllers { var installation = new Installation {Success = false, Message = ""}; - if (ModelState.IsValid && (User.IsInRole(Constants.HostRole) || string.IsNullOrEmpty(_config.GetConnectionString(SettingKeys.ConnectionStringKey)))) + if (ModelState.IsValid && (User.IsInRole(RoleNames.Host) || string.IsNullOrEmpty(_config.GetConnectionString(SettingKeys.ConnectionStringKey)))) { installation = _databaseManager.Install(config); } @@ -57,7 +57,7 @@ namespace Oqtane.Controllers } [HttpGet("upgrade")] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public Installation Upgrade() { var installation = new Installation {Success = true, Message = ""}; @@ -149,7 +149,7 @@ namespace Oqtane.Controllers } zipfile = memoryStream.ToArray(); } - return File(zipfile, "application/octet-stream", "oqtane.zip"); + return File(zipfile, System.Net.Mime.MediaTypeNames.Application.Octet, "oqtane.zip"); } else { diff --git a/Oqtane.Server/Controllers/JobController.cs b/Oqtane.Server/Controllers/JobController.cs index 8e1993aa..03cf4e3b 100644 --- a/Oqtane.Server/Controllers/JobController.cs +++ b/Oqtane.Server/Controllers/JobController.cs @@ -12,7 +12,7 @@ using Oqtane.Repository; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class JobController : Controller { private readonly IJobRepository _jobs; @@ -28,7 +28,7 @@ namespace Oqtane.Controllers // GET: api/ [HttpGet] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public IEnumerable Get() { return _jobs.GetJobs(); @@ -36,7 +36,7 @@ namespace Oqtane.Controllers // GET api//5 [HttpGet("{id}")] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public Job Get(int id) { return _jobs.GetJob(id); @@ -44,7 +44,7 @@ namespace Oqtane.Controllers // POST api/ [HttpPost] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public Job Post([FromBody] Job job) { if (ModelState.IsValid) @@ -57,7 +57,7 @@ namespace Oqtane.Controllers // PUT api//5 [HttpPut("{id}")] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public Job Put(int id, [FromBody] Job job) { if (ModelState.IsValid) @@ -70,7 +70,7 @@ namespace Oqtane.Controllers // DELETE api//5 [HttpDelete("{id}")] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public void Delete(int id) { _jobs.DeleteJob(id); @@ -79,7 +79,7 @@ namespace Oqtane.Controllers // GET api//start [HttpGet("start/{id}")] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public void Start(int id) { Job job = _jobs.GetJob(id); @@ -93,7 +93,7 @@ namespace Oqtane.Controllers // GET api//stop [HttpGet("stop/{id}")] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public void Stop(int id) { Job job = _jobs.GetJob(id); diff --git a/Oqtane.Server/Controllers/JobLogController.cs b/Oqtane.Server/Controllers/JobLogController.cs index 0c3f8bc5..055e90a0 100644 --- a/Oqtane.Server/Controllers/JobLogController.cs +++ b/Oqtane.Server/Controllers/JobLogController.cs @@ -9,7 +9,7 @@ using Oqtane.Repository; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class JobLogController : Controller { private readonly IJobLogRepository _jobLogs; @@ -23,7 +23,7 @@ namespace Oqtane.Controllers // GET: api/ [HttpGet] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public IEnumerable Get() { return _jobLogs.GetJobLogs(); @@ -31,7 +31,7 @@ namespace Oqtane.Controllers // GET api//5 [HttpGet("{id}")] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public JobLog Get(int id) { return _jobLogs.GetJobLog(id); @@ -39,7 +39,7 @@ namespace Oqtane.Controllers // POST api/ [HttpPost] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public JobLog Post([FromBody] JobLog jobLog) { if (ModelState.IsValid) @@ -52,7 +52,7 @@ namespace Oqtane.Controllers // PUT api//5 [HttpPut("{id}")] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public JobLog Put(int id, [FromBody] JobLog jobLog) { if (ModelState.IsValid) @@ -65,7 +65,7 @@ namespace Oqtane.Controllers // DELETE api//5 [HttpDelete("{id}")] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public void Delete(int id) { _jobLogs.DeleteJobLog(id); diff --git a/Oqtane.Server/Controllers/LogController.cs b/Oqtane.Server/Controllers/LogController.cs index 8cccfd12..4de0abcb 100644 --- a/Oqtane.Server/Controllers/LogController.cs +++ b/Oqtane.Server/Controllers/LogController.cs @@ -9,7 +9,7 @@ using Oqtane.Shared; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class LogController : Controller { private readonly ILogManager _logger; @@ -23,7 +23,7 @@ namespace Oqtane.Controllers // GET: api/?siteid=x&level=y&function=z&rows=50 [HttpGet] - [Authorize(Roles = Constants.AdminRole)] + [Authorize(Roles = RoleNames.Admin)] public IEnumerable Get(string siteid, string level, string function, string rows) { return _logs.GetLogs(int.Parse(siteid), level, function, int.Parse(rows)); @@ -31,7 +31,7 @@ namespace Oqtane.Controllers // GET api//5 [HttpGet("{id}")] - [Authorize(Roles = Constants.AdminRole)] + [Authorize(Roles = RoleNames.Admin)] public Log Get(int id) { return _logs.GetLog(id); diff --git a/Oqtane.Server/Controllers/ModuleController.cs b/Oqtane.Server/Controllers/ModuleController.cs index b90db0b8..6abcbe1f 100644 --- a/Oqtane.Server/Controllers/ModuleController.cs +++ b/Oqtane.Server/Controllers/ModuleController.cs @@ -11,7 +11,7 @@ using Oqtane.Security; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class ModuleController : Controller { private readonly IModuleRepository _modules; @@ -89,7 +89,7 @@ namespace Oqtane.Controllers // POST api/ [HttpPost] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public Module Post([FromBody] Module module) { if (ModelState.IsValid && _userPermissions.IsAuthorized(User, EntityNames.Page, module.PageId, PermissionNames.Edit)) @@ -108,7 +108,7 @@ namespace Oqtane.Controllers // PUT api//5 [HttpPut("{id}")] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public Module Put(int id, [FromBody] Module module) { if (ModelState.IsValid && _userPermissions.IsAuthorized(User, EntityNames.Module, module.ModuleId, PermissionNames.Edit)) @@ -140,7 +140,7 @@ namespace Oqtane.Controllers // DELETE api//5 [HttpDelete("{id}")] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public void Delete(int id) { if (_userPermissions.IsAuthorized(User, EntityNames.Module, id, PermissionNames.Edit)) @@ -157,7 +157,7 @@ namespace Oqtane.Controllers // GET api//export?moduleid=x [HttpGet("export")] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public string Export(int moduleid) { string content = ""; @@ -175,7 +175,7 @@ namespace Oqtane.Controllers // POST api//import?moduleid=x [HttpPost("import")] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public bool Import(int moduleid, [FromBody] string content) { bool success = false; diff --git a/Oqtane.Server/Controllers/ModuleDefinitionController.cs b/Oqtane.Server/Controllers/ModuleDefinitionController.cs index 9c6377d0..7e78fe87 100644 --- a/Oqtane.Server/Controllers/ModuleDefinitionController.cs +++ b/Oqtane.Server/Controllers/ModuleDefinitionController.cs @@ -19,7 +19,7 @@ using System.Text.Json; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class ModuleDefinitionController : Controller { private readonly IModuleDefinitionRepository _moduleDefinitions; @@ -81,7 +81,7 @@ namespace Oqtane.Controllers // PUT api//5 [HttpPut("{id}")] - [Authorize(Roles = Constants.AdminRole)] + [Authorize(Roles = RoleNames.Admin)] public void Put(int id, [FromBody] ModuleDefinition moduleDefinition) { if (ModelState.IsValid) @@ -92,7 +92,7 @@ namespace Oqtane.Controllers } [HttpGet("install")] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public void InstallModules() { _logger.Log(LogLevel.Information, this, LogFunction.Create, "Modules Installed"); @@ -101,7 +101,7 @@ namespace Oqtane.Controllers // DELETE api//5?siteid=x [HttpDelete("{id}")] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public void Delete(int id, int siteid) { ModuleDefinition moduledefinition = _moduleDefinitions.GetModuleDefinition(id, siteid); @@ -168,7 +168,7 @@ namespace Oqtane.Controllers // POST api/?moduleid=x [HttpPost] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public void Post([FromBody] ModuleDefinition moduleDefinition, string moduleid) { if (ModelState.IsValid) diff --git a/Oqtane.Server/Controllers/NotificationController.cs b/Oqtane.Server/Controllers/NotificationController.cs index 5310f5c7..5c73eb78 100644 --- a/Oqtane.Server/Controllers/NotificationController.cs +++ b/Oqtane.Server/Controllers/NotificationController.cs @@ -10,7 +10,7 @@ using Oqtane.Security; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class NotificationController : Controller { private readonly INotificationRepository _notifications; @@ -26,7 +26,7 @@ namespace Oqtane.Controllers // GET: api/?siteid=x&type=y&userid=z [HttpGet] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public IEnumerable Get(string siteid, string direction, string userid) { IEnumerable notifications = null; @@ -46,7 +46,7 @@ namespace Oqtane.Controllers // GET api//5 [HttpGet("{id}")] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public Notification Get(int id) { Notification notification = _notifications.GetNotification(id); @@ -59,7 +59,7 @@ namespace Oqtane.Controllers // POST api/ [HttpPost] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public Notification Post([FromBody] Notification notification) { if (IsAuthorized(notification.FromUserId)) @@ -72,7 +72,7 @@ namespace Oqtane.Controllers // PUT api//5 [HttpPut("{id}")] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public Notification Put(int id, [FromBody] Notification notification) { if (IsAuthorized(notification.FromUserId)) @@ -85,7 +85,7 @@ namespace Oqtane.Controllers // DELETE api//5 [HttpDelete("{id}")] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public void Delete(int id) { Notification notification = _notifications.GetNotification(id); diff --git a/Oqtane.Server/Controllers/PackageController.cs b/Oqtane.Server/Controllers/PackageController.cs index 1c1752f1..96af1346 100644 --- a/Oqtane.Server/Controllers/PackageController.cs +++ b/Oqtane.Server/Controllers/PackageController.cs @@ -15,7 +15,7 @@ using Oqtane.Shared; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class PackageController : Controller { private readonly IWebHostEnvironment _environment; @@ -27,7 +27,7 @@ namespace Oqtane.Controllers // GET: api/?tag=x [HttpGet] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public async Task> Get(string tag) { List packages = new List(); @@ -55,7 +55,7 @@ namespace Oqtane.Controllers } [HttpPost] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public async Task Post(string packageid, string version, string folder) { using (var httpClient = new HttpClient()) diff --git a/Oqtane.Server/Controllers/PageController.cs b/Oqtane.Server/Controllers/PageController.cs index 01645921..aab9c23d 100644 --- a/Oqtane.Server/Controllers/PageController.cs +++ b/Oqtane.Server/Controllers/PageController.cs @@ -13,7 +13,7 @@ using Oqtane.Repository; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class PageController : Controller { private readonly IPageRepository _pages; @@ -102,7 +102,7 @@ namespace Oqtane.Controllers // POST api/ [HttpPost] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public Page Post([FromBody] Page page) { if (ModelState.IsValid) @@ -115,7 +115,7 @@ namespace Oqtane.Controllers else { permissions = new List { - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(); } @@ -147,7 +147,7 @@ namespace Oqtane.Controllers // POST api//5?userid=x [HttpPost("{id}")] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public Page Post(int id, string userid) { Page page = null; @@ -213,7 +213,7 @@ namespace Oqtane.Controllers // PUT api//5 [HttpPut("{id}")] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public Page Put(int id, [FromBody] Page page) { if (ModelState.IsValid && _userPermissions.IsAuthorized(User, EntityNames.Page, page.PageId, PermissionNames.Edit)) @@ -233,7 +233,7 @@ namespace Oqtane.Controllers // PUT api//?siteid=x&pageid=y&parentid=z [HttpPut] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public void Put(int siteid, int pageid, int? parentid) { if (_userPermissions.IsAuthorized(User, EntityNames.Page, pageid, PermissionNames.Edit)) @@ -261,7 +261,7 @@ namespace Oqtane.Controllers // DELETE api//5 [HttpDelete("{id}")] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public void Delete(int id) { Page page = _pages.GetPage(id); diff --git a/Oqtane.Server/Controllers/PageModuleController.cs b/Oqtane.Server/Controllers/PageModuleController.cs index f2c0d489..0b238ecf 100644 --- a/Oqtane.Server/Controllers/PageModuleController.cs +++ b/Oqtane.Server/Controllers/PageModuleController.cs @@ -11,7 +11,7 @@ using Oqtane.Security; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class PageModuleController : Controller { private readonly IPageModuleRepository _pageModules; @@ -65,7 +65,7 @@ namespace Oqtane.Controllers // POST api/ [HttpPost] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public PageModule Post([FromBody] PageModule pageModule) { if (ModelState.IsValid && _userPermissions.IsAuthorized(User, EntityNames.Page, pageModule.PageId, PermissionNames.Edit)) @@ -85,7 +85,7 @@ namespace Oqtane.Controllers // PUT api//5 [HttpPut("{id}")] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public PageModule Put(int id, [FromBody] PageModule pageModule) { if (ModelState.IsValid && _userPermissions.IsAuthorized(User, EntityNames.Module, pageModule.ModuleId, PermissionNames.Edit)) @@ -105,7 +105,7 @@ namespace Oqtane.Controllers // PUT api//?pageid=x&pane=y [HttpPut] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public void Put(int pageid, string pane) { if (_userPermissions.IsAuthorized(User, EntityNames.Page, pageid, PermissionNames.Edit)) @@ -133,7 +133,7 @@ namespace Oqtane.Controllers // DELETE api//5 [HttpDelete("{id}")] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public void Delete(int id) { PageModule pagemodule = _pageModules.GetPageModule(id); diff --git a/Oqtane.Server/Controllers/ProfileController.cs b/Oqtane.Server/Controllers/ProfileController.cs index aa1158ac..19411487 100644 --- a/Oqtane.Server/Controllers/ProfileController.cs +++ b/Oqtane.Server/Controllers/ProfileController.cs @@ -9,7 +9,7 @@ using Oqtane.Repository; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class ProfileController : Controller { private readonly IProfileRepository _profiles; @@ -37,7 +37,7 @@ namespace Oqtane.Controllers // POST api/ [HttpPost] - [Authorize(Roles = Constants.AdminRole)] + [Authorize(Roles = RoleNames.Admin)] public Profile Post([FromBody] Profile profile) { if (ModelState.IsValid) @@ -50,7 +50,7 @@ namespace Oqtane.Controllers // PUT api//5 [HttpPut("{id}")] - [Authorize(Roles = Constants.AdminRole)] + [Authorize(Roles = RoleNames.Admin)] public Profile Put(int id, [FromBody] Profile profile) { if (ModelState.IsValid) @@ -63,7 +63,7 @@ namespace Oqtane.Controllers // DELETE api//5 [HttpDelete("{id}")] - [Authorize(Roles = Constants.AdminRole)] + [Authorize(Roles = RoleNames.Admin)] public void Delete(int id) { _profiles.DeleteProfile(id); diff --git a/Oqtane.Server/Controllers/RoleController.cs b/Oqtane.Server/Controllers/RoleController.cs index 418382c5..708e20c3 100644 --- a/Oqtane.Server/Controllers/RoleController.cs +++ b/Oqtane.Server/Controllers/RoleController.cs @@ -9,7 +9,7 @@ using Oqtane.Repository; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class RoleController : Controller { private readonly IRoleRepository _roles; @@ -23,7 +23,7 @@ namespace Oqtane.Controllers // GET: api/?siteid=x [HttpGet] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public IEnumerable Get(string siteid) { return _roles.GetRoles(int.Parse(siteid)); @@ -31,7 +31,7 @@ namespace Oqtane.Controllers // GET api//5 [HttpGet("{id}")] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public Role Get(int id) { return _roles.GetRole(id); @@ -39,7 +39,7 @@ namespace Oqtane.Controllers // POST api/ [HttpPost] - [Authorize(Roles = Constants.AdminRole)] + [Authorize(Roles = RoleNames.Admin)] public Role Post([FromBody] Role role) { if (ModelState.IsValid) @@ -52,7 +52,7 @@ namespace Oqtane.Controllers // PUT api//5 [HttpPut("{id}")] - [Authorize(Roles = Constants.AdminRole)] + [Authorize(Roles = RoleNames.Admin)] public Role Put(int id, [FromBody] Role role) { if (ModelState.IsValid) @@ -65,7 +65,7 @@ namespace Oqtane.Controllers // DELETE api//5 [HttpDelete("{id}")] - [Authorize(Roles = Constants.AdminRole)] + [Authorize(Roles = RoleNames.Admin)] public void Delete(int id) { _roles.DeleteRole(id); diff --git a/Oqtane.Server/Controllers/SettingController.cs b/Oqtane.Server/Controllers/SettingController.cs index e9be3798..8e6563c2 100644 --- a/Oqtane.Server/Controllers/SettingController.cs +++ b/Oqtane.Server/Controllers/SettingController.cs @@ -10,7 +10,7 @@ using Oqtane.Repository; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class SettingController : Controller { private readonly ISettingRepository _settings; @@ -124,10 +124,10 @@ namespace Oqtane.Controllers switch (entityName) { case EntityNames.Tenant: - authorized = User.IsInRole(Constants.HostRole); + authorized = User.IsInRole(RoleNames.Host); break; case EntityNames.Site: - authorized = User.IsInRole(Constants.AdminRole); + authorized = User.IsInRole(RoleNames.Admin); break; case EntityNames.Page: case EntityNames.Module: @@ -138,7 +138,7 @@ namespace Oqtane.Controllers authorized = true; if (permissionName == PermissionNames.Edit) { - authorized = User.IsInRole(Constants.AdminRole) || (_userPermissions.GetUser(User).UserId == entityId); + authorized = User.IsInRole(RoleNames.Admin) || (_userPermissions.GetUser(User).UserId == entityId); } break; } diff --git a/Oqtane.Server/Controllers/SiteController.cs b/Oqtane.Server/Controllers/SiteController.cs index c358ea3c..43a10dd1 100644 --- a/Oqtane.Server/Controllers/SiteController.cs +++ b/Oqtane.Server/Controllers/SiteController.cs @@ -10,7 +10,7 @@ using Oqtane.Repository; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class SiteController : Controller { private readonly ISiteRepository _sites; @@ -28,7 +28,7 @@ namespace Oqtane.Controllers // GET: api/ [HttpGet] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public IEnumerable Get() { return _sites.GetSites(); @@ -57,7 +57,7 @@ namespace Oqtane.Controllers } else { - authorized = User.IsInRole(Constants.HostRole); + authorized = User.IsInRole(RoleNames.Host); } if (authorized) { @@ -70,7 +70,7 @@ namespace Oqtane.Controllers // PUT api//5 [HttpPut("{id}")] - [Authorize(Roles = Constants.AdminRole)] + [Authorize(Roles = RoleNames.Admin)] public Site Put(int id, [FromBody] Site site) { if (ModelState.IsValid) @@ -84,7 +84,7 @@ namespace Oqtane.Controllers // DELETE api//5 [HttpDelete("{id}")] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public void Delete(int id) { _sites.DeleteSite(id); diff --git a/Oqtane.Server/Controllers/SiteTemplateController.cs b/Oqtane.Server/Controllers/SiteTemplateController.cs index c63170c1..abb9e19b 100644 --- a/Oqtane.Server/Controllers/SiteTemplateController.cs +++ b/Oqtane.Server/Controllers/SiteTemplateController.cs @@ -7,7 +7,7 @@ using Oqtane.Shared; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class SiteTemplateController : Controller { private readonly ISiteTemplateRepository _siteTemplates; @@ -19,7 +19,7 @@ namespace Oqtane.Controllers // GET: api/ [HttpGet] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public IEnumerable Get() { return _siteTemplates.GetSiteTemplates(); diff --git a/Oqtane.Server/Controllers/SqlController.cs b/Oqtane.Server/Controllers/SqlController.cs index 5bce5a92..7e7bedcc 100644 --- a/Oqtane.Server/Controllers/SqlController.cs +++ b/Oqtane.Server/Controllers/SqlController.cs @@ -14,7 +14,7 @@ using System; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class SqlController : Controller { private readonly ITenantRepository _tenants; @@ -30,7 +30,7 @@ namespace Oqtane.Controllers // POST: api/ [HttpPost] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public SqlQuery Post([FromBody] SqlQuery sqlquery) { var results = new List>(); diff --git a/Oqtane.Server/Controllers/SystemController.cs b/Oqtane.Server/Controllers/SystemController.cs index 2f5d7339..61c5593b 100644 --- a/Oqtane.Server/Controllers/SystemController.cs +++ b/Oqtane.Server/Controllers/SystemController.cs @@ -7,7 +7,7 @@ using Microsoft.AspNetCore.Hosting; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class SystemController : Controller { private readonly IWebHostEnvironment _environment; @@ -19,7 +19,7 @@ namespace Oqtane.Controllers // GET: api/ [HttpGet] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public Dictionary Get() { Dictionary systeminfo = new Dictionary(); diff --git a/Oqtane.Server/Controllers/TenantController.cs b/Oqtane.Server/Controllers/TenantController.cs index 0f76fc78..6670d4dd 100644 --- a/Oqtane.Server/Controllers/TenantController.cs +++ b/Oqtane.Server/Controllers/TenantController.cs @@ -9,7 +9,7 @@ using Oqtane.Repository; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class TenantController : Controller { private readonly ITenantRepository _tenants; @@ -23,7 +23,7 @@ namespace Oqtane.Controllers // GET: api/ [HttpGet] - [Authorize(Roles = Constants.AdminRole)] + [Authorize(Roles = RoleNames.Admin)] public IEnumerable Get() { return _tenants.GetTenants(); @@ -31,7 +31,7 @@ namespace Oqtane.Controllers // GET api//5 [HttpGet("{id}")] - [Authorize(Roles = Constants.AdminRole)] + [Authorize(Roles = RoleNames.Admin)] public Tenant Get(int id) { return _tenants.GetTenant(id); @@ -39,7 +39,7 @@ namespace Oqtane.Controllers // POST api/ [HttpPost] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public Tenant Post([FromBody] Tenant tenant) { if (ModelState.IsValid) @@ -52,7 +52,7 @@ namespace Oqtane.Controllers // PUT api//5 [HttpPut("{id}")] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public Tenant Put(int id, [FromBody] Tenant tenant) { if (ModelState.IsValid) @@ -65,7 +65,7 @@ namespace Oqtane.Controllers // DELETE api//5 [HttpDelete("{id}")] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public void Delete(int id) { _tenants.DeleteTenant(id); diff --git a/Oqtane.Server/Controllers/ThemeController.cs b/Oqtane.Server/Controllers/ThemeController.cs index 3acb66aa..0aa6916c 100644 --- a/Oqtane.Server/Controllers/ThemeController.cs +++ b/Oqtane.Server/Controllers/ThemeController.cs @@ -16,7 +16,7 @@ using System.Text.Json; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class ThemeController : Controller { private readonly IThemeRepository _themes; @@ -34,14 +34,14 @@ namespace Oqtane.Controllers // GET: api/ [HttpGet] - [Authorize(Roles = Constants.RegisteredRole)] + [Authorize(Roles = RoleNames.Registered)] public IEnumerable Get() { return _themes.GetThemes(); } [HttpGet("install")] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public void InstallThemes() { _logger.Log(LogLevel.Information, this, LogFunction.Create, "Themes Installed"); @@ -50,7 +50,7 @@ namespace Oqtane.Controllers // DELETE api//xxx [HttpDelete("{themename}")] - [Authorize(Roles = Constants.HostRole)] + [Authorize(Roles = RoleNames.Host)] public void Delete(string themename) { List themes = _themes.GetThemes().ToList(); diff --git a/Oqtane.Server/Controllers/UserController.cs b/Oqtane.Server/Controllers/UserController.cs index fff15612..5a97087a 100644 --- a/Oqtane.Server/Controllers/UserController.cs +++ b/Oqtane.Server/Controllers/UserController.cs @@ -18,7 +18,7 @@ using Oqtane.Extensions; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class UserController : Controller { private readonly IUserRepository _users; @@ -77,7 +77,7 @@ namespace Oqtane.Controllers private User Filter(User user) { - if (user != null && !User.IsInRole(Constants.AdminRole) && User.Identity.Name?.ToLower() != user.Username.ToLower()) + if (user != null && !User.IsInRole(RoleNames.Admin) && User.Identity.Name?.ToLower() != user.Username.ToLower()) { user.DisplayName = ""; user.Email = ""; @@ -118,7 +118,7 @@ namespace Oqtane.Controllers bool verified; bool allowregistration; - if (user.Username == Constants.HostUser || User.IsInRole(Constants.AdminRole)) + if (user.Username == UserNames.Host || User.IsInRole(RoleNames.Admin)) { verified = true; allowregistration = true; @@ -164,9 +164,9 @@ namespace Oqtane.Controllers } // assign to host role if this is the host user ( initial installation ) - if (user.Username == Constants.HostUser) + if (user.Username == UserNames.Host) { - int hostroleid = _roles.GetRoles(user.SiteId, true).Where(item => item.Name == Constants.HostRole).FirstOrDefault().RoleId; + int hostroleid = _roles.GetRoles(user.SiteId, true).Where(item => item.Name == RoleNames.Host).FirstOrDefault().RoleId; UserRole userrole = new UserRole(); userrole.UserId = newUser.UserId; userrole.RoleId = hostroleid; @@ -190,7 +190,7 @@ namespace Oqtane.Controllers Permissions = new List { new Permission(PermissionNames.Browse, newUser.UserId, true), - new Permission(PermissionNames.View, Constants.AllUsersRole, true), + new Permission(PermissionNames.View, RoleNames.Everyone, true), new Permission(PermissionNames.Edit, newUser.UserId, true) }.EncodePermissions() }); @@ -206,7 +206,7 @@ namespace Oqtane.Controllers } } - if (newUser != null && user.Username != Constants.HostUser) + if (newUser != null && user.Username != UserNames.Host) { // add auto assigned roles to user for site List roles = _roles.GetRoles(user.SiteId).Where(item => item.IsAutoAssigned).ToList(); @@ -242,7 +242,7 @@ namespace Oqtane.Controllers { if (ModelState.IsValid) { - if (User.IsInRole(Constants.AdminRole) || User.Identity.Name == user.Username) + if (User.IsInRole(RoleNames.Admin) || User.Identity.Name == user.Username) { if (user.Password != "") { @@ -270,7 +270,7 @@ namespace Oqtane.Controllers // DELETE api//5?siteid=x [HttpDelete("{id}")] - [Authorize(Roles = Constants.AdminRole)] + [Authorize(Roles = RoleNames.Admin)] public async Task Delete(int id) { IdentityUser identityuser = await _identityUserManager.FindByNameAsync(_users.GetUser(id).Username); @@ -460,9 +460,9 @@ namespace Oqtane.Controllers foreach (UserRole userrole in userroles) { roles += userrole.Role.Name + ";"; - if (userrole.Role.Name == Constants.HostRole && userroles.Where(item => item.Role.Name == Constants.AdminRole).FirstOrDefault() == null) + if (userrole.Role.Name == RoleNames.Host && userroles.Where(item => item.Role.Name == RoleNames.Admin).FirstOrDefault() == null) { - roles += Constants.AdminRole + ";"; + roles += RoleNames.Admin + ";"; } } if (roles != "") roles = ";" + roles; diff --git a/Oqtane.Server/Controllers/UserRoleController.cs b/Oqtane.Server/Controllers/UserRoleController.cs index 50b6d957..11c875de 100644 --- a/Oqtane.Server/Controllers/UserRoleController.cs +++ b/Oqtane.Server/Controllers/UserRoleController.cs @@ -9,7 +9,7 @@ using Oqtane.Repository; namespace Oqtane.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class UserRoleController : Controller { private readonly IUserRoleRepository _userRoles; @@ -27,7 +27,7 @@ namespace Oqtane.Controllers // GET: api/?siteid=x [HttpGet] - [Authorize(Roles = Constants.AdminRole)] + [Authorize(Roles = RoleNames.Admin)] public IEnumerable Get(string siteid) { return _userRoles.GetUserRoles(int.Parse(siteid)); @@ -35,7 +35,7 @@ namespace Oqtane.Controllers // GET api//5 [HttpGet("{id}")] - [Authorize(Roles = Constants.AdminRole)] + [Authorize(Roles = RoleNames.Admin)] public UserRole Get(int id) { return _userRoles.GetUserRole(id); @@ -43,7 +43,7 @@ namespace Oqtane.Controllers // POST api/ [HttpPost] - [Authorize(Roles = Constants.AdminRole)] + [Authorize(Roles = RoleNames.Admin)] public UserRole Post([FromBody] UserRole userRole) { if (ModelState.IsValid) @@ -57,7 +57,7 @@ namespace Oqtane.Controllers // PUT api//5 [HttpPut("{id}")] - [Authorize(Roles = Constants.AdminRole)] + [Authorize(Roles = RoleNames.Admin)] public UserRole Put(int id, [FromBody] UserRole userRole) { if (ModelState.IsValid) @@ -71,7 +71,7 @@ namespace Oqtane.Controllers // DELETE api//5 [HttpDelete("{id}")] - [Authorize(Roles = Constants.AdminRole)] + [Authorize(Roles = RoleNames.Admin)] public void Delete(int id) { UserRole userRole = _userRoles.GetUserRole(id); diff --git a/Oqtane.Server/Extensions/WebHostBuilderExtensions.cs b/Oqtane.Server/Extensions/WebHostBuilderExtensions.cs new file mode 100644 index 00000000..3e9b8fc7 --- /dev/null +++ b/Oqtane.Server/Extensions/WebHostBuilderExtensions.cs @@ -0,0 +1,21 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Oqtane.Infrastructure; + +namespace Microsoft.AspNetCore.Hosting +{ + public static class WebHostBuilderExtensions + { + public static IWebHostBuilder ConfigureLocalizationSettings(this IWebHostBuilder builder) + { + return builder.ConfigureServices((context, services) => + { + var config = context.Configuration; + + services.Configure(config.GetSection("Localization")); + services.AddSingleton(ctx => ctx.GetService>().Value); + services.AddTransient(); + }); + } + } +} diff --git a/Oqtane.Server/Infrastructure/DatabaseManager.cs b/Oqtane.Server/Infrastructure/DatabaseManager.cs index 6aa2369a..4f598322 100644 --- a/Oqtane.Server/Infrastructure/DatabaseManager.cs +++ b/Oqtane.Server/Infrastructure/DatabaseManager.cs @@ -72,7 +72,7 @@ namespace Oqtane.Infrastructure if (install == null) { // startup or silent installation - install = new InstallConfig { ConnectionString = _config.GetConnectionString(SettingKeys.ConnectionStringKey), TenantName = Constants.MasterTenant, IsNewTenant = false }; + install = new InstallConfig { ConnectionString = _config.GetConnectionString(SettingKeys.ConnectionStringKey), TenantName = TenantNames.Master, IsNewTenant = false }; if (!IsInstalled()) { @@ -83,7 +83,7 @@ namespace Oqtane.Infrastructure if (!string.IsNullOrEmpty(install.ConnectionString) && !string.IsNullOrEmpty(install.Aliases) && !string.IsNullOrEmpty(install.HostPassword) && !string.IsNullOrEmpty(install.HostEmail)) { // silent install - install.HostName = Constants.HostUser; + install.HostName = UserNames.Host; install.SiteTemplate = GetInstallationConfig(SettingKeys.SiteTemplateKey, Constants.DefaultSiteTemplate); install.DefaultTheme = GetInstallationConfig(SettingKeys.DefaultThemeKey, Constants.DefaultTheme); install.DefaultLayout = GetInstallationConfig(SettingKeys.DefaultLayoutKey, Constants.DefaultLayout); @@ -192,7 +192,7 @@ namespace Oqtane.Infrastructure { var result = new Installation { Success = false, Message = string.Empty }; - if (install.TenantName == Constants.MasterTenant) + if (install.TenantName == TenantNames.Master) { MigrateScriptNamingConvention("Master", install.ConnectionString); @@ -245,7 +245,7 @@ namespace Oqtane.Infrastructure db.SaveChanges(); _cache.Remove("tenants"); - if (install.TenantName == Constants.MasterTenant) + if (install.TenantName == TenantNames.Master) { var job = new Job { Name = "Notification Job", JobType = "Oqtane.Infrastructure.NotificationJob, Oqtane.Server", Frequency = "m", Interval = 1, StartDate = null, EndDate = null, IsEnabled = false, IsStarted = false, IsExecuting = false, NextExecution = null, RetentionHistory = 10, CreatedBy = "", CreatedOn = DateTime.UtcNow, ModifiedBy = "", ModifiedOn = DateTime.UtcNow }; db.Job.Add(job); @@ -350,7 +350,7 @@ namespace Oqtane.Infrastructure foreach (var tenant in db.Tenant.ToList()) { int index = Array.FindIndex(versions, item => item == moduledefinition.Version); - if (tenant.Name == install.TenantName && install.TenantName != Constants.MasterTenant) + if (tenant.Name == install.TenantName && install.TenantName != TenantNames.Master) { index = -1; } @@ -439,17 +439,17 @@ namespace Oqtane.Infrastructure }; site = sites.AddSite(site); - IdentityUser identityUser = identityUserManager.FindByNameAsync(Constants.HostUser).GetAwaiter().GetResult(); + IdentityUser identityUser = identityUserManager.FindByNameAsync(UserNames.Host).GetAwaiter().GetResult(); if (identityUser == null) { - identityUser = new IdentityUser { UserName = Constants.HostUser, Email = install.HostEmail, EmailConfirmed = true }; + identityUser = new IdentityUser { UserName = UserNames.Host, Email = install.HostEmail, EmailConfirmed = true }; var create = identityUserManager.CreateAsync(identityUser, install.HostPassword).GetAwaiter().GetResult(); if (create.Succeeded) { var user = new User { SiteId = site.SiteId, - Username = Constants.HostUser, + Username = UserNames.Host, Password = install.HostPassword, Email = install.HostEmail, DisplayName = install.HostName, @@ -458,7 +458,7 @@ namespace Oqtane.Infrastructure }; user = users.AddUser(user); - var hostRoleId = roles.GetRoles(user.SiteId, true).FirstOrDefault(item => item.Name == Constants.HostRole)?.RoleId ?? 0; + var hostRoleId = roles.GetRoles(user.SiteId, true).FirstOrDefault(item => item.Name == RoleNames.Host)?.RoleId ?? 0; var userRole = new UserRole { UserId = user.UserId, RoleId = hostRoleId, EffectiveDate = null, ExpiryDate = null }; userroles.AddUserRole(userRole); @@ -477,7 +477,7 @@ namespace Oqtane.Infrastructure Permissions = new List { new Permission(PermissionNames.Browse, user.UserId, true), - new Permission(PermissionNames.View, Constants.AllUsersRole, true), + new Permission(PermissionNames.View, RoleNames.Everyone, true), new Permission(PermissionNames.Edit, user.UserId, true), }.EncodePermissions(), }); diff --git a/Oqtane.Server/Infrastructure/SiteTemplates/DefaultSiteTemplate.cs b/Oqtane.Server/Infrastructure/SiteTemplates/DefaultSiteTemplate.cs index 8b71c33b..449b7df9 100644 --- a/Oqtane.Server/Infrastructure/SiteTemplates/DefaultSiteTemplate.cs +++ b/Oqtane.Server/Infrastructure/SiteTemplates/DefaultSiteTemplate.cs @@ -43,16 +43,16 @@ namespace Oqtane.SiteTemplates IsNavigation = true, IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.AllUsersRole, true), - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Everyone, true), + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions() , PageTemplateModules = new List { new PageTemplateModule { ModuleDefinitionName = "Oqtane.Modules.HtmlText, Oqtane.Client", Title = "Welcome To Oqtane...", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.AllUsersRole, true), - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Everyone, true), + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), Content = "

Oqtane is an open source modular application framework that provides advanced functionality for developing web and mobile applications on ASP.NET Core. It leverages the revolutionary new Blazor component model to compose a fully dynamic web development experience which can be hosted either client-side or server-side. Whether you are looking for a platform to accelerate your web development efforts, or simply interested in exploring the anatomy of a large-scale Blazor application, Oqtane provides a solid foundation based on proven enterprise architectural principles.

" + "

Join Our Community  Clone Our Repo

" + @@ -61,9 +61,9 @@ namespace Oqtane.SiteTemplates }, new PageTemplateModule { ModuleDefinitionName = "Oqtane.Modules.HtmlText, Oqtane.Client", Title = "MIT License", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.AllUsersRole, true), - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Everyone, true), + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), Content = "

Copyright (c) 2019-2020 .NET Foundation

" + "

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

" + @@ -72,9 +72,9 @@ namespace Oqtane.SiteTemplates }, new PageTemplateModule { ModuleDefinitionName = "Oqtane.Modules.HtmlText, Oqtane.Client", Title = "Secure Content", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.RegisteredRole, true), - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Registered, true), + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), Content = "

Oqtane allows you to control access to your content using security roles. This module is only visible to Registered Users of the site.

" } @@ -89,16 +89,16 @@ namespace Oqtane.SiteTemplates IsNavigation = true, IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.RegisteredRole, true), - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Registered, true), + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), PageTemplateModules = new List { new PageTemplateModule { ModuleDefinitionName = "Oqtane.Modules.HtmlText, Oqtane.Client", Title = "Secure Content", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.RegisteredRole, true), - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Registered, true), + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), Content = "

Oqtane allows you to control access to your content using security roles. This page is only visible to Registered Users of the site.

" } @@ -113,16 +113,16 @@ namespace Oqtane.SiteTemplates IsNavigation = true, IsPersonalizable = true, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.AllUsersRole, true), - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Everyone, true), + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), PageTemplateModules = new List { new PageTemplateModule { ModuleDefinitionName = "Oqtane.Modules.HtmlText, Oqtane.Client", Title = "My Page", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.AllUsersRole, true), - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Everyone, true), + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), Content = "

Oqtane offers native support for user personalized pages. If a page is identified as personalizable by the site administrator in the page settings, when an authenticated user visits the page they will see an edit button at the top right corner of the page next to their username. When they click this button the sytem will create a new version of the page and allow them to edit the page content.

" } diff --git a/Oqtane.Server/Infrastructure/SiteTemplates/EmptySiteTemplate.cs b/Oqtane.Server/Infrastructure/SiteTemplates/EmptySiteTemplate.cs index 33ccaf32..408fa3fe 100644 --- a/Oqtane.Server/Infrastructure/SiteTemplates/EmptySiteTemplate.cs +++ b/Oqtane.Server/Infrastructure/SiteTemplates/EmptySiteTemplate.cs @@ -31,9 +31,9 @@ namespace Oqtane.SiteTemplates IsNavigation = true, IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.AllUsersRole, true), - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Everyone, true), + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), PageTemplateModules = new List() }); diff --git a/Oqtane.Server/Infrastructure/UpgradeManager.cs b/Oqtane.Server/Infrastructure/UpgradeManager.cs index 2c538d97..0344de6e 100644 --- a/Oqtane.Server/Infrastructure/UpgradeManager.cs +++ b/Oqtane.Server/Infrastructure/UpgradeManager.cs @@ -40,9 +40,9 @@ namespace Oqtane.Infrastructure // EditMode = false, // PagePermissions = new List // { - // new Permission(PermissionNames.View, Constants.AdminRole, true), - // new Permission(PermissionNames.View, Constants.AllUsersRole, true), - // new Permission(PermissionNames.Edit, Constants.AdminRole, true) + // new Permission(PermissionNames.View, RoleNames.Admin, true), + // new Permission(PermissionNames.View, RoleNames.Everyone, true), + // new Permission(PermissionNames.Edit, RoleNames.Admin, true) // }.EncodePermissions(), // PageTemplateModules = new List // { @@ -51,9 +51,9 @@ namespace Oqtane.Infrastructure // ModuleDefinitionName = typeof(Oqtane.Modules.Admin.Login.Index).ToModuleDefinitionName(), Title = "Test", Pane = "Content", // ModulePermissions = new List // { - // new Permission(PermissionNames.View, Constants.AdminRole, true), - // new Permission(PermissionNames.View, Constants.AllUsersRole, true), - // new Permission(PermissionNames.Edit, Constants.AdminRole, true) + // new Permission(PermissionNames.View, RoleNames.Admin, true), + // new Permission(PermissionNames.View, RoleNames.Everyone, true), + // new Permission(PermissionNames.Edit, RoleNames.Admin, true) // }.EncodePermissions(), // Content = "" // } diff --git a/Oqtane.Server/Modules/HtmlText/Controllers/HtmlTextController.cs b/Oqtane.Server/Modules/HtmlText/Controllers/HtmlTextController.cs index ba164d4f..74bf8564 100644 --- a/Oqtane.Server/Modules/HtmlText/Controllers/HtmlTextController.cs +++ b/Oqtane.Server/Modules/HtmlText/Controllers/HtmlTextController.cs @@ -12,7 +12,7 @@ using Oqtane.Controllers; namespace Oqtane.Modules.HtmlText.Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class HtmlTextController : ModuleControllerBase { private readonly IHtmlTextRepository _htmlText; @@ -24,7 +24,7 @@ namespace Oqtane.Modules.HtmlText.Controllers // GET api//5 [HttpGet("{id}")] - [Authorize(Policy = "ViewModule")] + [Authorize(Policy = PolicyNames.ViewModule)] public List Get(int id) { var list = new List(); @@ -47,7 +47,7 @@ namespace Oqtane.Modules.HtmlText.Controllers // POST api/ [HttpPost] - [Authorize(Policy = "EditModule")] + [Authorize(Policy = PolicyNames.EditModule)] public HtmlTextInfo Post([FromBody] HtmlTextInfo htmlText) { try @@ -68,7 +68,7 @@ namespace Oqtane.Modules.HtmlText.Controllers // PUT api//5 [HttpPut("{id}")] - [Authorize(Policy = "EditModule")] + [Authorize(Policy = PolicyNames.EditModule)] public HtmlTextInfo Put(int id, [FromBody] HtmlTextInfo htmlText) { try @@ -89,7 +89,7 @@ namespace Oqtane.Modules.HtmlText.Controllers // DELETE api//5 [HttpDelete("{id}")] - [Authorize(Policy = "EditModule")] + [Authorize(Policy = PolicyNames.EditModule)] public void Delete(int id) { try diff --git a/Oqtane.Server/Program.cs b/Oqtane.Server/Program.cs index c4b5492f..1ac0797e 100644 --- a/Oqtane.Server/Program.cs +++ b/Oqtane.Server/Program.cs @@ -26,6 +26,7 @@ namespace Oqtane.Server .AddCommandLine(args) .Build()) .UseStartup() + .ConfigureLocalizationSettings() .Build(); } } diff --git a/Oqtane.Server/Repository/ModuleDefinitionRepository.cs b/Oqtane.Server/Repository/ModuleDefinitionRepository.cs index b2bfc71d..b0d21ff2 100644 --- a/Oqtane.Server/Repository/ModuleDefinitionRepository.cs +++ b/Oqtane.Server/Repository/ModuleDefinitionRepository.cs @@ -239,15 +239,15 @@ namespace Oqtane.Repository { moduledefinition.Permissions = new List { - new Permission(PermissionNames.Utilize, Constants.AdminRole, true) + new Permission(PermissionNames.Utilize, RoleNames.Admin, true) }.EncodePermissions(); } else { moduledefinition.Permissions = new List { - new Permission(PermissionNames.Utilize, Constants.AdminRole, true), - new Permission(PermissionNames.Utilize, Constants.RegisteredRole, true) + new Permission(PermissionNames.Utilize, RoleNames.Admin, true), + new Permission(PermissionNames.Utilize, RoleNames.Registered, true) }.EncodePermissions(); } diff --git a/Oqtane.Server/Repository/SiteRepository.cs b/Oqtane.Server/Repository/SiteRepository.cs index 530360da..0130e5e3 100644 --- a/Oqtane.Server/Repository/SiteRepository.cs +++ b/Oqtane.Server/Repository/SiteRepository.cs @@ -60,9 +60,9 @@ namespace Oqtane.Repository IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.View, Constants.AllUsersRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.View, RoleNames.Everyone, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), PageTemplateModules = new List { @@ -71,9 +71,9 @@ namespace Oqtane.Repository ModuleDefinitionName = typeof(Oqtane.Modules.Admin.Login.Index).ToModuleDefinitionName(), Title = "User Login", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.View, Constants.AllUsersRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.View, RoleNames.Everyone, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), Content = "" } @@ -89,9 +89,9 @@ namespace Oqtane.Repository IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.View, Constants.AllUsersRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.View, RoleNames.Everyone, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), PageTemplateModules = new List { @@ -100,9 +100,9 @@ namespace Oqtane.Repository ModuleDefinitionName = typeof(Oqtane.Modules.Admin.Register.Index).ToModuleDefinitionName(), Title = "User Registration", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.View, Constants.AllUsersRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.View, RoleNames.Everyone, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), Content = "" } @@ -119,9 +119,9 @@ namespace Oqtane.Repository IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.View, Constants.AllUsersRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.View, RoleNames.Everyone, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), PageTemplateModules = new List { @@ -130,9 +130,9 @@ namespace Oqtane.Repository ModuleDefinitionName = typeof(Oqtane.Modules.Admin.Reset.Index).ToModuleDefinitionName(), Title = "Password Reset", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.View, Constants.AllUsersRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.View, RoleNames.Everyone, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), Content = "" } @@ -148,9 +148,9 @@ namespace Oqtane.Repository IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.View, Constants.RegisteredRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.View, RoleNames.Registered, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), PageTemplateModules = new List { @@ -159,9 +159,9 @@ namespace Oqtane.Repository ModuleDefinitionName = typeof(Oqtane.Modules.Admin.UserProfile.Index).ToModuleDefinitionName(), Title = "User Profile", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.View, Constants.RegisteredRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.View, RoleNames.Registered, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), Content = "" } @@ -174,8 +174,8 @@ namespace Oqtane.Repository Name = "Admin", Parent = "", Path = "admin", Icon = "", IsNavigation = false, IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), PageTemplateModules = new List { @@ -184,8 +184,8 @@ namespace Oqtane.Repository ModuleDefinitionName = typeof(Oqtane.Modules.Admin.Dashboard.Index).ToModuleDefinitionName(), Title = "Admin Dashboard", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), Content = "" } @@ -201,8 +201,8 @@ namespace Oqtane.Repository IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), PageTemplateModules = new List { @@ -211,8 +211,8 @@ namespace Oqtane.Repository ModuleDefinitionName = typeof(Oqtane.Modules.Admin.Site.Index).ToModuleDefinitionName(), Title = "Site Settings", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), Content = "" } @@ -228,8 +228,8 @@ namespace Oqtane.Repository IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), PageTemplateModules = new List { @@ -238,8 +238,8 @@ namespace Oqtane.Repository ModuleDefinitionName = typeof(Oqtane.Modules.Admin.Pages.Index).ToModuleDefinitionName(), Title = "Page Management", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), Content = "" } @@ -255,8 +255,8 @@ namespace Oqtane.Repository IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), PageTemplateModules = new List { @@ -265,8 +265,8 @@ namespace Oqtane.Repository ModuleDefinitionName = typeof(Oqtane.Modules.Admin.Users.Index).ToModuleDefinitionName(), Title = "User Management", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), Content = "" } @@ -282,8 +282,8 @@ namespace Oqtane.Repository IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), PageTemplateModules = new List { @@ -292,8 +292,8 @@ namespace Oqtane.Repository ModuleDefinitionName = typeof(Oqtane.Modules.Admin.Profiles.Index).ToModuleDefinitionName(), Title = "Profile Management", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), Content = "" } @@ -309,8 +309,8 @@ namespace Oqtane.Repository IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), PageTemplateModules = new List { @@ -319,8 +319,8 @@ namespace Oqtane.Repository ModuleDefinitionName = typeof(Oqtane.Modules.Admin.Roles.Index).ToModuleDefinitionName(), Title = "Role Management", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), Content = "" } @@ -336,8 +336,8 @@ namespace Oqtane.Repository IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), PageTemplateModules = new List { @@ -346,8 +346,8 @@ namespace Oqtane.Repository ModuleDefinitionName = typeof(Oqtane.Modules.Admin.Files.Index).ToModuleDefinitionName(), Title = "File Management", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), Content = "" } @@ -363,8 +363,8 @@ namespace Oqtane.Repository IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), PageTemplateModules = new List { @@ -373,8 +373,8 @@ namespace Oqtane.Repository ModuleDefinitionName = typeof(Oqtane.Modules.Admin.RecycleBin.Index).ToModuleDefinitionName(), Title = "Recycle Bin", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions(), Content = "" } @@ -392,8 +392,8 @@ namespace Oqtane.Repository IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.HostRole, true), - new Permission(PermissionNames.Edit, Constants.HostRole, true) + new Permission(PermissionNames.View, RoleNames.Host, true), + new Permission(PermissionNames.Edit, RoleNames.Host, true) }.EncodePermissions(), PageTemplateModules = new List { @@ -402,8 +402,8 @@ namespace Oqtane.Repository ModuleDefinitionName = typeof(Oqtane.Modules.Admin.Logs.Index).ToModuleDefinitionName(), Title = "Event Log", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.HostRole, true), - new Permission(PermissionNames.Edit, Constants.HostRole, true) + new Permission(PermissionNames.View, RoleNames.Host, true), + new Permission(PermissionNames.Edit, RoleNames.Host, true) }.EncodePermissions(), Content = "" } @@ -418,8 +418,8 @@ namespace Oqtane.Repository IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.HostRole, true), - new Permission(PermissionNames.Edit, Constants.HostRole, true) + new Permission(PermissionNames.View, RoleNames.Host, true), + new Permission(PermissionNames.Edit, RoleNames.Host, true) }.EncodePermissions(), PageTemplateModules = new List { @@ -428,8 +428,8 @@ namespace Oqtane.Repository ModuleDefinitionName = typeof(Oqtane.Modules.Admin.Tenants.Index).ToModuleDefinitionName(), Title = "Tenant Management", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.HostRole, true), - new Permission(PermissionNames.Edit, Constants.HostRole, true) + new Permission(PermissionNames.View, RoleNames.Host, true), + new Permission(PermissionNames.Edit, RoleNames.Host, true) }.EncodePermissions(), Content = "" } @@ -440,8 +440,8 @@ namespace Oqtane.Repository Name = "Site Management", Parent = "Admin", Path = "admin/sites", Icon = Icons.Globe, IsNavigation = false, IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.HostRole, true), - new Permission(PermissionNames.Edit, Constants.HostRole, true) + new Permission(PermissionNames.View, RoleNames.Host, true), + new Permission(PermissionNames.Edit, RoleNames.Host, true) }.EncodePermissions(), PageTemplateModules = new List { @@ -450,8 +450,8 @@ namespace Oqtane.Repository ModuleDefinitionName = typeof(Oqtane.Modules.Admin.Sites.Index).ToModuleDefinitionName(), Title = "Site Management", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.HostRole, true), - new Permission(PermissionNames.Edit, Constants.HostRole, true) + new Permission(PermissionNames.View, RoleNames.Host, true), + new Permission(PermissionNames.Edit, RoleNames.Host, true) }.EncodePermissions(), Content = "" } @@ -462,8 +462,8 @@ namespace Oqtane.Repository Name = "Module Management", Parent = "Admin", Path = "admin/modules", Icon = Icons.Browser, IsNavigation = false, IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.HostRole, true), - new Permission(PermissionNames.Edit, Constants.HostRole, true) + new Permission(PermissionNames.View, RoleNames.Host, true), + new Permission(PermissionNames.Edit, RoleNames.Host, true) }.EncodePermissions(), PageTemplateModules = new List { @@ -472,8 +472,8 @@ namespace Oqtane.Repository ModuleDefinitionName = typeof(Oqtane.Modules.Admin.ModuleDefinitions.Index).ToModuleDefinitionName(), Title = "Module Management", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.HostRole, true), - new Permission(PermissionNames.Edit, Constants.HostRole, true) + new Permission(PermissionNames.View, RoleNames.Host, true), + new Permission(PermissionNames.Edit, RoleNames.Host, true) }.EncodePermissions(), Content = "" } @@ -484,8 +484,8 @@ namespace Oqtane.Repository Name = "Theme Management", Parent = "Admin", Path = "admin/themes", Icon = Icons.Brush, IsNavigation = false, IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.HostRole, true), - new Permission(PermissionNames.Edit, Constants.HostRole, true) + new Permission(PermissionNames.View, RoleNames.Host, true), + new Permission(PermissionNames.Edit, RoleNames.Host, true) }.EncodePermissions(), PageTemplateModules = new List { @@ -494,8 +494,8 @@ namespace Oqtane.Repository ModuleDefinitionName = typeof(Oqtane.Modules.Admin.Themes.Index).ToModuleDefinitionName(), Title = "Theme Management", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.HostRole, true), - new Permission(PermissionNames.Edit, Constants.HostRole, true) + new Permission(PermissionNames.View, RoleNames.Host, true), + new Permission(PermissionNames.Edit, RoleNames.Host, true) }.EncodePermissions(), Content = "" } @@ -506,8 +506,8 @@ namespace Oqtane.Repository Name = "Scheduled Jobs", Parent = "Admin", Path = "admin/jobs", Icon = Icons.Timer, IsNavigation = false, IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.HostRole, true), - new Permission(PermissionNames.Edit, Constants.HostRole, true) + new Permission(PermissionNames.View, RoleNames.Host, true), + new Permission(PermissionNames.Edit, RoleNames.Host, true) }.EncodePermissions(), PageTemplateModules = new List { @@ -516,8 +516,8 @@ namespace Oqtane.Repository ModuleDefinitionName = typeof(Oqtane.Modules.Admin.Jobs.Index).ToModuleDefinitionName(), Title = "Scheduled Jobs", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.HostRole, true), - new Permission(PermissionNames.Edit, Constants.HostRole, true) + new Permission(PermissionNames.View, RoleNames.Host, true), + new Permission(PermissionNames.Edit, RoleNames.Host, true) }.EncodePermissions(), Content = "" } @@ -533,8 +533,8 @@ namespace Oqtane.Repository IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.HostRole, true), - new Permission(PermissionNames.Edit, Constants.HostRole, true) + new Permission(PermissionNames.View, RoleNames.Host, true), + new Permission(PermissionNames.Edit, RoleNames.Host, true) }.EncodePermissions(), PageTemplateModules = new List { @@ -543,8 +543,8 @@ namespace Oqtane.Repository ModuleDefinitionName = typeof(Oqtane.Modules.Admin.Sql.Index).ToModuleDefinitionName(), Title = "Sql Management", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.HostRole, true), - new Permission(PermissionNames.Edit, Constants.HostRole, true) + new Permission(PermissionNames.View, RoleNames.Host, true), + new Permission(PermissionNames.Edit, RoleNames.Host, true) }.EncodePermissions(), Content = "" } @@ -560,8 +560,8 @@ namespace Oqtane.Repository IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.HostRole, true), - new Permission(PermissionNames.Edit, Constants.HostRole, true) + new Permission(PermissionNames.View, RoleNames.Host, true), + new Permission(PermissionNames.Edit, RoleNames.Host, true) }.EncodePermissions(), PageTemplateModules = new List { @@ -570,8 +570,8 @@ namespace Oqtane.Repository ModuleDefinitionName = typeof(Oqtane.Modules.Admin.SystemInfo.Index).ToModuleDefinitionName(), Title = "System Info", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.HostRole, true), - new Permission(PermissionNames.Edit, Constants.HostRole, true) + new Permission(PermissionNames.View, RoleNames.Host, true), + new Permission(PermissionNames.Edit, RoleNames.Host, true) }.EncodePermissions(), Content = "" } @@ -582,8 +582,8 @@ namespace Oqtane.Repository Name = "System Update", Parent = "Admin", Path = "admin/update", Icon = Icons.Aperture, IsNavigation = false, IsPersonalizable = false, PagePermissions = new List { - new Permission(PermissionNames.View, Constants.HostRole, true), - new Permission(PermissionNames.Edit, Constants.HostRole, true) + new Permission(PermissionNames.View, RoleNames.Host, true), + new Permission(PermissionNames.Edit, RoleNames.Host, true) }.EncodePermissions(), PageTemplateModules = new List { @@ -592,8 +592,8 @@ namespace Oqtane.Repository ModuleDefinitionName = typeof(Oqtane.Modules.Admin.Upgrade.Index).ToModuleDefinitionName(), Title = "System Update", Pane = "Content", ModulePermissions = new List { - new Permission(PermissionNames.View, Constants.HostRole, true), - new Permission(PermissionNames.Edit, Constants.HostRole, true) + new Permission(PermissionNames.View, RoleNames.Host, true), + new Permission(PermissionNames.Edit, RoleNames.Host, true) }.EncodePermissions(), Content = "" } @@ -640,18 +640,18 @@ namespace Oqtane.Repository { // create default entities for site List roles = _roleRepository.GetRoles(site.SiteId, true).ToList(); - if (!roles.Where(item => item.Name == Constants.AllUsersRole).Any()) + if (!roles.Where(item => item.Name == RoleNames.Everyone).Any()) { - _roleRepository.AddRole(new Role {SiteId = null, Name = Constants.AllUsersRole, Description = "All Users", IsAutoAssigned = false, IsSystem = true}); + _roleRepository.AddRole(new Role {SiteId = null, Name = RoleNames.Everyone, Description = "All Users", IsAutoAssigned = false, IsSystem = true}); } - if (!roles.Where(item => item.Name == Constants.HostRole).Any()) + if (!roles.Where(item => item.Name == RoleNames.Host).Any()) { - _roleRepository.AddRole(new Role {SiteId = null, Name = Constants.HostRole, Description = "Application Administrators", IsAutoAssigned = false, IsSystem = true}); + _roleRepository.AddRole(new Role {SiteId = null, Name = RoleNames.Host, Description = "Application Administrators", IsAutoAssigned = false, IsSystem = true}); } - _roleRepository.AddRole(new Role {SiteId = site.SiteId, Name = Constants.RegisteredRole, Description = "Registered Users", IsAutoAssigned = true, IsSystem = true}); - _roleRepository.AddRole(new Role {SiteId = site.SiteId, Name = Constants.AdminRole, Description = "Site Administrators", IsAutoAssigned = false, IsSystem = true}); + _roleRepository.AddRole(new Role {SiteId = site.SiteId, Name = RoleNames.Registered, Description = "Registered Users", IsAutoAssigned = true, IsSystem = true}); + _roleRepository.AddRole(new Role {SiteId = site.SiteId, Name = RoleNames.Admin, Description = "Site Administrators", IsAutoAssigned = false, IsSystem = true}); _profileRepository.AddProfile(new Profile {SiteId = site.SiteId, Name = "FirstName", Title = "First Name", Description = "Your First Or Given Name", Category = "Name", ViewOrder = 1, MaxLength = 50, DefaultValue = "", IsRequired = true, IsPrivate = false}); @@ -675,9 +675,9 @@ namespace Oqtane.Repository SiteId = site.SiteId, ParentId = null, Name = "Root", Path = "", Order = 1, IsSystem = true, Permissions = new List { - new Permission(PermissionNames.Browse, Constants.AdminRole, true), - new Permission(PermissionNames.View, Constants.AllUsersRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.Browse, RoleNames.Admin, true), + new Permission(PermissionNames.View, RoleNames.Everyone, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions() }); _folderRepository.AddFolder(new Folder @@ -685,9 +685,9 @@ namespace Oqtane.Repository SiteId = site.SiteId, ParentId = folder.FolderId, Name = "Users", Path = Utilities.PathCombine("Users",Path.DirectorySeparatorChar.ToString()), Order = 1, IsSystem = true, Permissions = new List { - new Permission(PermissionNames.Browse, Constants.AdminRole, true), - new Permission(PermissionNames.View, Constants.AdminRole, true), - new Permission(PermissionNames.Edit, Constants.AdminRole, true) + new Permission(PermissionNames.Browse, RoleNames.Admin, true), + new Permission(PermissionNames.View, RoleNames.Admin, true), + new Permission(PermissionNames.Edit, RoleNames.Admin, true) }.EncodePermissions() }); diff --git a/Oqtane.Server/Repository/TenantRepository.cs b/Oqtane.Server/Repository/TenantRepository.cs index 6c22ba75..7df0cbe2 100644 --- a/Oqtane.Server/Repository/TenantRepository.cs +++ b/Oqtane.Server/Repository/TenantRepository.cs @@ -40,7 +40,7 @@ namespace Oqtane.Repository { var oldTenant =_db.Tenant.AsNoTracking().FirstOrDefault(t=> t.TenantId == tenant.TenantId); - if (oldTenant != null && (oldTenant.Name.Equals(Constants.MasterTenant, StringComparison.OrdinalIgnoreCase) && !oldTenant.Name.Equals(tenant.Name))) + if (oldTenant != null && (oldTenant.Name.Equals(TenantNames.Master, StringComparison.OrdinalIgnoreCase) && !oldTenant.Name.Equals(tenant.Name))) { throw new InvalidOperationException("Unable to rename the master tenant."); } @@ -59,7 +59,7 @@ namespace Oqtane.Repository public void DeleteTenant(int tenantId) { var tenant = GetTenant(tenantId); - if (tenant != null && !tenant.Name.Equals(Constants.MasterTenant, StringComparison.OrdinalIgnoreCase)) + if (tenant != null && !tenant.Name.Equals(TenantNames.Master, StringComparison.OrdinalIgnoreCase)) { _db.Tenant.Remove(tenant); _db.SaveChanges(); diff --git a/Oqtane.Server/Security/ClaimsPrincipalFactory.cs b/Oqtane.Server/Security/ClaimsPrincipalFactory.cs index 1e945938..6ac81731 100644 --- a/Oqtane.Server/Security/ClaimsPrincipalFactory.cs +++ b/Oqtane.Server/Security/ClaimsPrincipalFactory.cs @@ -39,15 +39,15 @@ namespace Oqtane.Security { id.AddClaim(new Claim(_options.ClaimsIdentity.RoleClaimType, userrole.Role.Name)); // host users are members of every site - if (userrole.Role.Name == Constants.HostRole) + if (userrole.Role.Name == RoleNames.Host) { - if (userroles.Where(item => item.Role.Name == Constants.RegisteredRole).FirstOrDefault() == null) + if (userroles.Where(item => item.Role.Name == RoleNames.Registered).FirstOrDefault() == null) { - id.AddClaim(new Claim(_options.ClaimsIdentity.RoleClaimType, Constants.RegisteredRole)); + id.AddClaim(new Claim(_options.ClaimsIdentity.RoleClaimType, RoleNames.Registered)); } - if (userroles.Where(item => item.Role.Name == Constants.AdminRole).FirstOrDefault() == null) + if (userroles.Where(item => item.Role.Name == RoleNames.Admin).FirstOrDefault() == null) { - id.AddClaim(new Claim(_options.ClaimsIdentity.RoleClaimType, Constants.AdminRole)); + id.AddClaim(new Claim(_options.ClaimsIdentity.RoleClaimType, RoleNames.Admin)); } } } diff --git a/Oqtane.Server/Startup.cs b/Oqtane.Server/Startup.cs index 396e6602..2cff1aa0 100644 --- a/Oqtane.Server/Startup.cs +++ b/Oqtane.Server/Startup.cs @@ -27,21 +27,23 @@ namespace Oqtane { public class Startup { - private static readonly string[] DefaultSupportedCultures = new[] { Constants.DefaultCulture }; - private string _webRoot; private Runtime _runtime; private bool _useSwagger; + private IWebHostEnvironment _env; + private string[] _supportedCultures; public IConfigurationRoot Configuration { get; } - public Startup(IWebHostEnvironment env) + public Startup(IWebHostEnvironment env, ILocalizationManager localizationManager) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); Configuration = builder.Build(); + _supportedCultures = localizationManager.GetSupportedCultures(); + _runtime = (Configuration.GetSection("Runtime").Value == "WebAssembly") ? Runtime.WebAssembly : Runtime.Server; //add possibility to switch off swagger on production. @@ -49,6 +51,8 @@ namespace Oqtane _webRoot = env.WebRootPath; AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(env.ContentRootPath, "Data")); + + _env = env; } // This method gets called by the runtime. Use this method to add services to the container. @@ -58,7 +62,13 @@ namespace Oqtane // Register localization services services.AddLocalization(options => options.ResourcesPath = "Resources"); - services.AddServerSideBlazor(); + services.AddServerSideBlazor().AddCircuitOptions(options => + { + if (_env.IsDevelopment()) + { + options.DetailedErrors = true; + } + }); // setup HttpClient for server side in a client side compatible fashion ( with auth cookie ) if (!services.Any(x => x.ServiceType == typeof(HttpClient))) @@ -132,11 +142,6 @@ namespace Oqtane .AddSignInManager() .AddDefaultTokenProviders(); - var localizationSection = Configuration.GetSection("Localization"); - var localizationOptions = localizationSection.Get(); - - services.Configure(localizationSection); - services.Configure(options => { // Password settings @@ -210,10 +215,7 @@ namespace Oqtane services.AddTransient(); // load the external assemblies into the app domain, install services - services.AddOqtane(_runtime, - localizationOptions.SupportedCultures.IsNullOrEmpty() - ? DefaultSupportedCultures - : localizationOptions.SupportedCultures); + services.AddOqtane(_runtime, _supportedCultures); services.AddMvc() .AddNewtonsoftJson() @@ -229,6 +231,8 @@ namespace Oqtane // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { + ServiceActivator.Configure(app.ApplicationServices); + if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); diff --git a/Oqtane.Server/wwwroot/Modules/Templates/External/Server/[Owner].[Module].Server.csproj b/Oqtane.Server/wwwroot/Modules/Templates/External/Server/[Owner].[Module].Server.csproj index 60db0e22..21883a65 100644 --- a/Oqtane.Server/wwwroot/Modules/Templates/External/Server/[Owner].[Module].Server.csproj +++ b/Oqtane.Server/wwwroot/Modules/Templates/External/Server/[Owner].[Module].Server.csproj @@ -31,7 +31,7 @@ - [ServerReference] - [SharedReference] + + diff --git a/Oqtane.Server/wwwroot/Modules/Templates/Internal/Oqtane.Server/Modules/[Owner].[Module]/Controllers/[Module]Controller.cs b/Oqtane.Server/wwwroot/Modules/Templates/Internal/Oqtane.Server/Modules/[Owner].[Module]/Controllers/[Module]Controller.cs index c8fe7485..3e2fe7b8 100644 --- a/Oqtane.Server/wwwroot/Modules/Templates/Internal/Oqtane.Server/Modules/[Owner].[Module]/Controllers/[Module]Controller.cs +++ b/Oqtane.Server/wwwroot/Modules/Templates/Internal/Oqtane.Server/Modules/[Owner].[Module]/Controllers/[Module]Controller.cs @@ -10,7 +10,7 @@ using [Owner].[Module].Repository; namespace [Owner].[Module].Controllers { - [Route("{alias}/api/[controller]")] + [Route(ControllerRoutes.Default)] public class [Module]Controller : Controller { private readonly I[Module]Repository _[Module]Repository; @@ -30,7 +30,7 @@ namespace [Owner].[Module].Controllers // GET: api/?moduleid=x [HttpGet] - [Authorize(Policy = "ViewModule")] + [Authorize(Policy = PolicyNames.ViewModule)] public IEnumerable Get(string moduleid) { return _[Module]Repository.Get[Module]s(int.Parse(moduleid)); @@ -38,7 +38,7 @@ namespace [Owner].[Module].Controllers // GET api//5 [HttpGet("{id}")] - [Authorize(Policy = "ViewModule")] + [Authorize(Policy = PolicyNames.ViewModule)] public Models.[Module] Get(int id) { Models.[Module] [Module] = _[Module]Repository.Get[Module](id); @@ -51,7 +51,7 @@ namespace [Owner].[Module].Controllers // POST api/ [HttpPost] - [Authorize(Policy = "EditModule")] + [Authorize(Policy = PolicyNames.EditModule)] public Models.[Module] Post([FromBody] Models.[Module] [Module]) { if (ModelState.IsValid && [Module].ModuleId == _entityId) @@ -64,7 +64,7 @@ namespace [Owner].[Module].Controllers // PUT api//5 [HttpPut("{id}")] - [Authorize(Policy = "EditModule")] + [Authorize(Policy = PolicyNames.EditModule)] public Models.[Module] Put(int id, [FromBody] Models.[Module] [Module]) { if (ModelState.IsValid && [Module].ModuleId == _entityId) @@ -77,7 +77,7 @@ namespace [Owner].[Module].Controllers // DELETE api//5 [HttpDelete("{id}")] - [Authorize(Policy = "EditModule")] + [Authorize(Policy = PolicyNames.EditModule)] public void Delete(int id) { Models.[Module] [Module] = _[Module]Repository.Get[Module](id); diff --git a/Oqtane.Shared/Documentation/InternalApi.cs b/Oqtane.Shared/Documentation/InternalApi.cs new file mode 100644 index 00000000..be660f77 --- /dev/null +++ b/Oqtane.Shared/Documentation/InternalApi.cs @@ -0,0 +1,28 @@ +using System; + +namespace Oqtane.Documentation +{ + /// + /// This attribute serves as metadata for other things to mark them as internal APIs. + /// Use this on stuff you want to document publicly, but mark as internal so people are warned + /// + [AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = false)] + [PublicApi] + // ReSharper disable once InconsistentNaming + public class InternalApi_DoNotUse_MayChangeWithoutNotice: Attribute + { + /// + /// The `[InternalApi_DoNotUse_MayChangeWithoutNotice]` attribute can be used without additional comment. + /// + // Important note - this constructor looks unnecessary, because comment is optional in the other constructor + // but we need it because of a minor issue in docfx + public InternalApi_DoNotUse_MayChangeWithoutNotice() { } + + /// + /// Constructor with optional comment `[InternalApi_DoNotUse_MayChangeWithoutNotice(some-comment)]`. + /// + /// Reason why it's internal, optional + public InternalApi_DoNotUse_MayChangeWithoutNotice(string comment) { } + + } +} diff --git a/Oqtane.Shared/Documentation/PrivateApi.cs b/Oqtane.Shared/Documentation/PrivateApi.cs new file mode 100644 index 00000000..decd0c24 --- /dev/null +++ b/Oqtane.Shared/Documentation/PrivateApi.cs @@ -0,0 +1,27 @@ +using System; + +namespace Oqtane.Documentation +{ + /// + /// This attribute marks classes, methods, etc. as private APIs + /// So they should _not_ be publicly documented. + /// By default, all APIs are private, so you only need this attribute on children of classes marked with `[PublicApi]`. + /// + [AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = false)] + [PublicApi] + public class PrivateApi: Attribute + { + /// + /// The `[PrivateApi]` attribute can be used without additional comment. + /// + // Important note - this constructor looks unnecessary, because comment could be optional in the other constructor + // but we need it because of a minor issue in docfx + public PrivateApi() { } + + /// + /// Constructor with optional comment `[PrivateApi(some-comment)]`. + /// + /// Reason why it's private, optional + public PrivateApi(string comment) { } + } +} diff --git a/Oqtane.Shared/Documentation/PublicApi.cs b/Oqtane.Shared/Documentation/PublicApi.cs new file mode 100644 index 00000000..0c84a785 --- /dev/null +++ b/Oqtane.Shared/Documentation/PublicApi.cs @@ -0,0 +1,27 @@ +using System; + +namespace Oqtane.Documentation +{ + /// + /// This attribute marks classes, properties etc. as public APIs. + /// Any API / code with this attribute will be published in the docs. + /// You can apply it to anything, but usually you will only need it on classes. + /// + [AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = false)] + [PublicApi] + public class PublicApi: Attribute + { + /// + /// The `[PublicApi]` attribute can usually be used without additional comment. + /// + // Important note - this constructor looks unnecessary, because comment could be optional in the other constructor + // but we need it because of a minor issue in docfx + public PublicApi() { } + + /// + /// Constructor with optional comment `[PublicApi(some-comment)]` + /// + /// Reason why it's public, optional + public PublicApi(string comment) { } + } +} diff --git a/Oqtane.Shared/Documentation/WorkInProgressApi.cs b/Oqtane.Shared/Documentation/WorkInProgressApi.cs new file mode 100644 index 00000000..c4ed0d88 --- /dev/null +++ b/Oqtane.Shared/Documentation/WorkInProgressApi.cs @@ -0,0 +1,18 @@ +using System; + +namespace Oqtane.Documentation +{ + /// + /// This attribute marks APIs to be publicly documented with a clear warning that it's work in progress. + /// + [AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = false)] + [PublicApi] + public class WorkInProgressApi: Attribute + { + /// + /// The `[WorkInProgressApi(some-comment)]` attributes must always have a comment why they are WIP. + /// + /// Reason why it's WIP, required + public WorkInProgressApi(string comment) { } + } +} diff --git a/Oqtane.Shared/Documentation/readme.md b/Oqtane.Shared/Documentation/readme.md new file mode 100644 index 00000000..cd55726a --- /dev/null +++ b/Oqtane.Shared/Documentation/readme.md @@ -0,0 +1,7 @@ +# Oqtane API Decorator Attributes + +This folder contains special attributes for the API Code Generator. + +The idea is that only items marked with special attributes are valide public APIs, and only these will be documented in the public docs + +As of 2020, all APIs are documented, and only these marked as `[PrivateApi]` will be excluded. In future, we may reverse this to only document things marked as `[PublicApi]`. \ No newline at end of file diff --git a/Oqtane.Shared/Security/UserSecurity.cs b/Oqtane.Shared/Security/UserSecurity.cs index a8e85304..ec2d0db0 100644 --- a/Oqtane.Shared/Security/UserSecurity.cs +++ b/Oqtane.Shared/Security/UserSecurity.cs @@ -85,14 +85,14 @@ namespace Oqtane.Security if (permission.StartsWith("!")) { string denyRole = permission.Replace("!", ""); - if (denyRole == Constants.AllUsersRole || IsAllowed(userId, roles, denyRole)) + if (denyRole == RoleNames.Everyone || IsAllowed(userId, roles, denyRole)) { allowed = false; } } else // grant permission { - if (permission == Constants.AllUsersRole || IsAllowed(userId, roles, permission)) + if (permission == RoleNames.Everyone || IsAllowed(userId, roles, permission)) { allowed = true; } diff --git a/Oqtane.Shared/Shared/Constants.cs b/Oqtane.Shared/Shared/Constants.cs index db62f416..c065f347 100644 --- a/Oqtane.Shared/Shared/Constants.cs +++ b/Oqtane.Shared/Shared/Constants.cs @@ -1,10 +1,9 @@ using System; using System.Globalization; -namespace Oqtane.Shared -{ - public class Constants - { +namespace Oqtane.Shared { + + public class Constants { public const string PackageId = "Oqtane.Framework"; public const string Version = "1.0.4"; public const string ReleaseVersions = "1.0.0,1.0.1,1.0.2,1.0.3,1.0.4"; @@ -19,7 +18,9 @@ namespace Oqtane.Shared public const string ActionToken = "{Action}"; public const string DefaultAction = "Index"; - public const string AdminPane = "Admin"; + + [Obsolete("Use PaneNames.Admin")] + public const string AdminPane = PaneNames.Admin; public const string ModuleDelimiter = "*"; public const string UrlParametersDelimiter = "!"; @@ -36,15 +37,23 @@ namespace Oqtane.Shared public const string ContentUrl = "/api/file/download/"; - public const string HostUser = "host"; + [Obsolete("Use UserNames.Host instead.")] + public const string HostUser = UserNames.Host; - public const string MasterTenant = "Master"; + [Obsolete("Use TenantNames.Master instead")] + public const string MasterTenant = TenantNames.Master; public const string DefaultSite = "Default Site"; - public const string AllUsersRole = "All Users"; - public const string HostRole = "Host Users"; - public const string AdminRole = "Administrators"; - public const string RegisteredRole = "Registered Users"; + const string RoleObsoleteMessage = "Use the corresponding memeber from Oqtane.Shared.RoleNames"; + + [Obsolete(RoleObsoleteMessage)] + public const string AllUsersRole = RoleNames.Everyone; + [Obsolete(RoleObsoleteMessage)] + public const string HostRole = RoleNames.Host; + [Obsolete(RoleObsoleteMessage)] + public const string AdminRole = RoleNames.Admin; + [Obsolete(RoleObsoleteMessage)] + public const string RegisteredRole = RoleNames.Registered; public const string ImageFiles = "jpg,jpeg,jpe,gif,bmp,png,svg,ico"; public const string UploadableFiles = "jpg,jpeg,jpe,gif,bmp,png,svg,ico,mov,wmv,avi,mp4,mp3,doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,nupkg,csv"; diff --git a/Oqtane.Shared/Shared/ControllerRoutes.cs b/Oqtane.Shared/Shared/ControllerRoutes.cs new file mode 100644 index 00000000..07e170f3 --- /dev/null +++ b/Oqtane.Shared/Shared/ControllerRoutes.cs @@ -0,0 +1,9 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Oqtane.Shared { + public class ControllerRoutes { + public const string Default = "{alias}/api/[controller]"; + } +} diff --git a/Oqtane.Shared/Shared/PaneNames.cs b/Oqtane.Shared/Shared/PaneNames.cs new file mode 100644 index 00000000..063924f9 --- /dev/null +++ b/Oqtane.Shared/Shared/PaneNames.cs @@ -0,0 +1,9 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Oqtane.Shared { + public class PaneNames { + public const string Admin = "Admin"; + } +} diff --git a/Oqtane.Shared/Shared/PolicyNames.cs b/Oqtane.Shared/Shared/PolicyNames.cs new file mode 100644 index 00000000..71e27a8d --- /dev/null +++ b/Oqtane.Shared/Shared/PolicyNames.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Oqtane.Shared { + public class PolicyNames { + public const string ViewModule = "ViewModule"; + public const string EditModule = "EditModule"; + } +} diff --git a/Oqtane.Shared/Shared/RoleNames.cs b/Oqtane.Shared/Shared/RoleNames.cs new file mode 100644 index 00000000..f526d613 --- /dev/null +++ b/Oqtane.Shared/Shared/RoleNames.cs @@ -0,0 +1,8 @@ +namespace Oqtane.Shared { + public class RoleNames { + public const string Everyone = "All Users"; + public const string Host = "Host Users"; + public const string Admin = "Administrators"; + public const string Registered = "Registered Users"; + } +} diff --git a/Oqtane.Shared/Shared/TenantNames.cs b/Oqtane.Shared/Shared/TenantNames.cs new file mode 100644 index 00000000..057235fd --- /dev/null +++ b/Oqtane.Shared/Shared/TenantNames.cs @@ -0,0 +1,9 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Oqtane.Shared { + public class TenantNames { + public const string Master = "Master"; + } +} diff --git a/Oqtane.Shared/Shared/UserNames.cs b/Oqtane.Shared/Shared/UserNames.cs new file mode 100644 index 00000000..fdb83800 --- /dev/null +++ b/Oqtane.Shared/Shared/UserNames.cs @@ -0,0 +1,9 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Oqtane.Shared { + public class UserNames { + public const string Host = "host"; + } +} diff --git a/README.md b/README.md index 24ec4eea..e9e2a140 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ Future Consideration - [ ] DB Migrations for framework installation/upgrade - [ ] Support for SQLite - [ ] Generic Repository Pattern -- [ ] JwT token authentication ( possibly using IdentityServer ) +- [ ] Support for other Auth providers - [ ] Optional Encryption for Settings Values # Background