From 8eb6f52f093479180f9337ffa1ef266ab45cb446 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Tue, 22 Sep 2020 16:47:33 -0500 Subject: [PATCH] =?UTF-8?q?feat(archival):=20=E2=9C=A8=20enable=20readonly?= =?UTF-8?q?=20Hangfire=20Dashboard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reverse-proxy/conf.d.dev/default.conf | 12 +++++++++++ reverse-proxy/conf.d/default.conf | 12 +++++++++++ .../FilterLists.Archival.Api/Dockerfile | 1 + .../FilterLists.Archival.Api/Startup.cs | 20 ++++++++++++++++++- .../FilterLists.Archival.Api/dev.Dockerfile | 1 + .../DashboardAuthorizationFilter.cs | 12 +++++++++++ 6 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 services/Archival/FilterLists.Archival.Infrastructure/Scheduling/DashboardAuthorizationFilter.cs diff --git a/reverse-proxy/conf.d.dev/default.conf b/reverse-proxy/conf.d.dev/default.conf index e729c65e9..e07529a45 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/ { rewrite ^/api/(.*)$ /$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 db17d3e65..184a209f2 100644 --- a/reverse-proxy/conf.d/default.conf +++ b/reverse-proxy/conf.d/default.conf @@ -8,6 +8,18 @@ server { ssl_certificate_key /etc/nginx/cert/filterlists_key.pem; add_header Content-Security-Policy "default-src 'none'; connect-src 'self'; img-src 'self' 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/ { rewrite ^/api/(.*)$ /$1 break; diff --git a/services/Archival/FilterLists.Archival.Api/Dockerfile b/services/Archival/FilterLists.Archival.Api/Dockerfile index 61189529d..6cd10edbc 100644 --- a/services/Archival/FilterLists.Archival.Api/Dockerfile +++ b/services/Archival/FilterLists.Archival.Api/Dockerfile @@ -2,6 +2,7 @@ FROM mcr.microsoft.com/dotnet/core/runtime-deps:3.1.7-alpine AS base LABEL org.opencontainers.image.description="filterlists.com | github.com/collinbarrett/filterlists | A .NET Core app archiving copies of FilterLists for mirrors and future analysis." WORKDIR /app +EXPOSE 80 # init build FROM mcr.microsoft.com/dotnet/core/sdk:3.1.401-alpine AS build diff --git a/services/Archival/FilterLists.Archival.Api/Startup.cs b/services/Archival/FilterLists.Archival.Api/Startup.cs index 7aa6f0d9c..7d07f1657 100644 --- a/services/Archival/FilterLists.Archival.Api/Startup.cs +++ b/services/Archival/FilterLists.Archival.Api/Startup.cs @@ -1,4 +1,6 @@ -using FilterLists.Archival.Application; +using FilterLists.Archival.Application; +using FilterLists.Archival.Infrastructure.Scheduling; +using Hangfire; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; @@ -18,6 +20,9 @@ public Startup(IConfiguration configuration) public void ConfigureServices(IServiceCollection services) { + services.AddRouting(o => o.LowercaseUrls = true); + services.AddControllers() + .AddJsonOptions(o => o.JsonSerializerOptions.IgnoreNullValues = true); services.AddApplicationServices(Configuration); } @@ -28,6 +33,19 @@ public static void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseDeveloperExceptionPage(); } + + app.UseStaticFiles(); + app.UseRouting(); + app.UseEndpoints(e => + { + e.MapControllers(); + e.MapHangfireDashboard(new DashboardOptions + { + PrefixPath = "/api/archival/", + Authorization = new[] {new DashboardAuthorizationFilter()}, + IsReadOnlyFunc = _ => true + }); + }); } } } diff --git a/services/Archival/FilterLists.Archival.Api/dev.Dockerfile b/services/Archival/FilterLists.Archival.Api/dev.Dockerfile index e1f7d0cb4..b77c0c782 100644 --- a/services/Archival/FilterLists.Archival.Api/dev.Dockerfile +++ b/services/Archival/FilterLists.Archival.Api/dev.Dockerfile @@ -1,6 +1,7 @@ # init base for Visual Studio debugging FROM mcr.microsoft.com/dotnet/core/aspnet:3.1.7-alpine AS base WORKDIR /app +EXPOSE 80 # init build FROM mcr.microsoft.com/dotnet/core/sdk:3.1.401-alpine AS build diff --git a/services/Archival/FilterLists.Archival.Infrastructure/Scheduling/DashboardAuthorizationFilter.cs b/services/Archival/FilterLists.Archival.Infrastructure/Scheduling/DashboardAuthorizationFilter.cs new file mode 100644 index 000000000..1c268b4fb --- /dev/null +++ b/services/Archival/FilterLists.Archival.Infrastructure/Scheduling/DashboardAuthorizationFilter.cs @@ -0,0 +1,12 @@ +using Hangfire.Dashboard; + +namespace FilterLists.Archival.Infrastructure.Scheduling +{ + public class DashboardAuthorizationFilter : IDashboardAuthorizationFilter + { + public bool Authorize(DashboardContext context) + { + return true; + } + } +}