Files

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();