Support for third party modules, improved error handling, standardardized enum naming, reorganized interface definitions, support for DB script upgrades, added Settings entity
This commit is contained in:
		| @ -42,50 +42,51 @@ | ||||
| </AuthorizeView> | ||||
|  | ||||
| @code { | ||||
| public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Anonymous; } } | ||||
|     public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Anonymous; } } | ||||
|  | ||||
| public string Message { get; set; } = ""; | ||||
| public string Username { get; set; } = ""; | ||||
| public string Password { get; set; } = ""; | ||||
| public bool Remember { get; set; } = false; | ||||
|     public string Message { get; set; } = ""; | ||||
|     public string Username { get; set; } = ""; | ||||
|     public string Password { get; set; } = ""; | ||||
|     public bool Remember { get; set; } = false; | ||||
|  | ||||
| private async Task Login() | ||||
| { | ||||
|     User user = new User(); | ||||
|     user.Username = Username; | ||||
|     user.Password = Password; | ||||
|     user.IsPersistent = Remember; | ||||
|     user = await UserService.LoginUserAsync(user); | ||||
|     if (user.IsAuthenticated) | ||||
|     private async Task Login() | ||||
|     { | ||||
|         string ReturnUrl = PageState.QueryString["returnurl"]; | ||||
|  | ||||
|         var authstateprovider = (IdentityAuthenticationStateProvider)ServiceProvider.GetService(typeof(IdentityAuthenticationStateProvider)); | ||||
|         if (authstateprovider == null) | ||||
|         User user = new User(); | ||||
|         user.SiteId = PageState.Site.SiteId; | ||||
|         user.Username = Username; | ||||
|         user.Password = Password; | ||||
|         user.IsPersistent = Remember; | ||||
|         user = await UserService.LoginUserAsync(user); | ||||
|         if (user.IsAuthenticated) | ||||
|         { | ||||
|             // server-side Blazor | ||||
|             var interop = new Interop(jsRuntime); | ||||
|             string antiforgerytoken = await interop.GetElementByName("__RequestVerificationToken"); | ||||
|             var fields = new { __RequestVerificationToken = antiforgerytoken, username = Username, password = Password, remember = Remember, returnurl = ReturnUrl }; | ||||
|             await interop.SubmitForm("/login/", fields); | ||||
|             string ReturnUrl = PageState.QueryString["returnurl"]; | ||||
|  | ||||
|             var authstateprovider = (IdentityAuthenticationStateProvider)ServiceProvider.GetService(typeof(IdentityAuthenticationStateProvider)); | ||||
|             if (authstateprovider == null) | ||||
|             { | ||||
|                 // server-side Blazor | ||||
|                 var interop = new Interop(jsRuntime); | ||||
|                 string antiforgerytoken = await interop.GetElementByName("__RequestVerificationToken"); | ||||
|                 var fields = new { __RequestVerificationToken = antiforgerytoken, username = Username, password = Password, remember = Remember, returnurl = ReturnUrl }; | ||||
|                 await interop.SubmitForm("/login/", fields); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 // client-side Blazor | ||||
|                 authstateprovider.NotifyAuthenticationChanged(); | ||||
|                 PageState.Reload = Constants.ReloadPage; | ||||
|                 UriHelper.NavigateTo(NavigateUrl(ReturnUrl)); | ||||
|             } | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             // client-side Blazor | ||||
|             authstateprovider.NotifyAuthenticationChanged(); | ||||
|             PageState.Reload = Constants.ReloadPage; | ||||
|             UriHelper.NavigateTo(NavigateUrl(ReturnUrl)); | ||||
|             Message = "<div class=\"alert alert-danger\" role=\"alert\">Login Failed. Please Remember That Passwords Are Case Sensitive.</div>"; | ||||
|         } | ||||
|     } | ||||
|     else | ||||
|  | ||||
|     private void Cancel() | ||||
|     { | ||||
|         Message = "<div class=\"alert alert-danger\" role=\"alert\">Login Failed. Please Remember That Passwords Are Case Sensitive.</div>"; | ||||
|         string ReturnUrl = PageState.QueryString["returnurl"]; | ||||
|         UriHelper.NavigateTo(ReturnUrl); | ||||
|     } | ||||
| } | ||||
|  | ||||
| private void Cancel() | ||||
| { | ||||
|     string ReturnUrl = PageState.QueryString["returnurl"]; | ||||
|     UriHelper.NavigateTo(ReturnUrl); | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -30,7 +30,7 @@ else | ||||
| } | ||||
|  | ||||
| @code { | ||||
|     public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Host; } } | ||||
|     public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Host; } } | ||||
|  | ||||
|     List<ModuleDefinition> moduledefinitions; | ||||
|  | ||||
|  | ||||
| @ -63,11 +63,15 @@ | ||||
|         </td> | ||||
|     </tr> | ||||
| </table> | ||||
|  | ||||
| @DynamicComponent | ||||
|  | ||||
| <button type="button" class="btn btn-success" @onclick="@SaveModule">Save</button> | ||||
| <NavLink class="btn btn-secondary" href="@NavigateUrl()">Cancel</NavLink> | ||||
|  | ||||
|  | ||||
| @code { | ||||
|     public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Edit; } } | ||||
|     public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Edit; } } | ||||
|     public override string Title { get { return "Module Settings"; } } | ||||
|  | ||||
|     Dictionary<string, string> containers = new Dictionary<string, string>(); | ||||
| @ -77,6 +81,9 @@ | ||||
|     string editpermissions; | ||||
|     string pageid; | ||||
|  | ||||
|     RenderFragment DynamicComponent { get; set; } | ||||
|     object settings; | ||||
|  | ||||
|     protected override async Task OnInitAsync() | ||||
|     { | ||||
|         title = ModuleState.Title; | ||||
| @ -85,6 +92,17 @@ | ||||
|         viewpermissions = ModuleState.ViewPermissions; | ||||
|         editpermissions = ModuleState.EditPermissions; | ||||
|         pageid = ModuleState.PageId.ToString(); | ||||
|  | ||||
|         DynamicComponent = builder => | ||||
|         { | ||||
|             Type moduleType = Type.GetType(ModuleState.ModuleType); | ||||
|             if (moduleType != null) | ||||
|             { | ||||
|                 builder.OpenComponent(0, moduleType); | ||||
|                 builder.AddComponentReferenceCapture(1, inst => { settings = Convert.ChangeType(inst, moduleType); }); | ||||
|                 builder.CloseComponent(); | ||||
|             } | ||||
|         }; | ||||
|     } | ||||
|  | ||||
|     private async Task SaveModule() | ||||
| @ -94,17 +112,19 @@ | ||||
|         module.EditPermissions = editpermissions; | ||||
|         await ModuleService.UpdateModuleAsync(module); | ||||
|  | ||||
|         PageModule pagemodule = new PageModule(); | ||||
|         pagemodule.PageModuleId = ModuleState.PageModuleId; | ||||
|         pagemodule.PageId = Int32.Parse(pageid); | ||||
|         pagemodule.ModuleId = ModuleState.ModuleId; | ||||
|         PageModule pagemodule = await PageModuleService.GetPageModuleAsync(ModuleState.PageModuleId); | ||||
|         pagemodule.Title = title; | ||||
|         pagemodule.Pane = ModuleState.Pane; | ||||
|         pagemodule.Order = ModuleState.Order; | ||||
|         pagemodule.ContainerType = containertype; | ||||
|         await PageModuleService.UpdatePageModuleAsync(pagemodule); | ||||
|  | ||||
|         Type moduleType = Type.GetType(ModuleState.ModuleType); | ||||
|         if (moduleType != null) | ||||
|         { | ||||
|             moduleType.GetMethod("UpdateSettings").Invoke(settings, null); // method must be public in settings component | ||||
|         } | ||||
|  | ||||
|         PageState.Reload = Constants.ReloadPage; | ||||
|         UriHelper.NavigateTo(NavigateUrl()); | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
| @ -115,7 +115,7 @@ | ||||
| <NavLink class="btn btn-secondary" href="@NavigateUrl()">Cancel</NavLink> | ||||
|  | ||||
| @code { | ||||
|     public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Admin; } } | ||||
|     public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Admin; } } | ||||
|  | ||||
|     Dictionary<string, string> themes = new Dictionary<string, string>(); | ||||
|     Dictionary<string, string> panelayouts = new Dictionary<string, string>(); | ||||
|  | ||||
| @ -115,7 +115,7 @@ | ||||
| <NavLink class="btn btn-secondary" href="@NavigateUrl()">Cancel</NavLink> | ||||
|  | ||||
| @code { | ||||
|     public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Admin; } } | ||||
|     public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Admin; } } | ||||
|  | ||||
|     Dictionary<string, string> themes = new Dictionary<string, string>(); | ||||
|     Dictionary<string, string> panelayouts = new Dictionary<string, string>(); | ||||
|  | ||||
| @ -116,7 +116,7 @@ | ||||
| <NavLink class="btn btn-secondary" href="@NavigateUrl()">Cancel</NavLink> | ||||
|  | ||||
| @code { | ||||
|     public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Admin; } } | ||||
|     public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Admin; } } | ||||
|  | ||||
|     Dictionary<string, string> themes = new Dictionary<string, string>(); | ||||
|     Dictionary<string, string> panelayouts = new Dictionary<string, string>(); | ||||
|  | ||||
| @ -36,5 +36,5 @@ else | ||||
| } | ||||
|  | ||||
| @code { | ||||
|     public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Admin; } } | ||||
|     public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Admin; } } | ||||
| } | ||||
| @ -20,7 +20,7 @@ | ||||
| </div> | ||||
|  | ||||
| @code { | ||||
|     public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Anonymous; } } | ||||
|     public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Anonymous; } } | ||||
|  | ||||
|     public string Username { get; set; } = ""; | ||||
|     public string Password { get; set; } = ""; | ||||
| @ -28,6 +28,7 @@ | ||||
|     private async Task RegisterUser() | ||||
|     { | ||||
|         User user = new User(); | ||||
|         user.SiteId = PageState.Site.SiteId; | ||||
|         user.Username = Username; | ||||
|         user.DisplayName = Username; | ||||
|         user.Roles = "Administrators;"; | ||||
|  | ||||
| @ -60,7 +60,7 @@ else | ||||
| } | ||||
|  | ||||
| @code { | ||||
|     public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Host; } } | ||||
|     public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Host; } } | ||||
|  | ||||
|     List<Tenant> tenants; | ||||
|     string tenantid; | ||||
|  | ||||
| @ -31,7 +31,7 @@ else | ||||
| } | ||||
|  | ||||
| @code { | ||||
|     public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Host; } } | ||||
|     public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Host; } } | ||||
|  | ||||
|     List<Site> sites; | ||||
|  | ||||
|  | ||||
| @ -29,7 +29,7 @@ else | ||||
| } | ||||
|  | ||||
| @code { | ||||
|     public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Host; } } | ||||
|     public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Host; } } | ||||
|  | ||||
|     List<Theme> Themes; | ||||
|  | ||||
|  | ||||
| @ -30,7 +30,7 @@ else | ||||
| } | ||||
|  | ||||
| @code { | ||||
|     public override SecurityAccessLevelEnum SecurityAccessLevel { get { return SecurityAccessLevelEnum.Host; } } | ||||
|     public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Host; } } | ||||
|  | ||||
|     List<User> Users; | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Shaun Walker
					Shaun Walker