83 lines
2.4 KiB
C#
83 lines
2.4 KiB
C#
using Microsoft.AspNetCore.HttpOverrides;
|
|
using TuneRipper.Api.Configuration;
|
|
using TuneRipper.Api.Health;
|
|
using TuneRipper.Api.Services;
|
|
|
|
var builder = WebApplication.CreateBuilder(args);
|
|
|
|
builder.Services.AddControllers();
|
|
builder.Services.AddHttpClient();
|
|
builder.Services.AddOpenApi();
|
|
builder.Services.Configure<YtDlpOptions>(builder.Configuration.GetSection(YtDlpOptions.SectionName));
|
|
builder.Services.Configure<StorageOptions>(builder.Configuration.GetSection(StorageOptions.SectionName));
|
|
builder.Services.AddScoped<IVideoService, VideoService>();
|
|
builder.Services.AddSingleton<ISessionService, SessionService>();
|
|
builder.Services.AddHealthChecks().AddCheck<ExternalToolsHealthCheck>("external_tools");
|
|
|
|
builder.Services.Configure<ForwardedHeadersOptions>(options =>
|
|
{
|
|
options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
|
|
options.KnownIPNetworks.Clear();
|
|
options.KnownProxies.Clear();
|
|
});
|
|
|
|
builder.Services.AddCors(options =>
|
|
{
|
|
options.AddPolicy("DevelopmentClient", policy =>
|
|
{
|
|
policy.AllowAnyOrigin()
|
|
.AllowAnyMethod()
|
|
.AllowAnyHeader();
|
|
});
|
|
});
|
|
|
|
var app = builder.Build();
|
|
|
|
app.UseForwardedHeaders();
|
|
|
|
if (app.Environment.IsDevelopment())
|
|
{
|
|
app.MapOpenApi();
|
|
app.UseHttpsRedirection();
|
|
app.UseCors("DevelopmentClient");
|
|
}
|
|
|
|
app.UseStaticFiles();
|
|
app.UseAuthorization();
|
|
|
|
app.MapGet("/api", (IWebHostEnvironment env, HttpContext context) =>
|
|
{
|
|
var request = context.Request;
|
|
var baseUrl = $"{request.Scheme}://{request.Host}";
|
|
|
|
return new
|
|
{
|
|
service = "TuneRipper API",
|
|
version = "1.0.0",
|
|
status = "running",
|
|
timestamp = DateTime.UtcNow,
|
|
environment = env.EnvironmentName,
|
|
url = baseUrl,
|
|
endpoints = new
|
|
{
|
|
health = "/health",
|
|
api_health = "/api/health",
|
|
process_video = "/api/video/process",
|
|
check_status = "/api/video/status/{jobId}",
|
|
get_result = "/api/video/result/{jobId}",
|
|
download = "/api/download/{sessionId}/{jobId}",
|
|
download_session_zip = "/api/download/zip/{sessionId}",
|
|
session_create = "/api/session/create"
|
|
}
|
|
};
|
|
});
|
|
|
|
app.MapControllers();
|
|
app.MapHealthChecks("/health");
|
|
app.MapFallbackToFile("index.html");
|
|
|
|
app.Logger.LogInformation("TuneRipper is starting in {Environment}", app.Environment.EnvironmentName);
|
|
app.Logger.LogInformation("Health check: /health");
|
|
|
|
app.Run();
|