diff --git a/docker-compose/api-docs.env b/docker-compose/api-docs.env index f9971c339..ac7417e4a 100644 --- a/docker-compose/api-docs.env +++ b/docker-compose/api-docs.env @@ -1,2 +1,2 @@ -URLS=[ { url: 'http://localhost:8080/api/directory/v1/swagger.json', name: 'Directory' } ] +URLS=[{url:'http://localhost:8080/api/directory/v1/swagger.json',name:'Directory'},{url:'http://localhost:8080/api/archival/v1/swagger.json',name:'Archival'}] URLS_PRIMARY_NAME=Directory \ No newline at end of file diff --git a/reverse-proxy/conf.d.dev/default.conf b/reverse-proxy/conf.d.dev/default.conf index cc912d81c..9d6fca1d4 100644 --- a/reverse-proxy/conf.d.dev/default.conf +++ b/reverse-proxy/conf.d.dev/default.conf @@ -1,6 +1,18 @@ server { listen 80 default_server; + location ^~ /api/archival/ { + rewrite ^/api/archival/(.*)$ /$1 break; + proxy_pass http://archival-api:80; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection keep-alive; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + location ^~ /api/directory/ { rewrite ^/api/directory/(.*)$ /$1 break; proxy_pass http://directory-api:80; diff --git a/reverse-proxy/conf.d/default.conf b/reverse-proxy/conf.d/default.conf index 476307f89..66eb18914 100644 --- a/reverse-proxy/conf.d/default.conf +++ b/reverse-proxy/conf.d/default.conf @@ -9,6 +9,18 @@ server { add_header Content-Security-Policy "default-src 'none'; connect-src 'self'; img-src 'self' validator.swagger.io data:; manifest-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; base-uri 'none'; form-action 'none'; frame-ancestors 'none';" always; + location ^~ /api/archival/ { + rewrite ^/api/archival/(.*)$ /$1 break; + proxy_pass http://archival-api:80; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection keep-alive; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + location ^~ /api/directory/ { rewrite ^/api/directory/(.*)$ /$1 break; proxy_pass http://directory-api:80; diff --git a/services/Archival/FilterLists.Archival.Api/Controllers/PingController.cs b/services/Archival/FilterLists.Archival.Api/Controllers/PingController.cs new file mode 100644 index 000000000..9759cc338 --- /dev/null +++ b/services/Archival/FilterLists.Archival.Api/Controllers/PingController.cs @@ -0,0 +1,20 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; + +namespace FilterLists.Archival.Api.Controllers +{ + [ApiController] + [Route("[controller]")] + [Produces("application/json")] + public class PingController : ControllerBase + { + [HttpGet] + [ProducesResponseType(typeof(string), StatusCodes.Status200OK)] +#pragma warning disable CA1822 // Mark members as static + public ActionResult Ping() +#pragma warning restore CA1822 // Mark members as static + { + return "pong"; + } + } +} diff --git a/services/Archival/FilterLists.Archival.Api/FilterLists.Archival.Api.csproj b/services/Archival/FilterLists.Archival.Api/FilterLists.Archival.Api.csproj index 9d9e55729..fe3ff2d78 100644 --- a/services/Archival/FilterLists.Archival.Api/FilterLists.Archival.Api.csproj +++ b/services/Archival/FilterLists.Archival.Api/FilterLists.Archival.Api.csproj @@ -24,6 +24,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/services/Archival/FilterLists.Archival.Api/Startup.cs b/services/Archival/FilterLists.Archival.Api/Startup.cs index 3ae7de987..5d1368f80 100644 --- a/services/Archival/FilterLists.Archival.Api/Startup.cs +++ b/services/Archival/FilterLists.Archival.Api/Startup.cs @@ -18,6 +18,10 @@ public Startup(IConfiguration configuration) public void ConfigureServices(IServiceCollection services) { + services.AddRouting(o => o.LowercaseUrls = true); + services.AddControllers() + .AddJsonOptions(o => o.JsonSerializerOptions.IgnoreNullValues = true); + services.AddSwaggerGen(); services.AddApplicationServices(Configuration); } @@ -28,6 +32,10 @@ public static void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseDeveloperExceptionPage(); } + + app.UseRouting(); + app.UseEndpoints(e => e.MapControllers()); + app.UseSwagger(); } } } diff --git a/services/Archival/FilterLists.Archival.Api/SwaggerExtensions.cs b/services/Archival/FilterLists.Archival.Api/SwaggerExtensions.cs new file mode 100644 index 000000000..1875660ce --- /dev/null +++ b/services/Archival/FilterLists.Archival.Api/SwaggerExtensions.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.OpenApi.Models; + +namespace FilterLists.Archival.Api +{ + internal static class SwaggerExtensions + { + public static void AddSwaggerGen(this IServiceCollection services) + { + services.AddSwaggerGen(o => + { + o.SwaggerDoc("v1", new OpenApiInfo + { + Title = "FilterLists Archival API", + Description = + "FilterLists is the independent, comprehensive directory of filter and host lists for advertisements, trackers, malware, and annoyances.", + Version = "v1", + //TermsOfService = "", + Contact = new OpenApiContact {Name = "FilterLists", Url = new Uri("https://filterlists.com")}, + License = new OpenApiLicense + { + Name = "MIT License", + Url = new Uri("https://github.com/collinbarrett/FilterLists/blob/master/LICENSE") + } + }); + }); + } + + public static void UseSwagger(this IApplicationBuilder app) + { + app.UseSwagger(o => + { + o.RouteTemplate = "{documentName}/swagger.json"; + o.PreSerializeFilters.Add((swaggerDoc, httpReq) => swaggerDoc.Servers = new List + { +#if DEBUG + new OpenApiServer {Url = $"{httpReq.Scheme}://{httpReq.Host.Value}:8080/api/archival"} +#else + new OpenApiServer {Url = $"https://{httpReq.Host.Value}/api/archival"} +#endif + }); + }); + } + } +} diff --git a/services/Directory/FilterLists.Directory.Api/SwaggerExtensions.cs b/services/Directory/FilterLists.Directory.Api/SwaggerExtensions.cs index 5273c901b..1a23e1521 100644 --- a/services/Directory/FilterLists.Directory.Api/SwaggerExtensions.cs +++ b/services/Directory/FilterLists.Directory.Api/SwaggerExtensions.cs @@ -26,7 +26,6 @@ public static void AddSwaggerGen(this IServiceCollection services) Url = new Uri("https://github.com/collinbarrett/FilterLists/blob/master/LICENSE") } }); - o.CustomSchemaIds(type => type.ToString()); }); } @@ -38,7 +37,7 @@ public static void UseSwagger(this IApplicationBuilder app) o.PreSerializeFilters.Add((swaggerDoc, httpReq) => swaggerDoc.Servers = new List { #if DEBUG - new OpenApiServer {Url = $"{httpReq.Scheme}://{httpReq.Host.Value}/api/directory"} + new OpenApiServer {Url = $"{httpReq.Scheme}://{httpReq.Host.Value}:8080/api/directory"} #else new OpenApiServer {Url = $"https://{httpReq.Host.Value}/api/directory"} #endif