admin api packaging

This commit is contained in:
Rory&
2025-12-14 23:18:35 +01:00
parent a4527d166a
commit 4534d4dbf5
124 changed files with 2250 additions and 268 deletions

4
.gitignore vendored
View File

@@ -26,4 +26,6 @@ bun.lock
# optional generated outputs from schema.js
schemas_orig/
schemas_nested/
schemas_final/
schemas_final/
!/extra/admin-api/Utilities/Spacebar.AdminApi.TestClient/wwwroot/lib/bootstrap/dist/

View File

@@ -6,4 +6,4 @@ appsettings.Local*.json
/*.patch
Spacebar.Db/**/*.orig
Spacebar.Db/**/*.rej
Spacebar.Db/**/*.rej

View File

@@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UserSecretsId>dotnet-ConfigTest-18d89c0e-df5d-447b-8429-7d526a35ab13</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="10.0.1" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.0" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="10.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Spacebar.ConfigModel\Spacebar.ConfigModel.csproj" />
<ProjectReference Include="..\Spacebar.Db\Spacebar.Db.csproj" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,14 @@
using ConfigTest;
using Microsoft.EntityFrameworkCore;
using Spacebar.Db.Contexts;
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddHostedService<Worker>();
builder.Services.AddDbContext<SpacebarDbContext>(options => {
options
.UseNpgsql(builder.Configuration.GetConnectionString("Spacebar"))
.EnableDetailedErrors();
}, ServiceLifetime.Singleton);
var host = builder.Build();
host.Run();

View File

@@ -0,0 +1,12 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"profiles": {
"ConfigTest": {
"commandName": "Project",
"dotnetRunMessages": true,
"environmentVariables": {
"DOTNET_ENVIRONMENT": "Development"
}
}
}
}

View File

@@ -0,0 +1,43 @@
using System.Text.Json.Nodes;
using Spacebar.ConfigModel.Extensions;
using Spacebar.Db.Contexts;
namespace ConfigTest;
public class Worker(ILogger<Worker> logger, SpacebarDbContext db) : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
var config = db.Configs
.OrderBy(x => x.Key)
.ToDictionary(x => x.Key, x => x.Value);
foreach (var (key, value) in config)
{
Console.WriteLine("Config Key: {0}, Value: {1}", key, value ?? "[NULL]");
}
var readConfig = config.ToNestedJsonObject();
Console.WriteLine(readConfig);
var mapped = readConfig.ToFlatKv();
foreach (var (key, value) in mapped)
{
Console.WriteLine("Mapped Key: {0}, Value: {1}", key, value ?? "[NULL]");
}
// check that they're equal
foreach (var (key, value) in config)
{
if (!mapped.ContainsKey(key))
{
Console.WriteLine("Missing Key in Mapped: {0}", key);
continue;
}
if (mapped[key] != value)
{
Console.WriteLine("Value Mismatch for Key: {0}, Original: {1}, Mapped: {2}", key, value ?? "[NULL]", mapped[key] ?? "[NULL]");
}
}
Environment.Exit(0);
}
}

View File

@@ -0,0 +1,61 @@
using System.Text.Json.Nodes;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Spacebar.AdminApi.Extensions;
using Spacebar.AdminApi.Models;
using Spacebar.AdminApi.Services;
using Spacebar.Db.Contexts;
using Spacebar.Db.Models;
using Spacebar.RabbitMqUtilities;
using Spacebar.ConfigModel.Extensions;
namespace Spacebar.AdminApi.Controllers;
[ApiController]
[Route("/Configuration")]
public class ConfigController(ILogger<ConfigController> logger, SpacebarDbContext db, RabbitMQService mq, IServiceProvider sp, AuthenticationService auth) : ControllerBase {
private readonly ILogger<ConfigController> _logger = logger;
[HttpGet]
public async Task<JsonObject> Get() {
(await auth.GetCurrentUser(Request)).GetRights().AssertHasAllRights(SpacebarRights.Rights.OPERATOR);
var config = (await db.Configs.AsNoTracking().ToDictionaryAsync(x => x.Key, x => x.Value)).ToNestedJsonObject();
return config;
}
[HttpPost]
public async Task<IActionResult> Post([FromBody] JsonObject newConfig) {
(await auth.GetCurrentUser(Request)).GetRights().AssertHasAllRights(SpacebarRights.Rights.OPERATOR);
var flatConfig = newConfig.ToFlatKv();
var tasks = flatConfig.Select(async x => {
await using var scope = sp.CreateAsyncScope();
var scopedDb = scope.ServiceProvider.GetRequiredService<SpacebarDbContext>();
var existingConfig = await scopedDb.Configs.FindAsync(x.Key);
if (existingConfig != null) {
existingConfig.Value = x.Value;
scopedDb.Configs.Update(existingConfig);
}
else {
await scopedDb.Configs.AddAsync(new Config
{ Key = x.Key, Value = x.Value });
}
await scopedDb.SaveChangesAsync();
});
await Task.WhenAll(tasks);
// TODO: rabbitmq
return Ok();
}
[HttpPost]
public async Task<IActionResult> ReloadConfig() {
(await auth.GetCurrentUser(Request)).GetRights().AssertHasAllRights(SpacebarRights.Rights.OPERATOR);
// TODO: rabbitmq
return Ok();
}
}

View File

@@ -2,14 +2,14 @@ using ArcaneLibs.Extensions;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using RabbitMQ.Client;
using Spacebar.AdminAPI.Extensions;
using Spacebar.AdminApi.Extensions;
using Spacebar.AdminApi.Models;
using Spacebar.AdminAPI.Services;
using Spacebar.AdminApi.Services;
using Spacebar.Db.Contexts;
using Spacebar.Db.Models;
using Spacebar.RabbitMqUtilities;
namespace Spacebar.AdminAPI.Controllers;
namespace Spacebar.AdminApi.Controllers;
[ApiController]
[Route("/Guilds")]

View File

@@ -1,13 +1,13 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Spacebar.AdminAPI.Extensions;
using Spacebar.AdminApi.Extensions;
using Spacebar.AdminApi.Models;
using Spacebar.AdminAPI.Services;
using Spacebar.AdminApi.Services;
using Spacebar.Db.Contexts;
using Spacebar.Db.Models;
using Spacebar.RabbitMqUtilities;
namespace Spacebar.AdminAPI.Controllers.Media;
namespace Spacebar.AdminApi.Controllers.Media;
[ApiController]
[Route("/media/user")]

View File

@@ -1,7 +1,7 @@
using Microsoft.AspNetCore.Mvc;
using Spacebar.AdminAPI.Services;
using Spacebar.AdminApi.Services;
namespace Spacebar.AdminAPI.Controllers;
namespace Spacebar.AdminApi.Controllers;
[ApiController]
[Route("/")]

View File

@@ -4,14 +4,14 @@ using ArcaneLibs.Extensions;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using RabbitMQ.Client;
using Spacebar.AdminAPI.Extensions;
using Spacebar.AdminApi.Extensions;
using Spacebar.AdminApi.Models;
using Spacebar.AdminAPI.Services;
using Spacebar.AdminApi.Services;
using Spacebar.Db.Contexts;
using Spacebar.Db.Models;
using Spacebar.RabbitMqUtilities;
namespace Spacebar.AdminAPI.Controllers;
namespace Spacebar.AdminApi.Controllers;
[ApiController]
[Route("/users")]

View File

