Starting updating mooncore dependency usage

This commit is contained in:
2025-02-04 17:09:07 +01:00
parent 1a4864ba00
commit bf5a744499
38 changed files with 1099 additions and 748 deletions

View File

@@ -1,14 +1,14 @@
using System.Reflection;
using System.Text;
using System.Text.Json;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.EntityFrameworkCore;
using Microsoft.IdentityModel.Tokens;
using MoonCore.Configuration;
using MoonCore.Extended.Abstractions;
using MoonCore.Extended.Extensions;
using MoonCore.Extended.Helpers;
using MoonCore.Extended.OAuth2.Consumer;
using MoonCore.Extended.OAuth2.Consumer.Extensions;
using MoonCore.Extended.OAuth2.LocalProvider;
using MoonCore.Extended.OAuth2.LocalProvider.Extensions;
using MoonCore.Extended.OAuth2.LocalProvider.Implementations;
using MoonCore.Extended.JwtInvalidation;
using MoonCore.Extensions;
using MoonCore.Helpers;
using MoonCore.PluginFramework.Extensions;
@@ -17,8 +17,6 @@ using MoonCore.Services;
using Moonlight.ApiServer.Configuration;
using Moonlight.ApiServer.Database.Entities;
using Moonlight.ApiServer.Helpers;
using Moonlight.ApiServer.Http.Middleware;
using Moonlight.ApiServer.Implementations.OAuth2;
using Moonlight.ApiServer.Interfaces.Auth;
using Moonlight.ApiServer.Interfaces.OAuth2;
using Moonlight.ApiServer.Interfaces.Startup;
@@ -78,7 +76,7 @@ public class Startup
await RegisterLogging();
await RegisterBase();
await RegisterDatabase();
await RegisterOAuth2();
await RegisterAuth();
await RegisterCaching();
await HookPluginBuild();
await HandleConfigureArguments();
@@ -90,13 +88,11 @@ public class Startup
await PrepareDatabase();
await UseBase();
await UseOAuth2();
await UseBaseMiddleware();
await UseAuth();
await HookPluginConfigure();
await UsePluginAssets();
await MapBase();
await MapOAuth2();
await HookPluginEndpoints();
await WebApplication.RunAsync();
@@ -240,14 +236,6 @@ public class Startup
return Task.CompletedTask;
}
private Task UseBaseMiddleware()
{
WebApplication.UseMiddleware<AuthorizationMiddleware>();
WebApplication.UseMiddleware<ApiAuthenticationMiddleware>();
return Task.CompletedTask;
}
private Task MapBase()
{
WebApplication.MapControllers();
@@ -593,50 +581,56 @@ public class Startup
#endregion
#region OAuth2
#region Authentication & Authorisation
private Task RegisterOAuth2()
private Task RegisterAuth()
{
WebApplicationBuilder.Services.AddOAuth2Authentication<User>(configuration =>
WebApplicationBuilder.Services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new()
{
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(
Configuration.Authentication.Secret
)),
ValidateIssuerSigningKey = true,
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero,
ValidateAudience = true,
ValidAudience = Configuration.PublicUrl,
ValidateIssuer = true,
ValidIssuer = Configuration.PublicUrl
};
});
WebApplicationBuilder.Services.AddJwtInvalidation(options =>
{
configuration.AccessSecret = Configuration.Authentication.AccessSecret;
configuration.RefreshSecret = Configuration.Authentication.RefreshSecret;
configuration.RefreshDuration = TimeSpan.FromSeconds(Configuration.Authentication.RefreshDuration);
configuration.RefreshInterval = TimeSpan.FromSeconds(Configuration.Authentication.AccessDuration);
configuration.ClientId = Configuration.Authentication.OAuth2.ClientId;
configuration.ClientSecret = Configuration.Authentication.OAuth2.ClientSecret;
configuration.AuthorizeEndpoint = Configuration.PublicUrl + "/api/_auth/oauth2/authorize";
configuration.RedirectUri = Configuration.PublicUrl;
options.InvalidateTimeProvider = async (provider, principal) =>
{
var userIdClaim = principal.Claims.First(x => x.Type == "userId");
var userId = int.Parse(userIdClaim.Value);
var userRepository = provider.GetRequiredService<DatabaseRepository<User>>();
var user = await userRepository.Get().FirstAsync(x => x.Id == userId);
return user.TokenValidTimestamp;
};
});
WebApplicationBuilder.Services.AddScoped<IDataProvider<User>, LocalOAuth2Provider>();
if (!Configuration.Authentication.UseLocalOAuth2)
return Task.CompletedTask;
WebApplicationBuilder.Services.AddLocalOAuth2Provider<User>(Configuration.PublicUrl);
WebApplicationBuilder.Services.AddScoped<ILocalProviderImplementation<User>, LocalOAuth2Provider>();
WebApplicationBuilder.Services.AddScoped<IOAuth2Provider<User>, LocalOAuth2Provider<User>>();
WebApplicationBuilder.Services.AddAuthorization();
return Task.CompletedTask;
}
private Task UseOAuth2()
private Task UseAuth()
{
WebApplication.UseOAuth2Authentication<User>();
WebApplication.UseMiddleware<PermissionLoaderMiddleware>();
return Task.CompletedTask;
}
private Task MapOAuth2()
{
WebApplication.MapOAuth2Authentication<User>();
if (!Configuration.Authentication.UseLocalOAuth2)
return Task.CompletedTask;
WebApplication.MapLocalOAuth2Provider<User>();
WebApplication.UseAuthentication();
WebApplication.UseJwtInvalidation();
WebApplication.UseAuthorization();
return Task.CompletedTask;
}