2024-12-31 18:40:08 -05:00
using System.Reflection ;
using Microsoft.OpenApi.Models ;
2024-12-31 01:01:16 -05:00
using ZenithInfo.Components ;
2024-12-31 19:01:25 -05:00
using ZenithInfo.Models ;
2024-12-31 01:01:16 -05:00
var builder = WebApplication . CreateBuilder ( args ) ;
2024-12-31 19:01:25 -05:00
// Configuration
var config = builder . Configuration . GetSection ( "Configuration" ) . Get < ZIConfiguration > ( ) ;
builder . Services . Configure < ZIConfiguration > ( builder . Configuration . GetSection ( "Configuration" ) ) ;
if ( config ? . GlobalToken = = "CHANGE-ME" )
{
throw new InvalidOperationException (
"Global token is not a valid value, please set the `CONFIGURATION__GLOBALTOKEN` environment variable to a random value. `openssl rand -hex 64` is a good way to generate a random value."
) ;
}
2024-12-31 19:02:22 -05:00
// Sentry
if ( config ? . UseSentry = = true )
{
builder . WebHost . UseSentry ( ) ;
}
2024-12-31 01:01:16 -05:00
// Add services to the container.
2024-12-31 01:03:35 -05:00
builder . Services . AddRazorComponents ( ) . AddInteractiveServerComponents ( ) ;
2024-12-31 18:40:08 -05:00
builder . Services . AddHttpLogging ( o = > { } ) ;
builder . Services . AddEndpointsApiExplorer ( ) ;
builder . Services . AddSwaggerGen ( opts = >
{
opts . SwaggerDoc ( "v1" , new OpenApiInfo { Title = "Zenith Info API" , Version = "v1" } ) ;
opts . AddSecurityDefinition (
"Bearer" ,
new OpenApiSecurityScheme
{
Description =
"JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"" ,
Name = "Authorization" ,
In = ParameterLocation . Header ,
Type = SecuritySchemeType . ApiKey ,
Scheme = "Bearer" ,
}
) ;
opts . AddSecurityRequirement (
new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType . SecurityScheme ,
Id = "Bearer" ,
} ,
Scheme = "oauth2" ,
Name = "Bearer" ,
In = ParameterLocation . Header ,
} ,
new List < string > ( )
} ,
}
) ;
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml" ;
opts . IncludeXmlComments ( Path . Combine ( AppContext . BaseDirectory , xmlFile ) ) ;
} ) ;
2024-12-31 01:01:16 -05:00
var app = builder . Build ( ) ;
2024-12-31 19:01:25 -05:00
if ( config ? . UseSwagger = = true )
{
app . UseSwagger ( ) ;
app . UseSwaggerUI ( ) ;
}
if ( config ? . LogRequests = = true )
{
app . UseHttpLogging ( ) ;
}
2024-12-31 18:40:08 -05:00
2024-12-31 01:01:16 -05:00
// Configure the HTTP request pipeline.
if ( ! app . Environment . IsDevelopment ( ) )
{
app . UseExceptionHandler ( "/Error" , createScopeForErrors : true ) ;
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app . UseHsts ( ) ;
}
app . UseHttpsRedirection ( ) ;
app . UseStaticFiles ( ) ;
app . UseAntiforgery ( ) ;
2024-12-31 01:03:35 -05:00
app . MapRazorComponents < App > ( ) . AddInteractiveServerRenderMode ( ) ;
2024-12-31 01:01:16 -05:00
2024-12-31 19:01:25 -05:00
if ( config ? . DatabaseType = = DatabaseTypes . Memory )
{
app . Logger . LogWarning (
"`Memory` database type is in use. Data will be lost when the application is restarted. If you are not in a development environment, you should use `PostgresSQL` instead."
) ;
}
2024-12-31 01:01:16 -05:00
app . Run ( ) ;