@@ -2,7 +2,7 @@ using Microsoft.EntityFrameworkCore;
using Spacebar.AdminApi.Models;
using Spacebar.Db.Models;
namespace Spacebar.AdminAPI.Extensions;
namespace Spacebar.AdminApi.Extensions;
public static class DbExtensions {
public static string? GetString(this DbSet<Config> config, string key) => config.Find(key)?.Value;

View File

@@ -1,11 +1,11 @@
using System.IdentityModel.Tokens.Jwt;
using System.Security.Cryptography;
using Microsoft.IdentityModel.Tokens;
using Spacebar.AdminAPI.Services;
using Spacebar.AdminApi.Services;
using Spacebar.Db.Contexts;
using Spacebar.Db.Models;
namespace Spacebar.AdminAPI.Middleware;
namespace Spacebar.AdminApi.Middleware;
public class AuthenticationMiddleware(RequestDelegate next) {
private static Dictionary<string, User> _userCache = new();

View File

@@ -1,8 +1,8 @@
using System.Text.Json.Serialization;
using Microsoft.AspNetCore.Http.Timeouts;
using Microsoft.EntityFrameworkCore;
using Spacebar.AdminAPI.Middleware;
using Spacebar.AdminAPI.Services;
using Spacebar.AdminApi.Middleware;
using Spacebar.AdminApi.Services;
using Spacebar.Db.Contexts;
using Spacebar.RabbitMqUtilities;

View File

@@ -4,7 +4,7 @@ using Microsoft.IdentityModel.Tokens;
using Spacebar.Db.Contexts;
using Spacebar.Db.Models;
namespace Spacebar.AdminAPI.Services;
namespace Spacebar.AdminApi.Services;
public class AuthenticationService(SpacebarDbContext db, Configuration config) {
private static Dictionary<string, User> _userCache = new();

View File

@@ -1,4 +1,4 @@
namespace Spacebar.AdminAPI.Services;
namespace Spacebar.AdminApi.Services;
public class Configuration {
public Configuration(IConfiguration configuration) {

View File

@@ -16,6 +16,7 @@
<ItemGroup>
<ProjectReference Include="..\Spacebar.AdminApi.Models\Spacebar.AdminApi.Models.csproj" />
<ProjectReference Include="..\Spacebar.ConfigModel\Spacebar.ConfigModel.csproj" />
<ProjectReference Include="..\Spacebar.Db\Spacebar.Db.csproj" />
<ProjectReference Include="..\Utilities\Spacebar.RabbitMqUtilities\Spacebar.RabbitMqUtilities.csproj" />
</ItemGroup>

View File

@@ -0,0 +1,27 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Trace", //Warning
"Microsoft.AspNetCore.Mvc": "Warning", //Warning
"Microsoft.AspNetCore.HostFiltering": "Warning", //Warning
"Microsoft.AspNetCore.Cors": "Warning", //Warning
// "Microsoft.EntityFrameworkCore": "Warning"
"Microsoft.EntityFrameworkCore.Database.Command": "Debug"
}
},
"ConnectionStrings": {
"Spacebar": "Host=127.0.0.1; Username=postgres; Database=spacebar; Port=5432; Include Error Detail=true; Maximum Pool Size=1000; Command Timeout=6000; Timeout=600;",
},
"RabbitMQ": {
"Host": "127.0.0.1",
"Port": 5673,
"Username": "guest",
"Password": "guest"
},
"SpacebarAdminApi": {
"Enforce2FA": true,
"OverrideUid": null,
"DisableAuthentication": false
}
}

View File

@@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

View File

@@ -0,0 +1,447 @@
[
{
"pname": "ArcaneLibs",
"version": "1.0.0-preview.20251005-232225",
"hash": "sha256-EsYLSiyX5Nj+ZpFb6FOcAYqDsQFSbvgm9NKaarJjK/0="
},
{
"pname": "ArcaneLibs.StringNormalisation",
"version": "1.0.0-preview.20251005-232225",
"hash": "sha256-CdftHRV6idRMojLMgnDRxgSOvfP1DU+9KTKyBGlwoSI="
},
{
"pname": "Humanizer.Core",
"version": "2.14.1",
"hash": "sha256-EXvojddPu+9JKgOG9NSQgUTfWq1RpOYw7adxDPKDJ6o="
},
{
"pname": "Microsoft.AspNetCore.OpenApi",
"version": "10.0.0",
"hash": "sha256-mf3kOdkliLF4OD+CrmEhMNNDGOPKWGBOBWtX2EV5YEU="
},
{
"pname": "Microsoft.Build",
"version": "17.7.2",
"hash": "sha256-k35nFdPxC8t0zAltVSmAJtsepp/ubNIjPOsJ6k8jSqM="
},
{
"pname": "Microsoft.Build.Framework",
"version": "17.14.28",
"hash": "sha256-7RzEyIipumafwLW1xN1q23114NafG6PT0+RADElNsiM="
},
{
"pname": "Microsoft.Build.Framework",
"version": "17.7.2",
"hash": "sha256-fNWmVQYFTJDveAGmxEdNqJRAczV6+Ep8RA8clKBJFqw="
},
{
"pname": "Microsoft.Build.Tasks.Core",
"version": "17.14.28",
"hash": "sha256-M9zRXYijH2HtLlRXbrUK1a1LQ9zkT+DC9ZmMiiVZwv0="
},
{
"pname": "Microsoft.Build.Tasks.Core",
"version": "17.7.2",
"hash": "sha256-OrV/qWgZHzGlNUmaSfX5wDBcmg1aQeF3/OUHpSH+uZU="
},
{
"pname": "Microsoft.Build.Utilities.Core",
"version": "17.14.28",
"hash": "sha256-VFfO+UpyTpw2X/qiCCOCYzvMLuu7B+XVSSpJZQLkPzU="
},
{
"pname": "Microsoft.Build.Utilities.Core",
"version": "17.7.2",
"hash": "sha256-oatF0KfuP1nb4+OLNKg2/R/ZLO4EiACaO5leaxMEY4A="
},
{
"pname": "Microsoft.CodeAnalysis.Analyzers",
"version": "3.11.0",
"hash": "sha256-hQ2l6E6PO4m7i+ZsfFlEx+93UsLPo4IY3wDkNG11/Sw="
},
{
"pname": "Microsoft.CodeAnalysis.Common",
"version": "4.14.0",
"hash": "sha256-ne/zxH3GqoGB4OemnE8oJElG5mai+/67ASaKqwmL2BE="
},
{
"pname": "Microsoft.CodeAnalysis.CSharp",
"version": "4.14.0",
"hash": "sha256-5Mzj3XkYYLkwDWh17r1NEXSbXwwWYQPiOmkSMlgo1JY="
},
{
"pname": "Microsoft.CodeAnalysis.CSharp.Workspaces",
"version": "4.14.0",
"hash": "sha256-aNbV1a0yYBs0fpQawG6LXcbyoE8en+YFSpV5vcYE4J4="
},
{
"pname": "Microsoft.CodeAnalysis.Workspaces.Common",
"version": "4.14.0",
"hash": "sha256-0YfeaJe01WBUm9avy4a8FacQJXA1NkpnDpiXu4yz88I="
},
{
"pname": "Microsoft.CodeAnalysis.Workspaces.MSBuild",
"version": "4.14.0",
"hash": "sha256-5SJfpRqzqCK0UbkmAaJpA/r1XJb0YAriMMeQHYC4d+o="
},
{
"pname": "Microsoft.EntityFrameworkCore",
"version": "10.0.0",
"hash": "sha256-xfgrlxhtOkQwF5Q7j8gSm41URJiH8IuJ/T/Dh88++hE="
},
{
"pname": "Microsoft.EntityFrameworkCore",
"version": "10.0.1",
"hash": "sha256-IxA+/nDA6hZkUm9bDT6bRu8+9qeHA3gbTvIhR9Ncg4w="
},
{
"pname": "Microsoft.EntityFrameworkCore.Abstractions",
"version": "10.0.0",
"hash": "sha256-UDgZbRQcGPaKsE53EH6bvJiv+Q4KSxAbnsVhTVFGG4Q="
},
{
"pname": "Microsoft.EntityFrameworkCore.Abstractions",
"version": "10.0.1",
"hash": "sha256-FMGXhAAgcVSedV0/GmUVqAwoiRzFJil9mQYr6eNgowg="
},
{
"pname": "Microsoft.EntityFrameworkCore.Analyzers",
"version": "10.0.0",
"hash": "sha256-7Q0jYJO50cqGI+u6gLpootbB8GZvgsgtg0F9FZI1jig="
},
{
"pname": "Microsoft.EntityFrameworkCore.Analyzers",
"version": "10.0.1",
"hash": "sha256-O949vr98WoSRXtiIo0ZI6dz2cibIBKbiuC+mQOe9bV4="
},
{
"pname": "Microsoft.EntityFrameworkCore.Design",
"version": "10.0.1",
"hash": "sha256-GGNZIGNEMhSGaMRFkRN4bOuCUBs5YVnX8klXarm319U="
},
{
"pname": "Microsoft.EntityFrameworkCore.Relational",
"version": "10.0.0",
"hash": "sha256-vOP2CE5YA551BlpbOuIy6RuAiAEPEpCVS1cEE33/zN4="
},
{
"pname": "Microsoft.EntityFrameworkCore.Relational",
"version": "10.0.1",
"hash": "sha256-zLgxr/iW9HP8Fip1IDgr7X0Ar8OWKDvVmoEt65gG6VY="
},
{
"pname": "Microsoft.Extensions.Caching.Abstractions",
"version": "10.0.1",
"hash": "sha256-qVLAEqxPK/dNq+z1a6D9NqdcSg/18sfzZhlBWMkqV/A="
},
{
"pname": "Microsoft.Extensions.Caching.Memory",
"version": "10.0.0",
"hash": "sha256-AMgDSm1k6q0s17spGtyR5q8nAqUFDOxl/Fe38f9M+d4="
},
{
"pname": "Microsoft.Extensions.Caching.Memory",
"version": "10.0.1",
"hash": "sha256-Qb7xK6VEZDas0lJFaW1suKdFjtkSYwLHHxkQEfWIU2A="
},
{
"pname": "Microsoft.Extensions.Configuration",
"version": "10.0.0",
"hash": "sha256-MsLskVPpkCvov5+DWIaALCt1qfRRX4u228eHxvpE0dg="
},
{
"pname": "Microsoft.Extensions.Configuration.Abstractions",
"version": "10.0.0",
"hash": "sha256-GcgrnTAieCV7AVT13zyOjfwwL86e99iiO/MiMOxPGG0="
},
{
"pname": "Microsoft.Extensions.Configuration.Abstractions",
"version": "10.0.1",
"hash": "sha256-s4PDp+vtzdxKIxnOT3+dDRoTDopyl8kqmmw4KDnkOtQ="
},
{
"pname": "Microsoft.Extensions.Configuration.Binder",
"version": "10.0.0",
"hash": "sha256-YSiWoA3VQR22k6+bSEAUqeG7UDzZlJfHWDTubUO5V8U="
},
{
"pname": "Microsoft.Extensions.DependencyInjection",
"version": "10.0.1",
"hash": "sha256-RKOB+zPrtQNUbJY/1jR54rKOM8KHPgynPExxugku3I8="
},
{
"pname": "Microsoft.Extensions.DependencyInjection",
"version": "9.0.0",
"hash": "sha256-dAH52PPlTLn7X+1aI/7npdrDzMEFPMXRv4isV1a+14k="
},
{
"pname": "Microsoft.Extensions.DependencyInjection.Abstractions",
"version": "10.0.0",
"hash": "sha256-9iodXP39YqgxomnOPOxd/mzbG0JfOSXzFoNU3omT2Ps="
},
{
"pname": "Microsoft.Extensions.DependencyInjection.Abstractions",
"version": "10.0.1",
"hash": "sha256-zNUpau51ds7iQTaSUTFtyTHIUoinYc129W50CnufMdQ="
},
{
"pname": "Microsoft.Extensions.DependencyInjection.Abstractions",
"version": "9.0.0",
"hash": "sha256-CncVwkKZ5CsIG2O0+OM9qXuYXh3p6UGyueTHSLDVL+c="
},
{
"pname": "Microsoft.Extensions.DependencyModel",
"version": "10.0.1",
"hash": "sha256-XIj2jEURe25YA4RhBSuCqQpic0YP+TZaO/dbBPCjad8="
},
{
"pname": "Microsoft.Extensions.Logging",
"version": "10.0.0",
"hash": "sha256-P+zPAadLL63k/GqK34/qChqQjY9aIRxZfxlB9lqsSrs="
},
{
"pname": "Microsoft.Extensions.Logging",
"version": "10.0.1",
"hash": "sha256-zuLP3SIpCToMOlIPOEv3Kq8y/minecd8k8GSkxFo13E="
},
{
"pname": "Microsoft.Extensions.Logging",
"version": "9.0.0",
"hash": "sha256-kR16c+N8nQrWeYLajqnXPg7RiXjZMSFLnKLEs4VfjcM="
},
{
"pname": "Microsoft.Extensions.Logging.Abstractions",
"version": "10.0.0",
"hash": "sha256-BnhgGZc01HwTSxogavq7Ueq4V7iMA3wPnbfRwQ4RhGk="
},
{
"pname": "Microsoft.Extensions.Logging.Abstractions",
"version": "10.0.1",
"hash": "sha256-NRk0feNE1fgi/hyO0AVDbSGJQRT+9yte6Lpm4Hz/2Bs="
},
{
"pname": "Microsoft.Extensions.Logging.Abstractions",
"version": "9.0.0",
"hash": "sha256-iBTs9twjWXFeERt4CErkIIcoJZU1jrd1RWCI8V5j7KU="
},
{
"pname": "Microsoft.Extensions.Options",
"version": "10.0.1",
"hash": "sha256-vBiSS1vqAC7eDrpJNT4H3A9qLikCSAepnNRbry0mKnk="
},
{
"pname": "Microsoft.Extensions.Options",
"version": "9.0.0",
"hash": "sha256-DT5euAQY/ItB5LPI8WIp6Dnd0lSvBRP35vFkOXC68ck="
},
{
"pname": "Microsoft.Extensions.Primitives",
"version": "10.0.0",
"hash": "sha256-Dup08KcptLjlnpN5t5//+p4n8FUTgRAq4n/w1s6us+I="
},
{
"pname": "Microsoft.Extensions.Primitives",
"version": "10.0.1",
"hash": "sha256-EXmukq09erT4s+miQpBSYy3IY4HxxKlwEPL43/KoyEc="
},
{
"pname": "Microsoft.Extensions.Primitives",
"version": "9.0.0",
"hash": "sha256-ZNLusK1CRuq5BZYZMDqaz04PIKScE2Z7sS2tehU7EJs="
},
{
"pname": "Microsoft.IdentityModel.Abstractions",
"version": "8.15.0",
"hash": "sha256-LKTvERNUTMCEF7xs377tCMwOMRki93OS4kh6Yv0uXJ4="
},
{
"pname": "Microsoft.IdentityModel.JsonWebTokens",
"version": "8.15.0",
"hash": "sha256-LwzKiGjcnORvmQ9tim6lomXpfVlPpd/fE8FKTFWKlpM="
},
{
"pname": "Microsoft.IdentityModel.Logging",
"version": "8.15.0",
"hash": "sha256-mMXwsjGcrrmHR1mG7BLTKg/30mX+m93QVX17/ynOOd4="
},
{
"pname": "Microsoft.IdentityModel.Tokens",
"version": "8.15.0",
"hash": "sha256-7Lo/TsvqgNCEMyFssO3Om233521Pqgb9K9lUeHc5HMk="
},
{
"pname": "Microsoft.NET.StringTools",
"version": "17.14.28",
"hash": "sha256-UzREyvDxkiOQ4cEOQ5UCjkwXGrldIDCcbefECTPGjXI="
},
{
"pname": "Microsoft.NET.StringTools",
"version": "17.7.2",
"hash": "sha256-hQE07TCgcQuyu9ZHVq2gPDb0+xe8ECJUdrgh17bJP4o="
},
{
"pname": "Microsoft.OpenApi",
"version": "2.0.0",
"hash": "sha256-8eiM3Mx4Hx1etx52RlczoHG2z9XIpWgu2LQtWSt086k="
},
{
"pname": "Mono.TextTemplating",
"version": "3.0.0",
"hash": "sha256-VlgGDvgNZb7MeBbIZ4DE2Nn/j2aD9k6XqNHnASUSDr0="
},
{
"pname": "Newtonsoft.Json",
"version": "13.0.3",
"hash": "sha256-hy/BieY4qxBWVVsDqqOPaLy1QobiIapkbrESm6v2PHc="
},
{
"pname": "Npgsql",
"version": "10.0.0",
"hash": "sha256-UVKz9dH/rVCCbMyFdqA31RYpht1XgDRLIqUy0Dp9ACQ="
},
{
"pname": "Npgsql.EntityFrameworkCore.PostgreSQL",
"version": "10.0.0",
"hash": "sha256-XIJxnTMektQVP1qtslEIGbmBGrIQsvjQjCMRTs9UIbg="
},
{
"pname": "RabbitMQ.Client",
"version": "7.2.0",
"hash": "sha256-NkEb2ey0jo/OAeaVOUwIeSbeplqkOsgv1+ys8ZQgemQ="
},
{
"pname": "System.CodeDom",
"version": "6.0.0",
"hash": "sha256-uPetUFZyHfxjScu5x4agjk9pIhbCkt5rG4Axj25npcQ="
},
{
"pname": "System.CodeDom",
"version": "7.0.0",
"hash": "sha256-7IPt39cY+0j0ZcRr/J45xPtEjnSXdUJ/5ai3ebaYQiE="
},
{
"pname": "System.CodeDom",
"version": "9.0.0",
"hash": "sha256-578lcBgswW0eM16r0EnJzfGodPx86RxxFoZHc2PSzsw="
},
{
"pname": "System.Composition",
"version": "9.0.0",
"hash": "sha256-FehOkQ2u1p8mQ0/wn3cZ+24HjhTLdck8VZYWA1CcgbM="
},
{
"pname": "System.Composition.AttributedModel",
"version": "9.0.0",
"hash": "sha256-a7y7H6zj+kmYkllNHA402DoVfY9IaqC3Ooys8Vzl24M="
},
{
"pname": "System.Composition.Convention",
"version": "9.0.0",
"hash": "sha256-tw4vE5JRQ60ubTZBbxoMPhtjOQCC3XoDFUH7NHO7o8U="
},
{
"pname": "System.Composition.Hosting",
"version": "9.0.0",
"hash": "sha256-oOxU+DPEEfMCuNLgW6wSkZp0JY5gYt44FJNnWt+967s="
},
{
"pname": "System.Composition.Runtime",
"version": "9.0.0",
"hash": "sha256-AyIe+di1TqwUBbSJ/sJ8Q8tzsnTN+VBdJw4K8xZz43s="
},
{
"pname": "System.Composition.TypedParts",
"version": "9.0.0",
"hash": "sha256-F5fpTUs3Rr7yP/NyIzr+Xn5NdTXXp8rrjBnF9UBBUog="
},
{
"pname": "System.Configuration.ConfigurationManager",
"version": "7.0.0",
"hash": "sha256-SgBexTTjRn23uuXvkzO0mz0qOfA23MiS4Wv+qepMLZE="
},
{
"pname": "System.Configuration.ConfigurationManager",
"version": "9.0.0",
"hash": "sha256-+pLnTC0YDP6Kjw5DVBiFrV/Q3x5is/+6N6vAtjvhVWk="
},
{
"pname": "System.Diagnostics.EventLog",
"version": "9.0.0",
"hash": "sha256-tPvt6yoAp56sK/fe+/ei8M65eavY2UUhRnbrREj/Ems="
},
{
"pname": "System.Formats.Nrbf",
"version": "9.0.0",
"hash": "sha256-c4qf6CocQUZB0ySGQd8s15PXY7xfrjQqMGXxkwytKyw="
},
{
"pname": "System.IdentityModel.Tokens.Jwt",
"version": "8.15.0",
"hash": "sha256-5O0wbGp0gWnukK+0mWBjMnP1bZc6N0xuNcO2qmFiUX8="
},
{
"pname": "System.Reflection.MetadataLoadContext",
"version": "7.0.0",
"hash": "sha256-VYl6SFD130K9Aw4eJH16ApJ9Sau4Xu0dcxEip2veuTI="
},
{
"pname": "System.Resources.Extensions",
"version": "9.0.0",
"hash": "sha256-y2gLEMuAy6QfEyNJxABC/ayMWGnwlpX735jsUQLktho="
},
{
"pname": "System.Security.Cryptography.Pkcs",
"version": "7.0.0",
"hash": "sha256-3J3vL9hcKSuZjT2GKappa2A9p2xJm1nH2asTNAl8ZCA="
},
{
"pname": "System.Security.Cryptography.Pkcs",
"version": "7.0.2",
"hash": "sha256-qS5Z/Yo8J+f3ExVX5Qkcpj1Z57oUZqz5rWa1h5bVpl8="
},
{
"pname": "System.Security.Cryptography.Pkcs",
"version": "9.0.0",
"hash": "sha256-AjG14mGeSc2Ka4QSelGBM1LrGBW3VJX60lnihKyJjGY="
},
{
"pname": "System.Security.Cryptography.ProtectedData",
"version": "9.0.0",
"hash": "sha256-gPgPU7k/InTqmXoRzQfUMEKL3QuTnOKowFqmXTnWaBQ="
},
{
"pname": "System.Security.Cryptography.Xml",
"version": "7.0.1",
"hash": "sha256-CH8+JVC8LyCSW75/6ZQ7ecMbSOAE1c16z4dG8JTp01w="
},
{
"pname": "System.Security.Cryptography.Xml",
"version": "9.0.0",
"hash": "sha256-SQJWwAFrJUddEU6JiZB52FM9tGjRlJAYH8oYVzG5IJU="
},
{
"pname": "System.Security.Permissions",
"version": "7.0.0",
"hash": "sha256-DOFoX+AKRmrkllykHheR8FfUXYx/Ph+I/HYuReQydXI="
},
{
"pname": "System.Security.Permissions",
"version": "9.0.0",
"hash": "sha256-BFrA9ottmQtLIAiKiGRbfSUpzNJwuaOCeFRDN4Z0ku0="
},
{
"pname": "System.Threading.RateLimiting",
"version": "8.0.0",
"hash": "sha256-KOEWEt6ZthvZHJ2Wp70d9nBhBrPqobGQDi2twlKYh/w="
},
{
"pname": "System.Windows.Extensions",
"version": "9.0.0",
"hash": "sha256-RErD+Ju15qtnwdwB7E0SjjJGAnhXwJyC7UPcl24Z3Vs="
},
{
"pname": "Unidecode.NET",
"version": "2.1.0",
"hash": "sha256-nfxHxG/YwRftOP+wiSW8NL5hIVwt+wnfRb0lURjrZoc="
}
]

View File

@@ -0,0 +1,492 @@
[
{
"pname": "Humanizer.Core",
"version": "2.14.1",
"hash": "sha256-EXvojddPu+9JKgOG9NSQgUTfWq1RpOYw7adxDPKDJ6o="
},
{
"pname": "Microsoft.Build",
"version": "17.7.2",
"hash": "sha256-k35nFdPxC8t0zAltVSmAJtsepp/ubNIjPOsJ6k8jSqM="
},
{
"pname": "Microsoft.Build.Framework",
"version": "17.14.28",
"hash": "sha256-7RzEyIipumafwLW1xN1q23114NafG6PT0+RADElNsiM="
},
{
"pname": "Microsoft.Build.Framework",
"version": "17.7.2",
"hash": "sha256-fNWmVQYFTJDveAGmxEdNqJRAczV6+Ep8RA8clKBJFqw="
},
{
"pname": "Microsoft.Build.Tasks.Core",
"version": "17.14.28",
"hash": "sha256-M9zRXYijH2HtLlRXbrUK1a1LQ9zkT+DC9ZmMiiVZwv0="
},
{
"pname": "Microsoft.Build.Tasks.Core",
"version": "17.7.2",
"hash": "sha256-OrV/qWgZHzGlNUmaSfX5wDBcmg1aQeF3/OUHpSH+uZU="
},
{
"pname": "Microsoft.Build.Utilities.Core",
"version": "17.14.28",
"hash": "sha256-VFfO+UpyTpw2X/qiCCOCYzvMLuu7B+XVSSpJZQLkPzU="
},
{
"pname": "Microsoft.Build.Utilities.Core",
"version": "17.7.2",
"hash": "sha256-oatF0KfuP1nb4+OLNKg2/R/ZLO4EiACaO5leaxMEY4A="
},
{
"pname": "Microsoft.CodeAnalysis.Analyzers",
"version": "3.11.0",
"hash": "sha256-hQ2l6E6PO4m7i+ZsfFlEx+93UsLPo4IY3wDkNG11/Sw="
},
{
"pname": "Microsoft.CodeAnalysis.Common",
"version": "4.14.0",
"hash": "sha256-ne/zxH3GqoGB4OemnE8oJElG5mai+/67ASaKqwmL2BE="
},
{
"pname": "Microsoft.CodeAnalysis.CSharp",
"version": "4.14.0",
"hash": "sha256-5Mzj3XkYYLkwDWh17r1NEXSbXwwWYQPiOmkSMlgo1JY="
},
{
"pname": "Microsoft.CodeAnalysis.CSharp.Workspaces",
"version": "4.14.0",
"hash": "sha256-aNbV1a0yYBs0fpQawG6LXcbyoE8en+YFSpV5vcYE4J4="
},
{
"pname": "Microsoft.CodeAnalysis.Workspaces.Common",
"version": "4.14.0",
"hash": "sha256-0YfeaJe01WBUm9avy4a8FacQJXA1NkpnDpiXu4yz88I="
},
{
"pname": "Microsoft.CodeAnalysis.Workspaces.MSBuild",
"version": "4.14.0",
"hash": "sha256-5SJfpRqzqCK0UbkmAaJpA/r1XJb0YAriMMeQHYC4d+o="
},
{
"pname": "Microsoft.EntityFrameworkCore",
"version": "10.0.0",
"hash": "sha256-xfgrlxhtOkQwF5Q7j8gSm41URJiH8IuJ/T/Dh88++hE="
},
{
"pname": "Microsoft.EntityFrameworkCore",
"version": "10.0.1",
"hash": "sha256-IxA+/nDA6hZkUm9bDT6bRu8+9qeHA3gbTvIhR9Ncg4w="
},
{
"pname": "Microsoft.EntityFrameworkCore.Abstractions",
"version": "10.0.0",
"hash": "sha256-UDgZbRQcGPaKsE53EH6bvJiv+Q4KSxAbnsVhTVFGG4Q="
},
{
"pname": "Microsoft.EntityFrameworkCore.Abstractions",
"version": "10.0.1",
"hash": "sha256-FMGXhAAgcVSedV0/GmUVqAwoiRzFJil9mQYr6eNgowg="
},
{
"pname": "Microsoft.EntityFrameworkCore.Analyzers",
"version": "10.0.0",
"hash": "sha256-7Q0jYJO50cqGI+u6gLpootbB8GZvgsgtg0F9FZI1jig="
},
{
"pname": "Microsoft.EntityFrameworkCore.Analyzers",
"version": "10.0.1",
"hash": "sha256-O949vr98WoSRXtiIo0ZI6dz2cibIBKbiuC+mQOe9bV4="
},
{
"pname": "Microsoft.EntityFrameworkCore.Design",
"version": "10.0.1",
"hash": "sha256-GGNZIGNEMhSGaMRFkRN4bOuCUBs5YVnX8klXarm319U="
},
{
"pname": "Microsoft.EntityFrameworkCore.Relational",
"version": "10.0.0",
"hash": "sha256-vOP2CE5YA551BlpbOuIy6RuAiAEPEpCVS1cEE33/zN4="
},
{
"pname": "Microsoft.EntityFrameworkCore.Relational",
"version": "10.0.1",
"hash": "sha256-zLgxr/iW9HP8Fip1IDgr7X0Ar8OWKDvVmoEt65gG6VY="
},
{
"pname": "Microsoft.Extensions.Caching.Abstractions",
"version": "10.0.1",
"hash": "sha256-qVLAEqxPK/dNq+z1a6D9NqdcSg/18sfzZhlBWMkqV/A="
},
{
"pname": "Microsoft.Extensions.Caching.Memory",
"version": "10.0.0",
"hash": "sha256-AMgDSm1k6q0s17spGtyR5q8nAqUFDOxl/Fe38f9M+d4="
},
{
"pname": "Microsoft.Extensions.Caching.Memory",
"version": "10.0.1",
"hash": "sha256-Qb7xK6VEZDas0lJFaW1suKdFjtkSYwLHHxkQEfWIU2A="
},
{
"pname": "Microsoft.Extensions.Configuration",
"version": "10.0.0",
"hash": "sha256-MsLskVPpkCvov5+DWIaALCt1qfRRX4u228eHxvpE0dg="
},
{
"pname": "Microsoft.Extensions.Configuration.Abstractions",
"version": "10.0.0",
"hash": "sha256-GcgrnTAieCV7AVT13zyOjfwwL86e99iiO/MiMOxPGG0="
},
{
"pname": "Microsoft.Extensions.Configuration.Abstractions",
"version": "10.0.1",
"hash": "sha256-s4PDp+vtzdxKIxnOT3+dDRoTDopyl8kqmmw4KDnkOtQ="
},
{
"pname": "Microsoft.Extensions.Configuration.Binder",
"version": "10.0.0",
"hash": "sha256-YSiWoA3VQR22k6+bSEAUqeG7UDzZlJfHWDTubUO5V8U="
},
{
"pname": "Microsoft.Extensions.Configuration.CommandLine",
"version": "10.0.0",
"hash": "sha256-ldTiRFqnv8/pA0gl6UR+4DDGAIZOf9+MhaLWOuKOXOI="
},
{
"pname": "Microsoft.Extensions.Configuration.EnvironmentVariables",
"version": "10.0.0",
"hash": "sha256-UayfeqrAmNyfOkuhcBKfj8UpjQqV/ZMqWrDyxCSG1MA="
},
{
"pname": "Microsoft.Extensions.Configuration.FileExtensions",
"version": "10.0.0",
"hash": "sha256-rN+3rqrHiTaBfHgP+E4dA8Qm2cFJPfbEcd93yKLsqlQ="
},
{
"pname": "Microsoft.Extensions.Configuration.Json",
"version": "10.0.0",
"hash": "sha256-VCFukgsxiQ2MFGE6RDMFTGopBHbcZL2t0ER7ENaFXRY="
},
{
"pname": "Microsoft.Extensions.Configuration.UserSecrets",
"version": "10.0.0",
"hash": "sha256-uIoIpbDPRMfFqT8Y6j/wHbFCAly6H1N9qpxnomRbHIo="
},
{
"pname": "Microsoft.Extensions.DependencyInjection",
"version": "10.0.0",
"hash": "sha256-LYm9hVlo/R9c2aAKHsDYJ5vY9U0+3Jvclme3ou3BtvQ="
},
{
"pname": "Microsoft.Extensions.DependencyInjection",
"version": "10.0.1",
"hash": "sha256-RKOB+zPrtQNUbJY/1jR54rKOM8KHPgynPExxugku3I8="
},
{
"pname": "Microsoft.Extensions.DependencyInjection",
"version": "9.0.0",
"hash": "sha256-dAH52PPlTLn7X+1aI/7npdrDzMEFPMXRv4isV1a+14k="
},
{
"pname": "Microsoft.Extensions.DependencyInjection.Abstractions",
"version": "10.0.0",
"hash": "sha256-9iodXP39YqgxomnOPOxd/mzbG0JfOSXzFoNU3omT2Ps="
},
{
"pname": "Microsoft.Extensions.DependencyInjection.Abstractions",
"version": "10.0.1",
"hash": "sha256-zNUpau51ds7iQTaSUTFtyTHIUoinYc129W50CnufMdQ="
},
{
"pname": "Microsoft.Extensions.DependencyInjection.Abstractions",
"version": "9.0.0",
"hash": "sha256-CncVwkKZ5CsIG2O0+OM9qXuYXh3p6UGyueTHSLDVL+c="
},
{
"pname": "Microsoft.Extensions.DependencyModel",
"version": "10.0.1",
"hash": "sha256-XIj2jEURe25YA4RhBSuCqQpic0YP+TZaO/dbBPCjad8="
},
{
"pname": "Microsoft.Extensions.Diagnostics",
"version": "10.0.0",
"hash": "sha256-o7QkCisEcFIh227qBUfWFci2ns4cgEpLqpX7YvHGToQ="
},
{
"pname": "Microsoft.Extensions.Diagnostics.Abstractions",
"version": "10.0.0",
"hash": "sha256-cix7QxQ/g3sj6reXu3jn0cRv2RijzceaLLkchEGTt5E="
},
{
"pname": "Microsoft.Extensions.FileProviders.Abstractions",
"version": "10.0.0",
"hash": "sha256-CHDs2HCN8QcfuYQpgNVszZ5dfXFe4yS9K2GoQXecc20="
},
{
"pname": "Microsoft.Extensions.FileProviders.Physical",
"version": "10.0.0",
"hash": "sha256-2Rw/cwBO+/A3QY2IjN/c8Y0LhtC1qTBL7VdJiD1J2UQ="
},
{
"pname": "Microsoft.Extensions.FileSystemGlobbing",
"version": "10.0.0",
"hash": "sha256-ETfVTdsdBtp69EggLg/AARTQW4lLQYVdVldXIQrsjZA="
},
{
"pname": "Microsoft.Extensions.Hosting",
"version": "10.0.0",
"hash": "sha256-tY0g6lCy2yFprE+NmriiU6FGmwpzxV8LqE0ZFNKIwuM="
},
{
"pname": "Microsoft.Extensions.Hosting.Abstractions",
"version": "10.0.0",
"hash": "sha256-Sub3Thay/+eR84cEODk/nPh1oYIYtawvDX6r0duReqo="
},
{
"pname": "Microsoft.Extensions.Logging",
"version": "10.0.0",
"hash": "sha256-P+zPAadLL63k/GqK34/qChqQjY9aIRxZfxlB9lqsSrs="
},
{
"pname": "Microsoft.Extensions.Logging",
"version": "10.0.1",
"hash": "sha256-zuLP3SIpCToMOlIPOEv3Kq8y/minecd8k8GSkxFo13E="
},
{
"pname": "Microsoft.Extensions.Logging",
"version": "9.0.0",
"hash": "sha256-kR16c+N8nQrWeYLajqnXPg7RiXjZMSFLnKLEs4VfjcM="
},
{
"pname": "Microsoft.Extensions.Logging.Abstractions",
"version": "10.0.0",
"hash": "sha256-BnhgGZc01HwTSxogavq7Ueq4V7iMA3wPnbfRwQ4RhGk="
},
{
"pname": "Microsoft.Extensions.Logging.Abstractions",
"version": "10.0.1",
"hash": "sha256-NRk0feNE1fgi/hyO0AVDbSGJQRT+9yte6Lpm4Hz/2Bs="
},
{
"pname": "Microsoft.Extensions.Logging.Abstractions",
"version": "9.0.0",
"hash": "sha256-iBTs9twjWXFeERt4CErkIIcoJZU1jrd1RWCI8V5j7KU="
},
{
"pname": "Microsoft.Extensions.Logging.Configuration",
"version": "10.0.0",
"hash": "sha256-7/TWO1aq8hdgbcTEKDBWIjgSC9KpFN3kRnMX+12bOkU="
},
{
"pname": "Microsoft.Extensions.Logging.Console",
"version": "10.0.0",
"hash": "sha256-Rsblo7GSMTOr43876KkdvqS6wU9Typ1yoFK3tL50CBk="
},
{
"pname": "Microsoft.Extensions.Logging.Debug",
"version": "10.0.0",
"hash": "sha256-n/+KRVlsgKm17cJImaoAPHAObHpApW/hf6mMsQFGrvY="
},
{
"pname": "Microsoft.Extensions.Logging.EventLog",
"version": "10.0.0",
"hash": "sha256-4RJ2r80RtI3QUAhCAYbGnA0YcTmouqtZvQU9o3CrB38="
},
{
"pname": "Microsoft.Extensions.Logging.EventSource",
"version": "10.0.0",
"hash": "sha256-tqC13Qwkf4x14iGxOYlXTyeoN8KPVX+mupv2LdpzGHo="
},
{
"pname": "Microsoft.Extensions.Options",
"version": "10.0.0",
"hash": "sha256-j5MOqZSKeUtxxzmZjzZMGy0vELHdvPraqwTQQQNVsYA="
},
{
"pname": "Microsoft.Extensions.Options",
"version": "10.0.1",
"hash": "sha256-vBiSS1vqAC7eDrpJNT4H3A9qLikCSAepnNRbry0mKnk="
},
{
"pname": "Microsoft.Extensions.Options",
"version": "9.0.0",
"hash": "sha256-DT5euAQY/ItB5LPI8WIp6Dnd0lSvBRP35vFkOXC68ck="
},
{
"pname": "Microsoft.Extensions.Options.ConfigurationExtensions",
"version": "10.0.0",
"hash": "sha256-XGAs5DxMvWnmjX8dqRwKY0vsuS40SHvsfJqB1rO4L7k="
},
{
"pname": "Microsoft.Extensions.Primitives",
"version": "10.0.0",
"hash": "sha256-Dup08KcptLjlnpN5t5//+p4n8FUTgRAq4n/w1s6us+I="
},
{
"pname": "Microsoft.Extensions.Primitives",
"version": "10.0.1",
"hash": "sha256-EXmukq09erT4s+miQpBSYy3IY4HxxKlwEPL43/KoyEc="
},
{
"pname": "Microsoft.Extensions.Primitives",
"version": "9.0.0",
"hash": "sha256-ZNLusK1CRuq5BZYZMDqaz04PIKScE2Z7sS2tehU7EJs="
},
{
"pname": "Microsoft.NET.StringTools",
"version": "17.14.28",
"hash": "sha256-UzREyvDxkiOQ4cEOQ5UCjkwXGrldIDCcbefECTPGjXI="
},
{
"pname": "Microsoft.NET.StringTools",
"version": "17.7.2",
"hash": "sha256-hQE07TCgcQuyu9ZHVq2gPDb0+xe8ECJUdrgh17bJP4o="
},
{
"pname": "Mono.TextTemplating",
"version": "3.0.0",
"hash": "sha256-VlgGDvgNZb7MeBbIZ4DE2Nn/j2aD9k6XqNHnASUSDr0="
},
{
"pname": "Newtonsoft.Json",
"version": "13.0.3",
"hash": "sha256-hy/BieY4qxBWVVsDqqOPaLy1QobiIapkbrESm6v2PHc="
},
{
"pname": "Npgsql",
"version": "10.0.0",
"hash": "sha256-UVKz9dH/rVCCbMyFdqA31RYpht1XgDRLIqUy0Dp9ACQ="
},
{
"pname": "Npgsql.EntityFrameworkCore.PostgreSQL",
"version": "10.0.0",
"hash": "sha256-XIJxnTMektQVP1qtslEIGbmBGrIQsvjQjCMRTs9UIbg="
},
{
"pname": "System.CodeDom",
"version": "6.0.0",
"hash": "sha256-uPetUFZyHfxjScu5x4agjk9pIhbCkt5rG4Axj25npcQ="
},
{
"pname": "System.CodeDom",
"version": "7.0.0",
"hash": "sha256-7IPt39cY+0j0ZcRr/J45xPtEjnSXdUJ/5ai3ebaYQiE="
},
{
"pname": "System.CodeDom",
"version": "9.0.0",
"hash": "sha256-578lcBgswW0eM16r0EnJzfGodPx86RxxFoZHc2PSzsw="
},
{
"pname": "System.Composition",
"version": "9.0.0",
"hash": "sha256-FehOkQ2u1p8mQ0/wn3cZ+24HjhTLdck8VZYWA1CcgbM="
},
{
"pname": "System.Composition.AttributedModel",
"version": "9.0.0",
"hash": "sha256-a7y7H6zj+kmYkllNHA402DoVfY9IaqC3Ooys8Vzl24M="
},
{
"pname": "System.Composition.Convention",
"version": "9.0.0",
"hash": "sha256-tw4vE5JRQ60ubTZBbxoMPhtjOQCC3XoDFUH7NHO7o8U="
},
{
"pname": "System.Composition.Hosting",
"version": "9.0.0",
"hash": "sha256-oOxU+DPEEfMCuNLgW6wSkZp0JY5gYt44FJNnWt+967s="
},
{
"pname": "System.Composition.Runtime",
"version": "9.0.0",
"hash": "sha256-AyIe+di1TqwUBbSJ/sJ8Q8tzsnTN+VBdJw4K8xZz43s="
},
{
"pname": "System.Composition.TypedParts",
"version": "9.0.0",
"hash": "sha256-F5fpTUs3Rr7yP/NyIzr+Xn5NdTXXp8rrjBnF9UBBUog="
},
{
"pname": "System.Configuration.ConfigurationManager",
"version": "7.0.0",
"hash": "sha256-SgBexTTjRn23uuXvkzO0mz0qOfA23MiS4Wv+qepMLZE="
},
{
"pname": "System.Configuration.ConfigurationManager",
"version": "9.0.0",
"hash": "sha256-+pLnTC0YDP6Kjw5DVBiFrV/Q3x5is/+6N6vAtjvhVWk="
},
{
"pname": "System.Diagnostics.EventLog",
"version": "10.0.0",
"hash": "sha256-pN3tld926Fp0n5ZNjjzIJviUQrynlOAB0vhc1aoso6E="
},
{
"pname": "System.Diagnostics.EventLog",
"version": "9.0.0",
"hash": "sha256-tPvt6yoAp56sK/fe+/ei8M65eavY2UUhRnbrREj/Ems="
},
{
"pname": "System.Formats.Nrbf",
"version": "9.0.0",
"hash": "sha256-c4qf6CocQUZB0ySGQd8s15PXY7xfrjQqMGXxkwytKyw="
},
{
"pname": "System.Reflection.MetadataLoadContext",
"version": "7.0.0",
"hash": "sha256-VYl6SFD130K9Aw4eJH16ApJ9Sau4Xu0dcxEip2veuTI="
},
{
"pname": "System.Resources.Extensions",
"version": "9.0.0",
"hash": "sha256-y2gLEMuAy6QfEyNJxABC/ayMWGnwlpX735jsUQLktho="
},
{
"pname": "System.Security.Cryptography.Pkcs",
"version": "7.0.0",
"hash": "sha256-3J3vL9hcKSuZjT2GKappa2A9p2xJm1nH2asTNAl8ZCA="
},
{
"pname": "System.Security.Cryptography.Pkcs",
"version": "7.0.2",
"hash": "sha256-qS5Z/Yo8J+f3ExVX5Qkcpj1Z57oUZqz5rWa1h5bVpl8="
},
{
"pname": "System.Security.Cryptography.Pkcs",
"version": "9.0.0",
"hash": "sha256-AjG14mGeSc2Ka4QSelGBM1LrGBW3VJX60lnihKyJjGY="
},
{
"pname": "System.Security.Cryptography.ProtectedData",
"version": "9.0.0",
"hash": "sha256-gPgPU7k/InTqmXoRzQfUMEKL3QuTnOKowFqmXTnWaBQ="
},
{
"pname": "System.Security.Cryptography.Xml",
"version": "7.0.1",
"hash": "sha256-CH8+JVC8LyCSW75/6ZQ7ecMbSOAE1c16z4dG8JTp01w="
},
{
"pname": "System.Security.Cryptography.Xml",
"version": "9.0.0",
"hash": "sha256-SQJWwAFrJUddEU6JiZB52FM9tGjRlJAYH8oYVzG5IJU="
},
{
"pname": "System.Security.Permissions",
"version": "7.0.0",
"hash": "sha256-DOFoX+AKRmrkllykHheR8FfUXYx/Ph+I/HYuReQydXI="
},
{
"pname": "System.Security.Permissions",
"version": "9.0.0",
"hash": "sha256-BFrA9ottmQtLIAiKiGRbfSUpzNJwuaOCeFRDN4Z0ku0="
},
{
"pname": "System.Windows.Extensions",
"version": "9.0.0",
"hash": "sha256-RErD+Ju15qtnwdwB7E0SjjJGAnhXwJyC7UPcl24Z3Vs="
}
]

View File

@@ -0,0 +1,64 @@
using System.Text.Json.Serialization;
namespace Spacebar.ConfigModel;
public class Config
{
[JsonPropertyName("admin")] public EndpointConfig Admin { get; set; } = null!;
[JsonPropertyName("api")] public EndpointConfig Api { get; set; } = null!;
[JsonPropertyName("gateway")] public EndpointConfig Gateway { get; set; } = null!;
[JsonPropertyName("cdn")] public EndpointConfig Cdn { get; set; } = null!;
public Config ReadFromKv(Dictionary<string, object?> kv)
{
// to object
foreach (var (key, value) in kv)
{
switch (key.Split('_', 2)[0])
{
default:
Console.WriteLine($"Unrecognized config key prefix: {key}");
continue;
}
}
return this;
}
}
public class EndpointConfig
{
[JsonPropertyName("endpointPrivate")] public string? EndpointPrivate { get; set; }
[JsonPropertyName("endpointPublic")] public string? EndpointPublic { get; set; }
public EndpointConfig ReadFromKv(Dictionary<string, object?> kv, string prefix)
{
foreach (var (key, value) in kv)
{
if (!key.StartsWith(prefix + "_")) continue;
var subKey = key[(prefix + "_").Length..];
switch (subKey)
{
case "ENDPOINT_PRIVATE":
EndpointPrivate = value?.ToString();
break;
case "ENDPOINT_PUBLIC":
EndpointPublic = value?.ToString();
break;
default:
Console.WriteLine($"Unrecognized config key: {key}");
break;
}
}
return this;
}
}
public class ApiConfig : EndpointConfig
{
[JsonPropertyName("activeVersions")] public List<string> ActiveVersions { get; set; } = null!;
[JsonPropertyName("defaultVersion")] public string DefaultVersion { get; set; } = null!;
}

View File

@@ -0,0 +1,119 @@
using System.Text.Json;
using System.Text.Json.Nodes;
namespace Spacebar.ConfigModel.Extensions;
public static class JsonExtensions
{
extension(Dictionary<string, string?> kv)
{
public JsonObject ToNestedJsonObject(string path = "$")
{
JsonObject root = new();
// group by prefix
var groups = kv.GroupBy(kvItem => kvItem.Key.Split('_', 2)[0]);
foreach (var group in groups)
{
var prefix = group.Key;
if (group.Count() == 1 && !group.First().Key.Contains('_'))
{
root[prefix] = group.First().Value == null ? null : JsonNode.Parse(group.First().Value!);
Console.WriteLine("[CONFIG] Single Key: {0}.{1}, Value: {2}", path, prefix, root[prefix]?.ToJsonString());
continue;
}
var nestedValues = group.Where(x => x.Key.Contains('_')).ToDictionary(kvItem => kvItem.Key[(prefix.Length + 1)..], kvItem => kvItem.Value);
if (nestedValues.All(x => int.TryParse(x.Key.Split('_')[0], out _)))
{
Console.WriteLine("[CONFIG] Array Key Detected: {0}.{1}", path, prefix);
var arr = new JsonArray();
if (nestedValues.All(x => x.Key.Contains('_')))
{
var objs = nestedValues.GroupBy(x => x.Key.Split('_', 2)[0]);
foreach (var objGroup in objs.OrderBy(x => int.Parse(x.Key)))
{
var i = objGroup.Key;
var objValues = objGroup.ToDictionary(kvItem => kvItem.Key[(i.Length + 1)..], kvItem => kvItem.Value);
var obj = objValues.ToNestedJsonObject($"{path}.{prefix}[{i}]");
arr.Add(obj);
Console.WriteLine($" - ${path}.{prefix}[{i}]: {obj.ToJsonString()}");
}
}
else
foreach (var (i, arrayItem) in nestedValues.OrderBy(x => int.Parse(x.Key)))
{
arr.Add(arrayItem == null ? null : JsonNode.Parse(arrayItem));
Console.WriteLine($" - {path}.{prefix}[{i}]: {arrayItem}");
}
root[prefix] = arr;
}
else
{
root[prefix] = nestedValues.ToNestedJsonObject($"{path}.{prefix}");
}
}
return root;
}
}
extension(JsonObject jo)
{
public Dictionary<string, string?> ToFlatKv(string path = "$")
{
var kv = new Dictionary<string, string?>();
var jso = new JsonSerializerOptions()
{
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
};
foreach (var (key, value) in jo)
{
var currentPath = path == "$" ? key : $"{path}_{key}";
switch (value)
{
case JsonObject nestedObj:
var nestedKv = nestedObj.ToFlatKv(currentPath);
foreach (var (nestedKey, nestedValue) in nestedKv)
{
kv[nestedKey] = nestedValue;
}
break;
case JsonArray arr:
for (int i = 0; i < arr.Count; i++)
{
var item = arr[i];
var itemPath = $"{currentPath}_{i}";
switch (item)
{
case JsonObject arrObj:
var arrObjKv = arrObj.ToFlatKv(itemPath);
foreach (var (arrObjKey, arrObjValue) in arrObjKv)
{
kv[arrObjKey] = arrObjValue;
}
break;
default:
kv[itemPath] = item?.ToJsonString(jso);
break;
}
}
break;
default:
Console.WriteLine(value?.GetType());
kv[currentPath] = value?.ToJsonString(jso);
break;
}
}
return kv;
}
}
}

View File

@@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,362 @@
[
{
"pname": "Humanizer.Core",
"version": "2.14.1",
"hash": "sha256-EXvojddPu+9JKgOG9NSQgUTfWq1RpOYw7adxDPKDJ6o="
},
{
"pname": "Microsoft.Build",
"version": "17.7.2",
"hash": "sha256-k35nFdPxC8t0zAltVSmAJtsepp/ubNIjPOsJ6k8jSqM="
},
{
"pname": "Microsoft.Build.Framework",
"version": "17.14.28",
"hash": "sha256-7RzEyIipumafwLW1xN1q23114NafG6PT0+RADElNsiM="
},
{
"pname": "Microsoft.Build.Framework",
"version": "17.7.2",
"hash": "sha256-fNWmVQYFTJDveAGmxEdNqJRAczV6+Ep8RA8clKBJFqw="
},
{
"pname": "Microsoft.Build.Tasks.Core",
"version": "17.14.28",
"hash": "sha256-M9zRXYijH2HtLlRXbrUK1a1LQ9zkT+DC9ZmMiiVZwv0="
},
{
"pname": "Microsoft.Build.Tasks.Core",
"version": "17.7.2",
"hash": "sha256-OrV/qWgZHzGlNUmaSfX5wDBcmg1aQeF3/OUHpSH+uZU="
},
{
"pname": "Microsoft.Build.Utilities.Core",
"version": "17.14.28",
"hash": "sha256-VFfO+UpyTpw2X/qiCCOCYzvMLuu7B+XVSSpJZQLkPzU="
},
{
"pname": "Microsoft.Build.Utilities.Core",
"version": "17.7.2",
"hash": "sha256-oatF0KfuP1nb4+OLNKg2/R/ZLO4EiACaO5leaxMEY4A="
},
{
"pname": "Microsoft.CodeAnalysis.Analyzers",
"version": "3.11.0",
"hash": "sha256-hQ2l6E6PO4m7i+ZsfFlEx+93UsLPo4IY3wDkNG11/Sw="
},
{
"pname": "Microsoft.CodeAnalysis.Common",
"version": "4.14.0",
"hash": "sha256-ne/zxH3GqoGB4OemnE8oJElG5mai+/67ASaKqwmL2BE="
},
{
"pname": "Microsoft.CodeAnalysis.CSharp",
"version": "4.14.0",
"hash": "sha256-5Mzj3XkYYLkwDWh17r1NEXSbXwwWYQPiOmkSMlgo1JY="
},
{
"pname": "Microsoft.CodeAnalysis.CSharp.Workspaces",
"version": "4.14.0",
"hash": "sha256-aNbV1a0yYBs0fpQawG6LXcbyoE8en+YFSpV5vcYE4J4="
},
{
"pname": "Microsoft.CodeAnalysis.Workspaces.Common",
"version": "4.14.0",
"hash": "sha256-0YfeaJe01WBUm9avy4a8FacQJXA1NkpnDpiXu4yz88I="
},
{
"pname": "Microsoft.CodeAnalysis.Workspaces.MSBuild",
"version": "4.14.0",
"hash": "sha256-5SJfpRqzqCK0UbkmAaJpA/r1XJb0YAriMMeQHYC4d+o="
},
{
"pname": "Microsoft.EntityFrameworkCore",
"version": "10.0.0",
"hash": "sha256-xfgrlxhtOkQwF5Q7j8gSm41URJiH8IuJ/T/Dh88++hE="
},
{
"pname": "Microsoft.EntityFrameworkCore",
"version": "10.0.1",
"hash": "sha256-IxA+/nDA6hZkUm9bDT6bRu8+9qeHA3gbTvIhR9Ncg4w="
},
{
"pname": "Microsoft.EntityFrameworkCore.Abstractions",
"version": "10.0.0",
"hash": "sha256-UDgZbRQcGPaKsE53EH6bvJiv+Q4KSxAbnsVhTVFGG4Q="
},
{
"pname": "Microsoft.EntityFrameworkCore.Abstractions",
"version": "10.0.1",
"hash": "sha256-FMGXhAAgcVSedV0/GmUVqAwoiRzFJil9mQYr6eNgowg="
},
{
"pname": "Microsoft.EntityFrameworkCore.Analyzers",
"version": "10.0.0",
"hash": "sha256-7Q0jYJO50cqGI+u6gLpootbB8GZvgsgtg0F9FZI1jig="
},
{
"pname": "Microsoft.EntityFrameworkCore.Analyzers",
"version": "10.0.1",
"hash": "sha256-O949vr98WoSRXtiIo0ZI6dz2cibIBKbiuC+mQOe9bV4="
},
{
"pname": "Microsoft.EntityFrameworkCore.Design",
"version": "10.0.1",
"hash": "sha256-GGNZIGNEMhSGaMRFkRN4bOuCUBs5YVnX8klXarm319U="
},
{
"pname": "Microsoft.EntityFrameworkCore.Relational",
"version": "10.0.0",
"hash": "sha256-vOP2CE5YA551BlpbOuIy6RuAiAEPEpCVS1cEE33/zN4="
},
{
"pname": "Microsoft.EntityFrameworkCore.Relational",
"version": "10.0.1",
"hash": "sha256-zLgxr/iW9HP8Fip1IDgr7X0Ar8OWKDvVmoEt65gG6VY="
},
{
"pname": "Microsoft.Extensions.Caching.Abstractions",
"version": "10.0.1",
"hash": "sha256-qVLAEqxPK/dNq+z1a6D9NqdcSg/18sfzZhlBWMkqV/A="
},
{
"pname": "Microsoft.Extensions.Caching.Memory",
"version": "10.0.0",
"hash": "sha256-AMgDSm1k6q0s17spGtyR5q8nAqUFDOxl/Fe38f9M+d4="
},
{
"pname": "Microsoft.Extensions.Caching.Memory",
"version": "10.0.1",
"hash": "sha256-Qb7xK6VEZDas0lJFaW1suKdFjtkSYwLHHxkQEfWIU2A="
},
{
"pname": "Microsoft.Extensions.Configuration.Abstractions",
"version": "10.0.1",
"hash": "sha256-s4PDp+vtzdxKIxnOT3+dDRoTDopyl8kqmmw4KDnkOtQ="
},
{
"pname": "Microsoft.Extensions.DependencyInjection",
"version": "10.0.1",
"hash": "sha256-RKOB+zPrtQNUbJY/1jR54rKOM8KHPgynPExxugku3I8="
},
{
"pname": "Microsoft.Extensions.DependencyInjection",
"version": "9.0.0",
"hash": "sha256-dAH52PPlTLn7X+1aI/7npdrDzMEFPMXRv4isV1a+14k="
},
{
"pname": "Microsoft.Extensions.DependencyInjection.Abstractions",
"version": "10.0.1",
"hash": "sha256-zNUpau51ds7iQTaSUTFtyTHIUoinYc129W50CnufMdQ="
},
{
"pname": "Microsoft.Extensions.DependencyInjection.Abstractions",
"version": "9.0.0",
"hash": "sha256-CncVwkKZ5CsIG2O0+OM9qXuYXh3p6UGyueTHSLDVL+c="
},
{
"pname": "Microsoft.Extensions.DependencyModel",
"version": "10.0.1",
"hash": "sha256-XIj2jEURe25YA4RhBSuCqQpic0YP+TZaO/dbBPCjad8="
},
{
"pname": "Microsoft.Extensions.Logging",
"version": "10.0.0",
"hash": "sha256-P+zPAadLL63k/GqK34/qChqQjY9aIRxZfxlB9lqsSrs="
},
{
"pname": "Microsoft.Extensions.Logging",
"version": "10.0.1",
"hash": "sha256-zuLP3SIpCToMOlIPOEv3Kq8y/minecd8k8GSkxFo13E="
},
{
"pname": "Microsoft.Extensions.Logging",
"version": "9.0.0",
"hash": "sha256-kR16c+N8nQrWeYLajqnXPg7RiXjZMSFLnKLEs4VfjcM="
},
{
"pname": "Microsoft.Extensions.Logging.Abstractions",
"version": "10.0.0",
"hash": "sha256-BnhgGZc01HwTSxogavq7Ueq4V7iMA3wPnbfRwQ4RhGk="
},
{
"pname": "Microsoft.Extensions.Logging.Abstractions",
"version": "10.0.1",
"hash": "sha256-NRk0feNE1fgi/hyO0AVDbSGJQRT+9yte6Lpm4Hz/2Bs="
},
{
"pname": "Microsoft.Extensions.Logging.Abstractions",
"version": "9.0.0",
"hash": "sha256-iBTs9twjWXFeERt4CErkIIcoJZU1jrd1RWCI8V5j7KU="
},
{
"pname": "Microsoft.Extensions.Options",
"version": "10.0.1",
"hash": "sha256-vBiSS1vqAC7eDrpJNT4H3A9qLikCSAepnNRbry0mKnk="
},
{
"pname": "Microsoft.Extensions.Options",
"version": "9.0.0",
"hash": "sha256-DT5euAQY/ItB5LPI8WIp6Dnd0lSvBRP35vFkOXC68ck="
},
{
"pname": "Microsoft.Extensions.Primitives",
"version": "10.0.1",
"hash": "sha256-EXmukq09erT4s+miQpBSYy3IY4HxxKlwEPL43/KoyEc="
},
{
"pname": "Microsoft.Extensions.Primitives",
"version": "9.0.0",
"hash": "sha256-ZNLusK1CRuq5BZYZMDqaz04PIKScE2Z7sS2tehU7EJs="
},
{
"pname": "Microsoft.NET.StringTools",
"version": "17.14.28",
"hash": "sha256-UzREyvDxkiOQ4cEOQ5UCjkwXGrldIDCcbefECTPGjXI="
},
{
"pname": "Microsoft.NET.StringTools",
"version": "17.7.2",
"hash": "sha256-hQE07TCgcQuyu9ZHVq2gPDb0+xe8ECJUdrgh17bJP4o="
},
{
"pname": "Mono.TextTemplating",
"version": "3.0.0",
"hash": "sha256-VlgGDvgNZb7MeBbIZ4DE2Nn/j2aD9k6XqNHnASUSDr0="
},
{
"pname": "Newtonsoft.Json",
"version": "13.0.3",
"hash": "sha256-hy/BieY4qxBWVVsDqqOPaLy1QobiIapkbrESm6v2PHc="
},
{
"pname": "Npgsql",
"version": "10.0.0",
"hash": "sha256-UVKz9dH/rVCCbMyFdqA31RYpht1XgDRLIqUy0Dp9ACQ="
},
{
"pname": "Npgsql.EntityFrameworkCore.PostgreSQL",
"version": "10.0.0",
"hash": "sha256-XIJxnTMektQVP1qtslEIGbmBGrIQsvjQjCMRTs9UIbg="
},
{
"pname": "System.CodeDom",
"version": "6.0.0",
"hash": "sha256-uPetUFZyHfxjScu5x4agjk9pIhbCkt5rG4Axj25npcQ="
},
{
"pname": "System.CodeDom",
"version": "7.0.0",
"hash": "sha256-7IPt39cY+0j0ZcRr/J45xPtEjnSXdUJ/5ai3ebaYQiE="
},
{
"pname": "System.CodeDom",
"version": "9.0.0",
"hash": "sha256-578lcBgswW0eM16r0EnJzfGodPx86RxxFoZHc2PSzsw="
},
{
"pname": "System.Composition",
"version": "9.0.0",
"hash": "sha256-FehOkQ2u1p8mQ0/wn3cZ+24HjhTLdck8VZYWA1CcgbM="
},
{
"pname": "System.Composition.AttributedModel",
"version": "9.0.0",
"hash": "sha256-a7y7H6zj+kmYkllNHA402DoVfY9IaqC3Ooys8Vzl24M="
},
{
"pname": "System.Composition.Convention",
"version": "9.0.0",
"hash": "sha256-tw4vE5JRQ60ubTZBbxoMPhtjOQCC3XoDFUH7NHO7o8U="
},
{
"pname": "System.Composition.Hosting",
"version": "9.0.0",
"hash": "sha256-oOxU+DPEEfMCuNLgW6wSkZp0JY5gYt44FJNnWt+967s="
},
{
"pname": "System.Composition.Runtime",
"version": "9.0.0",
"hash": "sha256-AyIe+di1TqwUBbSJ/sJ8Q8tzsnTN+VBdJw4K8xZz43s="
},
{
"pname": "System.Composition.TypedParts",
"version": "9.0.0",
"hash": "sha256-F5fpTUs3Rr7yP/NyIzr+Xn5NdTXXp8rrjBnF9UBBUog="
},
{
"pname": "System.Configuration.ConfigurationManager",
"version": "7.0.0",
"hash": "sha256-SgBexTTjRn23uuXvkzO0mz0qOfA23MiS4Wv+qepMLZE="
},
{
"pname": "System.Configuration.ConfigurationManager",
"version": "9.0.0",
"hash": "sha256-+pLnTC0YDP6Kjw5DVBiFrV/Q3x5is/+6N6vAtjvhVWk="
},
{
"pname": "System.Diagnostics.EventLog",
"version": "9.0.0",
"hash": "sha256-tPvt6yoAp56sK/fe+/ei8M65eavY2UUhRnbrREj/Ems="
},
{
"pname": "System.Formats.Nrbf",
"version": "9.0.0",
"hash": "sha256-c4qf6CocQUZB0ySGQd8s15PXY7xfrjQqMGXxkwytKyw="
},
{
"pname": "System.Reflection.MetadataLoadContext",
"version": "7.0.0",
"hash": "sha256-VYl6SFD130K9Aw4eJH16ApJ9Sau4Xu0dcxEip2veuTI="
},
{
"pname": "System.Resources.Extensions",
"version": "9.0.0",
"hash": "sha256-y2gLEMuAy6QfEyNJxABC/ayMWGnwlpX735jsUQLktho="
},
{
"pname": "System.Security.Cryptography.Pkcs",
"version": "7.0.0",
"hash": "sha256-3J3vL9hcKSuZjT2GKappa2A9p2xJm1nH2asTNAl8ZCA="
},
{
"pname": "System.Security.Cryptography.Pkcs",
"version": "7.0.2",
"hash": "sha256-qS5Z/Yo8J+f3ExVX5Qkcpj1Z57oUZqz5rWa1h5bVpl8="
},
{
"pname": "System.Security.Cryptography.Pkcs",
"version": "9.0.0",
"hash": "sha256-AjG14mGeSc2Ka4QSelGBM1LrGBW3VJX60lnihKyJjGY="
},
{
"pname": "System.Security.Cryptography.ProtectedData",
"version": "9.0.0",
"hash": "sha256-gPgPU7k/InTqmXoRzQfUMEKL3QuTnOKowFqmXTnWaBQ="
},
{
"pname": "System.Security.Cryptography.Xml",
"version": "7.0.1",
"hash": "sha256-CH8+JVC8LyCSW75/6ZQ7ecMbSOAE1c16z4dG8JTp01w="
},
{
"pname": "System.Security.Cryptography.Xml",
"version": "9.0.0",
"hash": "sha256-SQJWwAFrJUddEU6JiZB52FM9tGjRlJAYH8oYVzG5IJU="
},
{
"pname": "System.Security.Permissions",
"version": "7.0.0",
"hash": "sha256-DOFoX+AKRmrkllykHheR8FfUXYx/Ph+I/HYuReQydXI="
},
{
"pname": "System.Security.Permissions",
"version": "9.0.0",
"hash": "sha256-BFrA9ottmQtLIAiKiGRbfSUpzNJwuaOCeFRDN4Z0ku0="
},
{
"pname": "System.Windows.Extensions",
"version": "9.0.0",
"hash": "sha256-RErD+Ju15qtnwdwB7E0SjjJGAnhXwJyC7UPcl24Z3Vs="
}
]

View File

@@ -5,15 +5,15 @@ VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spacebar.Db", "Spacebar.Db\Spacebar.Db.csproj", "{524849DF-93BC-4632-B6C2-D05552C13887}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spacebar.AdminAPI", "Spacebar.AdminAPI\Spacebar.AdminAPI.csproj", "{00E58C53-0AC1-4113-8CCF-D299861EA8D3}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spacebar.AdminApi", "Spacebar.AdminApi\Spacebar.AdminApi.csproj", "{00E58C53-0AC1-4113-8CCF-D299861EA8D3}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Utilities", "Utilities", "{04787943-EBB6-4DE4-96D5-4CFB4A2CEE99}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spacebar.RabbitMqUtilities", "Utilities\Spacebar.RabbitMqUtilities\Spacebar.RabbitMqUtilities.csproj", "{F4E179D1-A3EB-4A1D-9C11-E7019F4B1EE2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spacebar.AdminAPITest", "Utilities\Spacebar.AdminAPITest\Spacebar.AdminAPITest.csproj", "{374314B2-7149-4316-8750-4E1E7BF6C3B4}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spacebar.AdminApiTest", "Utilities\Spacebar.AdminApiTest\Spacebar.AdminApiTest.csproj", "{374314B2-7149-4316-8750-4E1E7BF6C3B4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spacebar.AdminAPI.TestClient", "Utilities\Spacebar.AdminAPI.TestClient\Spacebar.AdminAPI.TestClient.csproj", "{498DAD05-336E-4851-ABD8-4E7CCA8312B0}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spacebar.AdminApi.TestClient", "Utilities\Spacebar.AdminApi.TestClient\Spacebar.AdminApi.TestClient.csproj", "{498DAD05-336E-4851-ABD8-4E7CCA8312B0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spacebar.AdminApi.Models", "Spacebar.AdminApi.Models\Spacebar.AdminApi.Models.csproj", "{5F138C70-EAFA-4C7C-8B90-EFB9624B235C}"
EndProject
@@ -21,6 +21,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spacebar.AdminApi.PrepareTe
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spacebar.CleanSettingsRows", "Spacebar.CleanSettingsRows\Spacebar.CleanSettingsRows.csproj", "{9B41FAC1-4427-487C-BF3F-69554848DEBF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spacebar.ConfigModel", "Spacebar.ConfigModel\Spacebar.ConfigModel.csproj", "{EC5C6A71-458A-4A1D-BE96-CCB84FF4AF1B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConfigTest", "ConfigTest\ConfigTest.csproj", "{3BB51E17-8D3E-42FE-AAE6-C33DA5D8D323}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -62,6 +66,14 @@ Global
{9B41FAC1-4427-487C-BF3F-69554848DEBF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9B41FAC1-4427-487C-BF3F-69554848DEBF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9B41FAC1-4427-487C-BF3F-69554848DEBF}.Release|Any CPU.Build.0 = Release|Any CPU
{EC5C6A71-458A-4A1D-BE96-CCB84FF4AF1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EC5C6A71-458A-4A1D-BE96-CCB84FF4AF1B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EC5C6A71-458A-4A1D-BE96-CCB84FF4AF1B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EC5C6A71-458A-4A1D-BE96-CCB84FF4AF1B}.Release|Any CPU.Build.0 = Release|Any CPU
{3BB51E17-8D3E-42FE-AAE6-C33DA5D8D323}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3BB51E17-8D3E-42FE-AAE6-C33DA5D8D323}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3BB51E17-8D3E-42FE-AAE6-C33DA5D8D323}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3BB51E17-8D3E-42FE-AAE6-C33DA5D8D323}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{F4E179D1-A3EB-4A1D-9C11-E7019F4B1EE2} = {04787943-EBB6-4DE4-96D5-4CFB4A2CEE99}

View File

@@ -2,7 +2,7 @@ using System.Collections.Frozen;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace Spacebar.AdminAPI.TestClient.Classes.OpenAPI;
namespace Spacebar.AdminApi.TestClient.Classes.OpenAPI;
public class OpenApiSchema {
[JsonPropertyName("openapi")]

View File

@@ -1,6 +1,6 @@
<div class="top-row ps-3 navbar navbar-dark">
<div class="container-fluid">
<a class="navbar-brand" href="">Spacebar.AdminAPI.TestClient</a>
<a class="navbar-brand" href="">Spacebar.AdminApi.TestClient</a>
<button title="Navigation menu" class="navbar-toggler" @onclick="ToggleNavMenu">
<span class="navbar-toggler-icon"></span>
</button>

View File

@@ -2,7 +2,7 @@
@using System.Net.Http.Headers
@using System.Reflection
@using Spacebar.AdminApi.Models
@using Spacebar.AdminAPI.TestClient.Services
@using Spacebar.AdminApi.TestClient.Services
@using ArcaneLibs.Blazor.Components
@using ArcaneLibs.Extensions
@inject Config Config

View File

@@ -1,6 +1,6 @@
@page "/"
@using System.Net.Http.Headers
@using Spacebar.AdminAPI.TestClient.Services
@using Spacebar.AdminApi.TestClient.Services
@inject Config Config
@inject ILocalStorageService LocalStorage

View File

@@ -1,11 +1,10 @@
@page "/HttpTestClient"
@using System.Collections.Immutable
@using System.Text.Json
@using ArcaneLibs.Blazor.Components
@using ArcaneLibs.Extensions
@using Spacebar.AdminAPI.TestClient.Classes.OpenAPI
@using Spacebar.AdminAPI.TestClient.Pages.HttpTestClientParts
@using Spacebar.AdminAPI.TestClient.Services
@using Spacebar.AdminApi.TestClient.Classes.OpenAPI
@using Spacebar.AdminApi.TestClient.Pages.HttpTestClientParts
@using Spacebar.AdminApi.TestClient.Services
@inject Config Config
<h3>HttpTestClient</h3>

View File

@@ -1,5 +1,5 @@
@using ArcaneLibs.Extensions
@using Spacebar.AdminAPI.TestClient.Classes.OpenAPI
@using Spacebar.AdminApi.TestClient.Classes.OpenAPI
<span title="@Parameter.ToJson()">@Summary</span>
@if (Parameter.Name != Parameter.Description && !string.IsNullOrWhiteSpace(Parameter.Description)) {
<i> - @Parameter.Description</i>

View File

@@ -1,6 +1,6 @@
@page "/Login"
@using System.Text.Json.Nodes
@using Spacebar.AdminAPI.TestClient.Services
@using Spacebar.AdminApi.TestClient.Services
@inject ILocalStorageService LocalStorage
@inject Config Config
@inject NavigationManager Navigation

View File

@@ -2,7 +2,7 @@
@using System.Net.Http.Headers
@using System.Reflection
@using Spacebar.AdminApi.Models
@using Spacebar.AdminAPI.TestClient.Services
@using Spacebar.AdminApi.TestClient.Services
@using ArcaneLibs.Blazor.Components
@inject Config Config
@inject ILocalStorageService LocalStorage

View File

@@ -2,7 +2,7 @@
@using System.Net.Http.Headers
@using System.Reflection
@using Spacebar.AdminApi.Models
@using Spacebar.AdminAPI.TestClient.Services
@using Spacebar.AdminApi.TestClient.Services
@using ArcaneLibs.Blazor.Components
@using ArcaneLibs.Extensions
@inject Config Config

View File

@@ -4,7 +4,7 @@
@using System.Text.Json.Nodes
@using ArcaneLibs.Extensions
@using Spacebar.AdminApi.Models
@using Spacebar.AdminAPI.TestClient.Services
@using Spacebar.AdminApi.TestClient.Services
@inject Config Config
<h3>UsersDelete - @Id</h3>

View File

@@ -5,8 +5,8 @@ using System.Text.Json.Serialization;
using Blazored.LocalStorage;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Spacebar.AdminAPI.TestClient;
using Spacebar.AdminAPI.TestClient.Services;
using Spacebar.AdminApi.TestClient;
using Spacebar.AdminApi.TestClient.Services;
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");

View File

@@ -1,6 +1,6 @@
using System.Text.Json.Serialization;
namespace Spacebar.AdminAPI.TestClient.Services;
namespace Spacebar.AdminApi.TestClient.Services;
public class Config {
[JsonPropertyName("api_url")]

View File

@@ -11,7 +11,7 @@ using System.Text.Json.Serialization;
using ArcaneLibs;
using ArcaneLibs.Extensions;
namespace Spacebar.AdminAPI.TestClient.Services;
namespace Spacebar.AdminApi.TestClient.Services;
#if SINGLE_HTTPCLIENT
// TODO: Add URI wrapper for
@@ -83,7 +83,7 @@ public class StreamingHttpClient {
request.RequestUri = new Uri(BaseAddress ?? throw new InvalidOperationException("Relative URI passed, but no BaseAddress is specified!"), request.RequestUri);
swWait.Stop();
var swExec = Stopwatch.StartNew();
foreach (var (key, value) in AdditionalQueryParameters) request.RequestUri = request.RequestUri.AddQuery(key, value);
foreach (var (key, value) in DefaultRequestHeaders) {
if (request.Headers.Contains(key)) continue;
@@ -110,6 +110,7 @@ public class StreamingHttpClient {
else if (!e.ToString().StartsWith("TypeError: NetworkError"))
Console.WriteLine(
$"Failed to send request {request.Method} {BaseAddress}{request.RequestUri} ({Util.BytesToString(request.Content?.Headers.ContentLength ?? 0)}):\n{e}");
throw;
}
#if SYNC_HTTPCLIENT
@@ -148,19 +149,19 @@ public class StreamingHttpClient {
//retry on gateway timeout
// if (responseMessage.StatusCode == HttpStatusCode.GatewayTimeout) {
// request.ResetSendStatus();
// return await SendAsync(request, cancellationToken);
// request.ResetSendStatus();
// return await SendAsync(request, cancellationToken);
// }
//error handling
var content = await responseMessage.Content.ReadAsStringAsync(cancellationToken);
if (content.Length == 0)
throw new DataException("Content was empty");
// throw new MatrixException() {
// ErrorCode = "M_UNKNOWN",
// Error = "Unknown error, server returned no content"
// };
// throw new MatrixException() {
// ErrorCode = "M_UNKNOWN",
// Error = "Unknown error, server returned no content"
// };
// if (!content.StartsWith('{')) throw new InvalidDataException("Encountered invalid data:\n" + content);
if (!content.TrimStart().StartsWith('{')) {
responseMessage.EnsureSuccessStatusCode();
@@ -293,4 +294,4 @@ public class StreamingHttpClient {
return await SendAsync(request);
}
}
#endif
#endif

View File

@@ -14,6 +14,7 @@
<!-- <RunAOTCompilation>true</RunAOTCompilation>-->
<BlazorEnableTimeZoneSupport>false</BlazorEnableTimeZoneSupport>
<InvariantGlobalization>true</InvariantGlobalization>
<!-- <RuntimeFrameworkVersion>10.0.2-servicing.25570.103</RuntimeFrameworkVersion>-->
</PropertyGroup>
<ItemGroup>
@@ -24,8 +25,7 @@
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="10.0.0" PrivateAssets="all" />
<PackageReference Include="Microsoft.Extensions.Logging.Configuration" Version="10.0.0" />
</ItemGroup>
<ItemGroup>
<Content Update="appsettings.Development.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>

View File

@@ -7,5 +7,5 @@
@using Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.AspNetCore.Components.WebAssembly.Http
@using Microsoft.JSInterop
@using Spacebar.AdminAPI.TestClient
@using Spacebar.AdminAPI.TestClient.Layout
@using Spacebar.AdminApi.TestClient
@using Spacebar.AdminApi.TestClient.Layout

View File

@@ -0,0 +1,217 @@
[
{
"pname": "ArcaneLibs",
"version": "1.0.0-preview.20251005-232225",
"hash": "sha256-EsYLSiyX5Nj+ZpFb6FOcAYqDsQFSbvgm9NKaarJjK/0="
},
{
"pname": "ArcaneLibs.Blazor.Components",
"version": "1.0.0-preview.20251005-232225",
"hash": "sha256-9rgq/bFNwZf+mpTldzhr7VPwlseLR21nDlJWGgIaGIQ="
},
{
"pname": "Blazored.LocalStorage",
"version": "4.5.0",
"hash": "sha256-0vklTFHEGgNG8V6ivQictuooyiXS2nMn/qLpfYhEBlE="
},
{
"pname": "Microsoft.AspNetCore.App.Internal.Assets",
"version": "10.0.0",
"hash": "sha256-IyY5Ymdkmf9S9qRwYXX9rWpzcU3fuDR+ITeaaeJQ/Dk="
},
{
"pname": "Microsoft.AspNetCore.Authorization",
"version": "10.0.0",
"hash": "sha256-g1MagKFkZF0LttdK5GLdHCXe4d1qOXv57ngz7XnhRrk="
},
{
"pname": "Microsoft.AspNetCore.Components",
"version": "10.0.0",
"hash": "sha256-nrCuCDRbvD5XQyn3ySW/CD4yKYD6coC71JH2ke6xtXI="
},
{
"pname": "Microsoft.AspNetCore.Components",
"version": "9.0.9",
"hash": "sha256-1+lIIRfIwHC3XWt2tMuQ3NxoqIsVRgAR+/l9vttQLd8="
},
{
"pname": "Microsoft.AspNetCore.Components.Analyzers",
"version": "10.0.0",
"hash": "sha256-2mbSRBB/2eT0fYouhDKM5OFRZGQ0Jv8HgcQLvufoHq4="
},
{
"pname": "Microsoft.AspNetCore.Components.Forms",
"version": "10.0.0",
"hash": "sha256-el2T9pvjNexq5lfJhp+7xZYa/1CS6RchIWKmtiKg+vI="
},
{
"pname": "Microsoft.AspNetCore.Components.Forms",
"version": "9.0.9",
"hash": "sha256-oUwcqvDLtychAdga+fAJp70wSEdVheYsV6l5Qnfdq6M="
},
{
"pname": "Microsoft.AspNetCore.Components.Web",
"version": "10.0.0",
"hash": "sha256-xDf1DBNBceAFKu4er2inn6gUKa1T1L8T3ewlFcuxddE="
},
{
"pname": "Microsoft.AspNetCore.Components.Web",
"version": "8.0.0",
"hash": "sha256-dsCb4B6r5iHPbEp8+uFzAfD1txGI5dEIWgwtT9+GgU8="
},
{
"pname": "Microsoft.AspNetCore.Components.Web",
"version": "9.0.9",
"hash": "sha256-mgohB7RwOzE5XPB0Lg3h9pUIBKPXaul2F39uxfU7GD8="
},
{
"pname": "Microsoft.AspNetCore.Components.WebAssembly",
"version": "10.0.0",
"hash": "sha256-YeHralkfEzLmlrBj0jER+ta9hsbXv5skP81178V1ppw="
},
{
"pname": "Microsoft.AspNetCore.Components.WebAssembly.DevServer",
"version": "10.0.0",
"hash": "sha256-akCQI6iHuKIyDmZh5du+hifzPzQoGeMX3Y7ST/TFxRU="
},
{
"pname": "Microsoft.AspNetCore.Metadata",
"version": "10.0.0",
"hash": "sha256-TxyiXUx8sWdWFWacBTWFaPeMa3z2+Zmc4VK/Qgq0YRw="
},
{
"pname": "Microsoft.DotNet.HotReload.WebAssembly.Browser",
"version": "10.0.100",
"hash": "sha256-ppwVl5tBHFFmMZ0EjpKn4OSBYNExf/S6ojeYdefX1+k="
},
{
"pname": "Microsoft.Extensions.Configuration",
"version": "10.0.0",
"hash": "sha256-MsLskVPpkCvov5+DWIaALCt1qfRRX4u228eHxvpE0dg="
},
{
"pname": "Microsoft.Extensions.Configuration.Abstractions",
"version": "10.0.0",
"hash": "sha256-GcgrnTAieCV7AVT13zyOjfwwL86e99iiO/MiMOxPGG0="
},
{
"pname": "Microsoft.Extensions.Configuration.Binder",
"version": "10.0.0",
"hash": "sha256-YSiWoA3VQR22k6+bSEAUqeG7UDzZlJfHWDTubUO5V8U="
},
{
"pname": "Microsoft.Extensions.Configuration.FileExtensions",
"version": "10.0.0",
"hash": "sha256-rN+3rqrHiTaBfHgP+E4dA8Qm2cFJPfbEcd93yKLsqlQ="
},
{
"pname": "Microsoft.Extensions.Configuration.Json",
"version": "10.0.0",
"hash": "sha256-VCFukgsxiQ2MFGE6RDMFTGopBHbcZL2t0ER7ENaFXRY="
},
{
"pname": "Microsoft.Extensions.DependencyInjection",
"version": "10.0.0",
"hash": "sha256-LYm9hVlo/R9c2aAKHsDYJ5vY9U0+3Jvclme3ou3BtvQ="
},
{
"pname": "Microsoft.Extensions.DependencyInjection",
"version": "9.0.9",
"hash": "sha256-UHG/uj9hjCRWmz2LZ4wR721ooZYGtBy4TT+lNeVzyrU="
},
{
"pname": "Microsoft.Extensions.DependencyInjection.Abstractions",
"version": "10.0.0",
"hash": "sha256-9iodXP39YqgxomnOPOxd/mzbG0JfOSXzFoNU3omT2Ps="
},
{
"pname": "Microsoft.Extensions.Diagnostics",
"version": "10.0.0",
"hash": "sha256-o7QkCisEcFIh227qBUfWFci2ns4cgEpLqpX7YvHGToQ="
},
{
"pname": "Microsoft.Extensions.Diagnostics.Abstractions",
"version": "10.0.0",
"hash": "sha256-cix7QxQ/g3sj6reXu3jn0cRv2RijzceaLLkchEGTt5E="
},
{
"pname": "Microsoft.Extensions.FileProviders.Abstractions",
"version": "10.0.0",
"hash": "sha256-CHDs2HCN8QcfuYQpgNVszZ5dfXFe4yS9K2GoQXecc20="
},
{
"pname": "Microsoft.Extensions.FileProviders.Physical",
"version": "10.0.0",
"hash": "sha256-2Rw/cwBO+/A3QY2IjN/c8Y0LhtC1qTBL7VdJiD1J2UQ="
},
{
"pname": "Microsoft.Extensions.FileSystemGlobbing",
"version": "10.0.0",
"hash": "sha256-ETfVTdsdBtp69EggLg/AARTQW4lLQYVdVldXIQrsjZA="
},
{
"pname": "Microsoft.Extensions.Logging",
"version": "10.0.0",
"hash": "sha256-P+zPAadLL63k/GqK34/qChqQjY9aIRxZfxlB9lqsSrs="
},
{
"pname": "Microsoft.Extensions.Logging.Abstractions",
"version": "10.0.0",
"hash": "sha256-BnhgGZc01HwTSxogavq7Ueq4V7iMA3wPnbfRwQ4RhGk="
},
{
"pname": "Microsoft.Extensions.Logging.Configuration",
"version": "10.0.0",
"hash": "sha256-7/TWO1aq8hdgbcTEKDBWIjgSC9KpFN3kRnMX+12bOkU="
},
{
"pname": "Microsoft.Extensions.Options",
"version": "10.0.0",
"hash": "sha256-j5MOqZSKeUtxxzmZjzZMGy0vELHdvPraqwTQQQNVsYA="
},
{
"pname": "Microsoft.Extensions.Options.ConfigurationExtensions",
"version": "10.0.0",
"hash": "sha256-XGAs5DxMvWnmjX8dqRwKY0vsuS40SHvsfJqB1rO4L7k="
},
{
"pname": "Microsoft.Extensions.Primitives",
"version": "10.0.0",
"hash": "sha256-Dup08KcptLjlnpN5t5//+p4n8FUTgRAq4n/w1s6us+I="
},
{
"pname": "Microsoft.Extensions.Primitives",
"version": "9.0.9",
"hash": "sha256-bCd4Bj5uP4kT0hCvs0LZS8IVqEtpOIyhSiay5ijJbBA="
},
{
"pname": "Microsoft.Extensions.Validation",
"version": "10.0.0",
"hash": "sha256-BbmNqKlqNd/37IU5X1wjc3VCxfrBTA1bkVqk1myU+H0="
},
{
"pname": "Microsoft.JSInterop",
"version": "10.0.0",
"hash": "sha256-/y6la0IzcE5N/thRGLDZYsvNEeWPlW2IwEJtIu3sdaE="
},
{
"pname": "Microsoft.JSInterop",
"version": "9.0.9",
"hash": "sha256-fCUkGYS6HKZ0NW1xfuI5aCD2yGqpeIjaWFcS0dBZMWE="
},
{
"pname": "Microsoft.JSInterop.WebAssembly",
"version": "10.0.0",
"hash": "sha256-dJdTHFh4lZOmXI+88mLdJOf6UsKq/80N59+COq/KPpg="
},
{
"pname": "Microsoft.NET.Sdk.WebAssembly.Pack",
"version": "10.0.0",
"hash": "sha256-AWqn+WUvMjdec4KX4RpTW1ZgT4K+fYhpkrcf706Zt/w="
},
{
"pname": "Microsoft.NETCore.App.Runtime.Mono.browser-wasm",
"version": "10.0.0",
"hash": "sha256-1CpAq/TBpFaZncLb+Z3xaq/J7/O8ZTEl3qBidCpQj9M="
}
]

View File

@@ -9,7 +9,7 @@
<link rel="stylesheet" href="lib/jetbrains-mono/jetbrains-mono.css"/>
<link rel="stylesheet" href="css/app.css"/>
<link rel="icon" type="image/png" href="favicon.png"/>
<link href="Spacebar.AdminAPI.TestClient.styles.css" rel="stylesheet"/>
<link href="Spacebar.AdminApi.TestClient.styles.css" rel="stylesheet"/>
</head>
<body>

Some files were not shown because too many files have changed in this diff Show More