diff --git a/Oqtane.Server/Controllers/ModuleDefinitionController.cs b/Oqtane.Server/Controllers/ModuleDefinitionController.cs index 8e3dd4ac..0dbd21e4 100644 --- a/Oqtane.Server/Controllers/ModuleDefinitionController.cs +++ b/Oqtane.Server/Controllers/ModuleDefinitionController.cs @@ -37,11 +37,11 @@ namespace Oqtane.Controllers // GET api//filename [HttpGet("{filename}")] - public IActionResult Get(string filename) + public IActionResult Get(string assemblyname) { string binfolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); - byte[] file = System.IO.File.ReadAllBytes(Path.Combine(binfolder, filename)); - return File(file, "application/octet-stream", filename); + byte[] file = System.IO.File.ReadAllBytes(Path.Combine(binfolder, assemblyname)); + return File(file, "application/octet-stream", assemblyname); } // PUT api//5 diff --git a/Oqtane.Server/Infrastructure/LogManager.cs b/Oqtane.Server/Infrastructure/LogManager.cs index 319cf3aa..30768523 100644 --- a/Oqtane.Server/Infrastructure/LogManager.cs +++ b/Oqtane.Server/Infrastructure/LogManager.cs @@ -51,7 +51,7 @@ namespace Oqtane.Infrastructure log.Level = Enum.GetName(typeof(LogLevel), Level); if (Exception != null) { - log.Exception = JsonSerializer.Serialize(Exception); + log.Exception = JsonSerializer.Serialize(Exception.ToString()); } log.Message = Message; log.MessageTemplate = ""; diff --git a/Oqtane.Server/Modules/HtmlText/Controllers/HtmlTextController.cs b/Oqtane.Server/Modules/HtmlText/Controllers/HtmlTextController.cs index 1f78f57d..cf9d212f 100644 --- a/Oqtane.Server/Modules/HtmlText/Controllers/HtmlTextController.cs +++ b/Oqtane.Server/Modules/HtmlText/Controllers/HtmlTextController.cs @@ -5,6 +5,7 @@ using Oqtane.Modules.HtmlText.Repository; using Microsoft.AspNetCore.Http; using Oqtane.Infrastructure; using Oqtane.Shared; +using System; namespace Oqtane.Modules.HtmlText.Controllers { @@ -30,12 +31,20 @@ namespace Oqtane.Modules.HtmlText.Controllers [Authorize(Policy = "ViewModule")] public HtmlTextInfo Get(int id) { - HtmlTextInfo HtmlText = null; - if (EntityId == id) + try { - HtmlText = htmltext.GetHtmlText(id); + HtmlTextInfo HtmlText = null; + if (EntityId == id) + { + HtmlText = htmltext.GetHtmlText(id); + } + return HtmlText; + } + catch (Exception ex) + { + logger.AddLog(this.GetType().FullName, LogLevel.Error, ex, "Get Error {Error}", ex.Message); + throw; } - return HtmlText; } // POST api/ @@ -43,12 +52,20 @@ namespace Oqtane.Modules.HtmlText.Controllers [Authorize(Policy = "EditModule")] public HtmlTextInfo Post([FromBody] HtmlTextInfo HtmlText) { - if (ModelState.IsValid && HtmlText.ModuleId == EntityId) + try { - HtmlText = htmltext.AddHtmlText(HtmlText); - logger.AddLog(this.GetType().FullName, LogLevel.Information, "Html/Text Added {HtmlText}", HtmlText); + if (ModelState.IsValid && HtmlText.ModuleId == EntityId) + { + HtmlText = htmltext.AddHtmlText(HtmlText); + logger.AddLog(this.GetType().FullName, LogLevel.Information, "Html/Text Added {HtmlText}", HtmlText); + } + return HtmlText; + } + catch (Exception ex) + { + logger.AddLog(this.GetType().FullName, LogLevel.Error, ex, "Post Error {Error}", ex.Message); + throw; } - return HtmlText; } // PUT api//5 @@ -56,12 +73,20 @@ namespace Oqtane.Modules.HtmlText.Controllers [Authorize(Policy = "EditModule")] public HtmlTextInfo Put(int id, [FromBody] HtmlTextInfo HtmlText) { - if (ModelState.IsValid && HtmlText.ModuleId == EntityId) + try { - HtmlText = htmltext.UpdateHtmlText(HtmlText); - logger.AddLog(this.GetType().FullName, LogLevel.Information, "Html/Text Updated {HtmlText}", HtmlText); + if (ModelState.IsValid && HtmlText.ModuleId == EntityId) + { + HtmlText = htmltext.UpdateHtmlText(HtmlText); + logger.AddLog(this.GetType().FullName, LogLevel.Information, "Html/Text Updated {HtmlText}", HtmlText); + } + return HtmlText; + } + catch (Exception ex) + { + logger.AddLog(this.GetType().FullName, LogLevel.Error, ex, "Put Error {Error}", ex.Message); + throw; } - return HtmlText; } // DELETE api//5 @@ -69,10 +94,18 @@ namespace Oqtane.Modules.HtmlText.Controllers [Authorize(Policy = "EditModule")] public void Delete(int id) { - if (id == EntityId) + try { - htmltext.DeleteHtmlText(id); - logger.AddLog(this.GetType().FullName, LogLevel.Information, "Html/Text Deleted {HtmlTextId}", id); + if (id == EntityId) + { + htmltext.DeleteHtmlText(id); + logger.AddLog(this.GetType().FullName, LogLevel.Information, "Html/Text Deleted {HtmlTextId}", id); + } + } + catch (Exception ex) + { + logger.AddLog(this.GetType().FullName, LogLevel.Error, ex, "Delete Error {Error}", ex.Message); + throw; } } } diff --git a/Oqtane.Server/Repository/TenantResolver.cs b/Oqtane.Server/Repository/TenantResolver.cs index 59969dc3..30eb7c19 100644 --- a/Oqtane.Server/Repository/TenantResolver.cs +++ b/Oqtane.Server/Repository/TenantResolver.cs @@ -10,39 +10,49 @@ namespace Oqtane.Repository { private MasterDBContext db; private readonly string aliasname; - private readonly IAliasRepository _aliasrepository; - private readonly ITenantRepository _tenantrepository; + private readonly IAliasRepository Aliases; + private readonly ITenantRepository Tenants; - public TenantResolver(MasterDBContext context, IHttpContextAccessor accessor, IAliasRepository aliasrepository, ITenantRepository tenantrepository) + public TenantResolver(MasterDBContext context, IHttpContextAccessor accessor, IAliasRepository Aliases, ITenantRepository Tenants) { db = context; - _aliasrepository = aliasrepository; - _tenantrepository = tenantrepository; + this.Aliases = Aliases; + this.Tenants = Tenants; + aliasname = ""; // get alias based on request context - aliasname = accessor.HttpContext.Request.Host.Value; - string path = accessor.HttpContext.Request.Path.Value; - string[] segments = path.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); - if (segments.Length > 1 && segments[1] == "api" && segments[0] != "~") + if (accessor.HttpContext != null) { - aliasname += "/" + segments[0]; - } - if (aliasname.EndsWith("/")) - { - aliasname = aliasname.Substring(0, aliasname.Length - 1); + aliasname = accessor.HttpContext.Request.Host.Value; + string path = accessor.HttpContext.Request.Path.Value; + string[] segments = path.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); + if (segments.Length > 1 && segments[1] == "api" && segments[0] != "~") + { + aliasname += "/" + segments[0]; + } + if (aliasname.EndsWith("/")) + { + aliasname = aliasname.Substring(0, aliasname.Length - 1); + } } } public Alias GetAlias() { - IEnumerable aliases = _aliasrepository.GetAliases(); // cached + IEnumerable aliases = Aliases.GetAliases(); // cached return aliases.Where(item => item.Name == aliasname).FirstOrDefault(); } public Tenant GetTenant() { - IEnumerable tenants = _tenantrepository.GetTenants(); // cached - return tenants.Where(item => item.TenantId == GetAlias().TenantId).FirstOrDefault(); + Tenant tenant = null; + Alias alias = GetAlias(); + if (alias != null) + { + IEnumerable tenants = Tenants.GetTenants(); // cached + tenant = tenants.Where(item => item.TenantId == alias.TenantId).FirstOrDefault(); + } + return tenant; } } } \ No newline at end of file diff --git a/Oqtane.Server/Security/PermissionHandler.cs b/Oqtane.Server/Security/PermissionHandler.cs index 8332900d..2cecd76d 100644 --- a/Oqtane.Server/Security/PermissionHandler.cs +++ b/Oqtane.Server/Security/PermissionHandler.cs @@ -1,7 +1,8 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; - +using Oqtane.Infrastructure; +using Oqtane.Shared; namespace Oqtane.Security { @@ -9,11 +10,13 @@ namespace Oqtane.Security { private readonly IHttpContextAccessor HttpContextAccessor; private readonly IUserPermissions UserPermissions; + private readonly ILogManager logger; - public PermissionHandler(IHttpContextAccessor HttpContextAccessor, IUserPermissions UserPermissions) + public PermissionHandler(IHttpContextAccessor HttpContextAccessor, IUserPermissions UserPermissions, ILogManager logger) { this.HttpContextAccessor = HttpContextAccessor; this.UserPermissions = UserPermissions; + this.logger = logger; } protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, PermissionRequirement requirement) @@ -27,6 +30,10 @@ namespace Oqtane.Security { context.Succeed(requirement); } + else + { + logger.AddLog(this.GetType().FullName, LogLevel.Error, "User {User} Does Not Have {PermissionName} Permission For {EntityName}:{EntityId}", context.User, requirement.PermissionName, requirement.EntityName, EntityId); + } } return Task.CompletedTask; } diff --git a/Oqtane.Server/Startup.cs b/Oqtane.Server/Startup.cs index 4e6b8806..ce0bf948 100644 --- a/Oqtane.Server/Startup.cs +++ b/Oqtane.Server/Startup.cs @@ -152,10 +152,9 @@ namespace Oqtane.Server services.AddSingleton(Configuration); services.AddSingleton(); - // install any modules or themes - ServiceProvider sp = services.BuildServiceProvider(); - var InstallationManager = sp.GetRequiredService(); - InstallationManager.InstallPackages("Modules,Themes"); + //ServiceProvider sp = services.BuildServiceProvider(); + //var InstallationManager = sp.GetRequiredService(); + //InstallationManager.InstallPackages("Modules,Themes"); // register transient scoped core services services.AddTransient(); @@ -239,7 +238,7 @@ namespace Oqtane.Server } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IInstallationManager InstallationManager) { if (env.IsDevelopment()) { @@ -251,6 +250,9 @@ namespace Oqtane.Server app.UseHsts(); } + // install any modules or themes + InstallationManager.InstallPackages("Modules,Themes"); + app.UseHttpsRedirection(); app.UseStaticFiles(); @@ -443,6 +445,9 @@ namespace Oqtane.Server app.UseBlazorDebugging(); } + // install any modules or themes + InstallationManager.InstallPackages("Modules,Themes"); + app.UseClientSideBlazorFiles(); app.UseStaticFiles();