mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-09 03:04:20 -04:00
Cleaning up the startup
This commit is contained in:
parent
1929994128
commit
0f00c22f7f
@ -2,7 +2,6 @@ using System;
|
||||
using System.Linq;
|
||||
using Kyoo.Controllers;
|
||||
using Kyoo.Models;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace Kyoo
|
||||
|
@ -1,10 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Kyoo.Controllers;
|
||||
using Kyoo.Models.Permissions;
|
||||
using Kyoo.Tasks;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.StaticFiles;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.FileProviders;
|
||||
|
||||
namespace Kyoo
|
||||
{
|
||||
@ -66,9 +71,34 @@ namespace Kyoo
|
||||
typeof(IProviderRepository)
|
||||
};
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// The configuration to use.
|
||||
/// </summary>
|
||||
private readonly IConfiguration _configuration;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Create a new core module instance and use the given configuration.
|
||||
/// </summary>
|
||||
/// <param name="configuration">The configuration to use</param>
|
||||
public CoreModule(IConfiguration configuration)
|
||||
{
|
||||
_configuration = configuration;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public void Configure(IServiceCollection services, ICollection<Type> availableTypes)
|
||||
{
|
||||
string publicUrl = _configuration.GetValue<string>("publicUrl");
|
||||
|
||||
services.AddControllers()
|
||||
.AddNewtonsoftJson(x =>
|
||||
{
|
||||
x.SerializerSettings.ContractResolver = new JsonPropertyIgnorer(publicUrl);
|
||||
x.SerializerSettings.Converters.Add(new PeopleRoleConverter());
|
||||
});
|
||||
|
||||
services.AddSingleton<IFileManager, FileManager>();
|
||||
services.AddSingleton<ITranscoder, Transcoder>();
|
||||
services.AddSingleton<IThumbnailsManager, ThumbnailsManager>();
|
||||
@ -99,5 +129,22 @@ namespace Kyoo
|
||||
if (services.All(x => x.ServiceType != typeof(IPermissionValidator)))
|
||||
services.AddSingleton<IPermissionValidator, PassthroughPermissionValidator>();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public void ConfigureAspNet(IApplicationBuilder app)
|
||||
{
|
||||
FileExtensionContentTypeProvider contentTypeProvider = new();
|
||||
contentTypeProvider.Mappings[".data"] = "application/octet-stream";
|
||||
app.UseStaticFiles(new StaticFileOptions
|
||||
{
|
||||
ContentTypeProvider = contentTypeProvider,
|
||||
FileProvider = new PhysicalFileProvider(Path.Join(AppDomain.CurrentDomain.BaseDirectory, "wwwroot"))
|
||||
});
|
||||
|
||||
app.UseEndpoints(endpoints =>
|
||||
{
|
||||
endpoints.MapControllers();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
@ -8,10 +8,8 @@ using Kyoo.Tasks;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.SpaServices.AngularCli;
|
||||
using Microsoft.AspNetCore.StaticFiles;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.FileProviders;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
@ -22,10 +20,6 @@ namespace Kyoo
|
||||
/// </summary>
|
||||
public class Startup
|
||||
{
|
||||
/// <summary>
|
||||
/// The configuration context
|
||||
/// </summary>
|
||||
private readonly IConfiguration _configuration;
|
||||
/// <summary>
|
||||
/// A plugin manager used to load plugins and allow them to configure services / asp net.
|
||||
/// </summary>
|
||||
@ -44,11 +38,11 @@ namespace Kyoo
|
||||
/// <param name="loggerFactory">A logger factory used to create a logger for the plugin manager.</param>
|
||||
public Startup(IServiceProvider hostProvider, IConfiguration configuration, ILoggerFactory loggerFactory, IWebHostEnvironment host)
|
||||
{
|
||||
_configuration = configuration;
|
||||
_plugins = new PluginManager(hostProvider, _configuration, loggerFactory.CreateLogger<PluginManager>());
|
||||
_plugins = new PluginManager(hostProvider, configuration, loggerFactory.CreateLogger<PluginManager>());
|
||||
|
||||
// TODO remove postgres from here and load it like a normal plugin.
|
||||
_plugins.LoadPlugins(new IPlugin[] {new CoreModule(),
|
||||
_plugins.LoadPlugins(new IPlugin[] {
|
||||
new CoreModule(configuration),
|
||||
new PostgresModule(configuration, host),
|
||||
new AuthenticationModule(configuration, loggerFactory, host)
|
||||
});
|
||||
@ -60,8 +54,6 @@ namespace Kyoo
|
||||
/// <param name="services">The service collection to fill.</param>
|
||||
public void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
string publicUrl = _configuration.GetValue<string>("publicUrl");
|
||||
|
||||
services.AddMvc().AddControllersAsServices();
|
||||
|
||||
services.AddSpaStaticFiles(configuration =>
|
||||
@ -72,13 +64,7 @@ namespace Kyoo
|
||||
{
|
||||
x.EnableForHttps = true;
|
||||
});
|
||||
|
||||
services.AddControllers()
|
||||
.AddNewtonsoftJson(x =>
|
||||
{
|
||||
x.SerializerSettings.ContractResolver = new JsonPropertyIgnorer(publicUrl);
|
||||
x.SerializerSettings.Converters.Add(new PeopleRoleConverter());
|
||||
});
|
||||
|
||||
services.AddHttpClient();
|
||||
|
||||
services.AddTransient(typeof(Lazy<>), typeof(LazyDi<>));
|
||||
@ -99,22 +85,14 @@ namespace Kyoo
|
||||
app.UseDeveloperExceptionPage();
|
||||
else
|
||||
{
|
||||
app.UseExceptionHandler("/Error");
|
||||
app.UseExceptionHandler("/error");
|
||||
app.UseHsts();
|
||||
}
|
||||
|
||||
FileExtensionContentTypeProvider contentTypeProvider = new();
|
||||
contentTypeProvider.Mappings[".data"] = "application/octet-stream";
|
||||
app.UseStaticFiles(new StaticFileOptions
|
||||
{
|
||||
ContentTypeProvider = contentTypeProvider,
|
||||
FileProvider = new PhysicalFileProvider(Path.Join(AppDomain.CurrentDomain.BaseDirectory, "wwwroot"))
|
||||
});
|
||||
|
||||
if (!env.IsDevelopment())
|
||||
app.UseSpaStaticFiles();
|
||||
|
||||
app.UseRouting();
|
||||
|
||||
app.Use((ctx, next) =>
|
||||
{
|
||||
ctx.Response.Headers.Remove("X-Powered-By");
|
||||
@ -131,12 +109,6 @@ namespace Kyoo
|
||||
|
||||
_plugins.ConfigureAspnet(app);
|
||||
|
||||
app.UseEndpoints(endpoints =>
|
||||
{
|
||||
endpoints.MapControllers();
|
||||
});
|
||||
|
||||
|
||||
app.UseSpa(spa =>
|
||||
{
|
||||
spa.Options.SourcePath = Path.Join(AppDomain.CurrentDomain.BaseDirectory, "Kyoo.WebApp");
|
||||
|
@ -40,8 +40,10 @@ namespace Kyoo.Api
|
||||
/// <summary>
|
||||
/// Get a permission from it's slug.
|
||||
/// </summary>
|
||||
/// <param name="slug">The permission to retrieve. You can use __ to get a child value.</param>
|
||||
/// <param name="slug">The permission to retrieve. You can use ':' or "__" to get a child value.</param>
|
||||
/// <returns>The associate value or list of values.</returns>
|
||||
/// <response code="200">Return the configuration value or the list of configurations</response>
|
||||
/// <response code="404">No configuration exists for the given slug</response>
|
||||
[HttpGet("{slug}")]
|
||||
[Permission(nameof(ConfigurationApi), Kind.Admin)]
|
||||
public ActionResult<object> GetConfiguration(string slug)
|
||||
@ -57,5 +59,28 @@ namespace Kyoo.Api
|
||||
_configuration.Bind(slug, option);
|
||||
return option;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Edit a permission from it's slug.
|
||||
/// </summary>
|
||||
/// <param name="slug">The permission to edit. You can use ':' or "__" to get a child value.</param>
|
||||
/// <param name="newValue">The new value of the configuration</param>
|
||||
/// <returns>The edited value.</returns>
|
||||
/// <response code="200">Return the edited value</response>
|
||||
/// <response code="404">No configuration exists for the given slug</response>
|
||||
[HttpPut("{slug}")]
|
||||
[Permission(nameof(ConfigurationApi), Kind.Admin)]
|
||||
public ActionResult<object> EditConfiguration(string slug, [FromBody] object newValue)
|
||||
{
|
||||
slug = slug.Replace("__", ":");
|
||||
if (!_references.TryGetValue(slug, out Type type))
|
||||
return NotFound();
|
||||
// object ret = _configuration.(type, slug);
|
||||
// if (ret != null)
|
||||
// return ret;
|
||||
// object option = Activator.CreateInstance(type);
|
||||
// _configuration.Bind(slug, option);
|
||||
return newValue;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user