diff --git a/Program.cs b/Program.cs index c3acbd1..bfc2116 100644 --- a/Program.cs +++ b/Program.cs @@ -1,11 +1,12 @@ -using Microsoft.EntityFrameworkCore; using System.Reflection; +using Microsoft.AspNetCore.Components.QuickGrid.EntityFrameworkAdapter; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; using Microsoft.OpenApi.Models; using ZenithInfo.Components; -using ZenithInfo.Models; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.AspNetCore.Components.QuickGrid.EntityFrameworkAdapter; using ZenithInfo.Data; +using ZenithInfo.Models; +using ZenithInfo.Util.SwaggerTheme; var builder = WebApplication.CreateBuilder(args); @@ -23,7 +24,8 @@ if (config?.GlobalToken == "CHANGE-ME") // Initialize Database builder.Services.AddQuickGridEntityFrameworkAdapter(); builder.Services.AddDbContextFactory(options => - options.UseNpgsql(builder.Configuration.GetConnectionString("ZenithInfoContext"))); + options.UseNpgsql(builder.Configuration.GetConnectionString("ZenithInfoContext")) +); // Sentry if (config?.UseSentry == true) @@ -37,7 +39,15 @@ builder.Services.AddHttpLogging(o => { }); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(opts => { - opts.SwaggerDoc("v1", new OpenApiInfo { Title = "Zenith Info API", Version = "v1" }); + opts.SwaggerDoc( + "v1", + new OpenApiInfo + { + Title = "Zenith Info API", + Version = "v1", + Description = "Zenith's official information provider!", + } + ); opts.AddSecurityDefinition( "Bearer", new OpenApiSecurityScheme @@ -75,10 +85,16 @@ builder.Services.AddSwaggerGen(opts => var app = builder.Build(); +var assembly = Assembly.GetExecutingAssembly(); +foreach (var resource in assembly.GetManifestResourceNames()) +{ + app.Logger.LogDebug("Resource: {Resource}", resource); +} + if (config?.UseSwagger == true) { app.UseSwagger(); - app.UseSwaggerUI(); + app.UseSwaggerUI(CustomStyle.CustomModern); } if (config?.LogRequests == true) @@ -108,4 +124,12 @@ if (config?.DatabaseType == DatabaseTypes.Memory) ); } +// if (app.Environment.IsDevelopment()) +// { +// app.Logger.LogInformation( +// "Development mode detected, printing configuration: {Configuration}", +// config?.ToJson() +// ); +// } + app.Run(); diff --git a/Util/SwaggerTheme/CustomStyle.cs b/Util/SwaggerTheme/CustomStyle.cs new file mode 100644 index 0000000..48976fe --- /dev/null +++ b/Util/SwaggerTheme/CustomStyle.cs @@ -0,0 +1,12 @@ +using System; +using AspNetCore.Swagger.Themes; + +namespace ZenithInfo.Util.SwaggerTheme; + +public class CustomStyle : ModernStyle +{ + protected CustomStyle(string fileName) + : base(fileName) { } + + public static CustomStyle CustomModern => new("modern.custom.css"); +} diff --git a/Util/SwaggerTheme/modern.custom.css b/Util/SwaggerTheme/modern.custom.css new file mode 100644 index 0000000..ad22abb --- /dev/null +++ b/Util/SwaggerTheme/modern.custom.css @@ -0,0 +1,117 @@ +:root { + /* Light mode (Catppuccin Latte) */ + --catppuccin-pink: #ea76cb; + --catppuccin-mauve: #8839ef; + --catppuccin-red: #d20f39; + --catppuccin-maroon: #e64553; + --catppuccin-peach: #fe640b; + --catppuccin-yellow: #df8e1d; + --catppuccin-green: #40a02b; + --catppuccin-teal: #179299; + --catppuccin-sky: #04a5e5; + --catppuccin-sapphire: #209fb5; + --catppuccin-blue: #1e66f5; + --catppuccin-lavender: #7287fd; + --catppuccin-text: #4c4f69; + --catppuccin-subtext1: #5c5f77; + --catppuccin-subtext0: #6c6f85; + --catppuccin-overlay2: #7c7f93; + --catppuccin-overlay1: #8c8fa1; + --catppuccin-overlay0: #9ca0b0; + --catppuccin-surface2: #acb0be; + --catppuccin-surface1: #bcc0cc; + --catppuccin-surface0: #ccd0da; + --catppuccin-base: #eff1f5; + --catppuccin-mantle: #e6e9ef; + --catppuccin-crust: #dce0e8; + + --link: var(--catppuccin-blue); + --link-hover: var(--catppuccin-sapphire); + --accent: var(--catppuccin-green); + --error: var(--catppuccin-red); + + /* Body */ + --body-background-color: var(--catppuccin-base); + --swagger-main-color: var(--catppuccin-text); + --scrollbar-thumb-color: var(--catppuccin-surface1); + --scrollbar-thumb-hover-color: var(--catppuccin-surface0); + + /* Loading */ + --loading-container-border-color: var(--accent); + + /* Errors Container */ + --errors-wrapper-background-color: var(--catppuccin-surface0); + --errors-wrapper-border-color: var(--error); + --errors-wrapper-errors-color: var(--error); + + /* Topbar */ + --topbar-background-color: var(--catppuccin-surface0); + --topbar-pinned-background-color: var(--catppuccin-surface0); + --topbar-border-color: var(--accent); + --topbar-select-label-color: var(--catppuccin-text); + --topbar-select-border-color: var(--accent); + + /* Infobox */ + --swagger-info-link: var(--link); + --swagger-info-link-hover: var(--link-hover); + --api-version-background-color: var(--catppuccin-surface2); + --api-version-stamp-background-color: var(--accent); + --api-version-color: var(--catppuccin-base); + + /* Authorization */ + --btn-authorize-background-color: var(--catppuccin-surface0); + --btn-authorize-border-color: var(--catppuccin-green); + --btn-authorize-font-color: var(--catppuccin-green); + --btn-authorize-svg-fill-color: var(--catppuccin-green); + --auth-container-background-color: var(--catppuccin-surface0); + --auth-container-errors-color: var(--catppuccin-red); + --auth-wrapper-background-color: var(--catppuccin-mantle); + --auth-wrapper-border-color: var(--accent); + + /* Form Elements */ + --select-border-color: var(--accent); + --input-background-color: var(--catppuccin-surface0); + --input-border-color: var(--accent); + --input-invalid-border-color: var(--error); + --input-disabled-background-color: var(--catppuccin-crust); + --input-disabled-border-color: var(--catppuccin-surface1); + + /* Dialog */ + --dialog-background-color: var(--catppuccin-mantle); + --dialog-border-color: var(--accent); +} + +.swagger-ui .topbar .download-url-wrapper input[type="text"], .swagger-ui .topbar .download-url-wrapper .select-label select { + background-color: var(--catppuccin-surface0); + color: var(--catppuccin-text); +} + +@media (prefers-color-scheme: dark) { + :root { + /* Dark mode (Catppuccin Mocha) */ + --catppuccin-pink: #f5c2e7; + --catppuccin-mauve: #cba6f7; + --catppuccin-red: #f38ba8; + --catppuccin-maroon: #eba0ac; + --catppuccin-peach: #fab387; + --catppuccin-yellow: #f9e2af; + --catppuccin-green: #a6e3a1; + --catppuccin-teal: #94e2d5; + --catppuccin-sky: #89dceb; + --catppuccin-sapphire: #74c7ec; + --catppuccin-blue: #89b4fa; + --catppuccin-lavender: #b4befe; + --catppuccin-text: #cdd6f4; + --catppuccin-subtext1: #bac2de; + --catppuccin-subtext0: #a6adc8; + --catppuccin-overlay2: #9399b2; + --catppuccin-overlay1: #7f849c; + --catppuccin-overlay0: #6c7086; + --catppuccin-surface2: #585b70; + --catppuccin-surface1: #45475a; + --catppuccin-surface0: #313244; + --catppuccin-base: #1e1e2e; + --catppuccin-mantle: #181825; + --catppuccin-crust: #11111b; + } +} diff --git a/ZenithInfo.csproj b/ZenithInfo.csproj index 1328831..64b2307 100644 --- a/ZenithInfo.csproj +++ b/ZenithInfo.csproj @@ -1,36 +1,41 @@ - - - - net8.0 - enable - enable - Linux - true - $(NoWarn);1591 - - - - - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - - - - - + + + + net8.0 + enable + enable + Linux + true + $(NoWarn);1591 + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + + + +