From 4772e0b59d01026cc8ffb6de836ceffa39da8c8a Mon Sep 17 00:00:00 2001 From: Viktor Lofgren Date: Tue, 30 Apr 2024 14:46:18 +0200 Subject: [PATCH] (service) Deprecate /public prefix on HTTP Before the gRPC migration, the system would serve both public and internal requests over HTTP, but distinguish the two using path prefixes and a few HTTP Headers (X-Public, X-Context) added by the reverse proxy to prevent misconfigurations. Since internal requests meaningfully no longer use HTTP, this convention is just an obstacle now, adding the need to always run the system behind a reverse proxy that rewrites the paths. The change removes the path prefix, and updates the docker templates to reflect the change. This will require a migration for existing systems. --- .../nu/marginalia/service/server/Service.java | 30 +++++++--------- .../java/nu/marginalia/api/ApiService.java | 8 ++--- .../nu/marginalia/dating/DatingService.java | 14 ++++---- .../marginalia/explorer/ExplorerService.java | 6 ++-- .../nu/marginalia/search/SearchService.java | 17 +++++----- .../assistant/AssistantService.java | 3 +- .../nu/marginalia/control/ControlService.java | 14 ++++---- .../control/app/svc/ApiKeyService.java | 8 ++--- .../app/svc/ControlBlacklistService.java | 4 +-- .../app/svc/DomainComplaintService.java | 4 +-- .../app/svc/RandomExplorationService.java | 4 +-- .../control/app/svc/SearchToBanService.java | 4 +-- .../node/svc/ControlFileStorageService.java | 10 +++--- .../node/svc/ControlNodeActionsService.java | 34 +++++++++---------- .../control/node/svc/ControlNodeService.java | 30 ++++++++-------- .../sys/svc/AbortedProcessService.java | 6 ++-- .../svc/ControlDomainRankingSetsService.java | 8 ++--- .../sys/svc/ControlSysActionsService.java | 14 ++++---- .../control/sys/svc/DataSetsService.java | 4 +-- .../control/sys/svc/MessageQueueService.java | 14 ++++---- .../nu/marginalia/query/QueryService.java | 4 +-- .../docker-compose-barebones-1.yml.template | 6 ---- .../docker-compose-barebones-2.yml.template | 6 ---- .../docker-compose-marginalia.yml.template | 14 -------- 24 files changed, 116 insertions(+), 150 deletions(-) diff --git a/code/common/service/java/nu/marginalia/service/server/Service.java b/code/common/service/java/nu/marginalia/service/server/Service.java index 283ed439..84502649 100644 --- a/code/common/service/java/nu/marginalia/service/server/Service.java +++ b/code/common/service/java/nu/marginalia/service/server/Service.java @@ -122,7 +122,6 @@ public class Service { configureStaticFiles.run(); Spark.before(this::auditRequestIn); - Spark.before(this::filterPublicRequests); Spark.after(this::auditRequestOut); // Live and ready endpoints @@ -130,6 +129,18 @@ public class Service { Spark.get("/internal/started", this::isInitialized); Spark.get("/internal/ready", this::isReady); + Spark.get("/public/", (rq, rp) -> { + rp.type("text/html"); + + return """ + +

Migration required

+

The system is configured to use an old URL scheme. If you are the operator of the service, + you need to modify the reverse proxy to not use the /public prefix. If you are a user, please + contact the operator of the service.

+ """; + }); + grpcServer = new GrpcServer(config, serviceRegistry, partition, grpcServices); grpcServer.start(); } @@ -159,23 +170,6 @@ public class Service { Spark.staticFiles.header("Cache-control", "public"); } - private void filterPublicRequests(Request request, Response response) { - if (null == request.headers("X-Public")) { - return; - } - - String context = Optional - .ofNullable(request.headers("X-Context")) - .orElseGet(request::ip); - - if (!request.pathInfo().startsWith("/public/")) { - logger.warn(httpMarker, "External connection to internal API: {} -> {} {}", context, request.requestMethod(), request.pathInfo()); - Spark.halt(403); - } - - logRequest(request); - } - private Object isInitialized(Request request, Response response) { if (initialization.isReady()) { return "ok"; diff --git a/code/services-application/api-service/java/nu/marginalia/api/ApiService.java b/code/services-application/api-service/java/nu/marginalia/api/ApiService.java index 85a19473..e6fd7767 100644 --- a/code/services-application/api-service/java/nu/marginalia/api/ApiService.java +++ b/code/services-application/api-service/java/nu/marginalia/api/ApiService.java @@ -66,15 +66,15 @@ public class ApiService extends Service { this.rateLimiterService = rateLimiterService; this.searchOperator = searchOperator; - Spark.get("/public/api/", (rq, rsp) -> { + Spark.get("/api/", (rq, rsp) -> { rsp.redirect("https://memex.marginalia.nu/projects/edge/api.gmi"); return ""; }); - Spark.get("/public/api/:key", (rq, rsp) -> licenseService.getLicense(rq.params("key")), gson::toJson); - Spark.get("/public/api/:key/", (rq, rsp) -> licenseService.getLicense(rq.params("key")), gson::toJson); + Spark.get("/api/:key", (rq, rsp) -> licenseService.getLicense(rq.params("key")), gson::toJson); + Spark.get("/api/:key/", (rq, rsp) -> licenseService.getLicense(rq.params("key")), gson::toJson); - Spark.get("/public/api/:key/search/*", this::search, gson::toJson); + Spark.get("/api/:key/search/*", this::search, gson::toJson); } @MqRequest(endpoint = "FLUSH_CACHES") diff --git a/code/services-application/dating-service/java/nu/marginalia/dating/DatingService.java b/code/services-application/dating-service/java/nu/marginalia/dating/DatingService.java index c768ea09..9753fa96 100644 --- a/code/services-application/dating-service/java/nu/marginalia/dating/DatingService.java +++ b/code/services-application/dating-service/java/nu/marginalia/dating/DatingService.java @@ -44,13 +44,13 @@ public class DatingService extends Service { this.browseRandom = browseRandom; this.screenshotService = screenshotService; - Spark.get("/public/reset", this::getReset); - Spark.get("/public/", this::getInitSession); - Spark.get("/public/view", this::getCurrent); - Spark.get("/public/next", this::getNext); - Spark.get("/public/similar/:id", this::getSimilar); - Spark.get("/public/rewind", this::getRewind); - Spark.get("/public/init", this::getInitSession); + Spark.get("/reset", this::getReset); + Spark.get("/", this::getInitSession); + Spark.get("/view", this::getCurrent); + Spark.get("/next", this::getNext); + Spark.get("/similar/:id", this::getSimilar); + Spark.get("/rewind", this::getRewind); + Spark.get("/init", this::getInitSession); } private Object getInitSession(Request request, Response response) { diff --git a/code/services-application/explorer-service/java/nu/marginalia/explorer/ExplorerService.java b/code/services-application/explorer-service/java/nu/marginalia/explorer/ExplorerService.java index 0b6ae0de..c46fff40 100644 --- a/code/services-application/explorer-service/java/nu/marginalia/explorer/ExplorerService.java +++ b/code/services-application/explorer-service/java/nu/marginalia/explorer/ExplorerService.java @@ -51,9 +51,9 @@ public class ExplorerService extends Service { this.dataSource = dataSource; this.staticResources = staticResources; - Spark.get("/public/", this::serveIndex, this::render); - Spark.get("/public/search", this::search, this::render); - Spark.get("/public/:resource", this::serveStatic); + Spark.get("/", this::serveIndex, this::render); + Spark.get("/search", this::search, this::render); + Spark.get("/:resource", this::serveStatic); } diff --git a/code/services-application/search-service/java/nu/marginalia/search/SearchService.java b/code/services-application/search-service/java/nu/marginalia/search/SearchService.java index 8e8594be..e80dbbf9 100644 --- a/code/services-application/search-service/java/nu/marginalia/search/SearchService.java +++ b/code/services-application/search-service/java/nu/marginalia/search/SearchService.java @@ -55,20 +55,19 @@ public class SearchService extends Service { Spark.staticFiles.expireTime(600); SearchServiceMetrics.get("/search", searchQueryService::pathSearch); - SearchServiceMetrics.get("/public/search", searchQueryService::pathSearch); - SearchServiceMetrics.get("/public/", frontPageService::render); - SearchServiceMetrics.get("/public/news.xml", frontPageService::renderNewsFeed); - SearchServiceMetrics.get("/public/:resource", this::serveStatic); + SearchServiceMetrics.get("/", frontPageService::render); + SearchServiceMetrics.get("/news.xml", frontPageService::renderNewsFeed); + SearchServiceMetrics.get("/:resource", this::serveStatic); - SearchServiceMetrics.post("/public/site/suggest/", addToCrawlQueueService::suggestCrawling); + SearchServiceMetrics.post("/site/suggest/", addToCrawlQueueService::suggestCrawling); - SearchServiceMetrics.get("/public/site-search/:site/*", this::siteSearchRedir); + SearchServiceMetrics.get("/site-search/:site/*", this::siteSearchRedir); - SearchServiceMetrics.get("/public/site/:site", siteInfoService::handle); - SearchServiceMetrics.post("/public/site/:site", siteInfoService::handlePost); + SearchServiceMetrics.get("/site/:site", siteInfoService::handle); + SearchServiceMetrics.post("/site/:site", siteInfoService::handlePost); - SearchServiceMetrics.get("/public/crosstalk/", crosstalkService::handle); + SearchServiceMetrics.get("/crosstalk/", crosstalkService::handle); Spark.exception(Exception.class, (e,p,q) -> { logger.error("Error during processing", e); diff --git a/code/services-core/assistant-service/java/nu/marginalia/assistant/AssistantService.java b/code/services-core/assistant-service/java/nu/marginalia/assistant/AssistantService.java index 741261b8..c048ac24 100644 --- a/code/services-core/assistant-service/java/nu/marginalia/assistant/AssistantService.java +++ b/code/services-core/assistant-service/java/nu/marginalia/assistant/AssistantService.java @@ -39,9 +39,8 @@ public class AssistantService extends Service { Spark.staticFiles.expireTime(600); - Spark.get("/public/screenshot/:id", screenshotService::serveScreenshotRequest); Spark.get("/screenshot/:id", screenshotService::serveScreenshotRequest); - Spark.get("/public/suggest/", this::getSuggestions, this::convertToJson); + Spark.get("/suggest/", this::getSuggestions, this::convertToJson); Spark.awaitInitialization(); } diff --git a/code/services-core/control-service/java/nu/marginalia/control/ControlService.java b/code/services-core/control-service/java/nu/marginalia/control/ControlService.java index 8eb44279..5c0a014e 100644 --- a/code/services-core/control-service/java/nu/marginalia/control/ControlService.java +++ b/code/services-core/control-service/java/nu/marginalia/control/ControlService.java @@ -96,21 +96,21 @@ public class ControlService extends Service { this.staticResources = staticResources; this.messageQueueService = messageQueueService; - Spark.get("/public/heartbeats", (req, res) -> { + Spark.get("/heartbeats", (req, res) -> { res.type("application/json"); return heartbeatService.getServiceHeartbeats(); }, gson::toJson); - Spark.get("/public/", this::overviewModel, indexRenderer::render); + Spark.get("/", this::overviewModel, indexRenderer::render); - Spark.get("/public/actions", (req,rs) -> new Object() , actionsViewRenderer::render); - Spark.get("/public/events", eventLogService::eventsListModel , eventsRenderer::render); - Spark.get("/public/services/:id", this::serviceModel, serviceByIdRenderer::render); + Spark.get("/actions", (req,rs) -> new Object() , actionsViewRenderer::render); + Spark.get("/events", eventLogService::eventsListModel , eventsRenderer::render); + Spark.get("/services/:id", this::serviceModel, serviceByIdRenderer::render); // Needed to be able to show website screenshots - Spark.get("/public/screenshot/:id", screenshotService::serveScreenshotRequest); + Spark.get("/screenshot/:id", screenshotService::serveScreenshotRequest); - Spark.get("/public/:resource", this::serveStatic); + Spark.get("/:resource", this::serveStatic); monitors.subscribe(this::logMonitorStateChange); diff --git a/code/services-core/control-service/java/nu/marginalia/control/app/svc/ApiKeyService.java b/code/services-core/control-service/java/nu/marginalia/control/app/svc/ApiKeyService.java index 8da2dd2c..88ac8da4 100644 --- a/code/services-core/control-service/java/nu/marginalia/control/app/svc/ApiKeyService.java +++ b/code/services-core/control-service/java/nu/marginalia/control/app/svc/ApiKeyService.java @@ -34,11 +34,11 @@ public class ApiKeyService { var apiKeysRenderer = rendererFactory.renderer("control/app/api-keys"); - Spark.get("/public/api-keys", this::apiKeysModel, apiKeysRenderer::render); - Spark.post("/public/api-keys", this::createApiKey, Redirects.redirectToApiKeys); - Spark.delete("/public/api-keys/:key", this::deleteApiKey, Redirects.redirectToApiKeys); + Spark.get("/api-keys", this::apiKeysModel, apiKeysRenderer::render); + Spark.post("/api-keys", this::createApiKey, Redirects.redirectToApiKeys); + Spark.delete("/api-keys/:key", this::deleteApiKey, Redirects.redirectToApiKeys); // HTML forms don't support the DELETE verb :-( - Spark.post("/public/api-keys/:key/delete", this::deleteApiKey, Redirects.redirectToApiKeys); + Spark.post("/api-keys/:key/delete", this::deleteApiKey, Redirects.redirectToApiKeys); } diff --git a/code/services-core/control-service/java/nu/marginalia/control/app/svc/ControlBlacklistService.java b/code/services-core/control-service/java/nu/marginalia/control/app/svc/ControlBlacklistService.java index 5ce23599..a5e3d300 100644 --- a/code/services-core/control-service/java/nu/marginalia/control/app/svc/ControlBlacklistService.java +++ b/code/services-core/control-service/java/nu/marginalia/control/app/svc/ControlBlacklistService.java @@ -36,8 +36,8 @@ public class ControlBlacklistService { public void register() throws IOException { var blacklistRenderer = rendererFactory.renderer("control/app/blacklist"); - Spark.get("/public/blacklist", this::blacklistModel, blacklistRenderer::render); - Spark.post("/public/blacklist", this::updateBlacklist, Redirects.redirectToBlacklist); + Spark.get("/blacklist", this::blacklistModel, blacklistRenderer::render); + Spark.post("/blacklist", this::updateBlacklist, Redirects.redirectToBlacklist); } private Object blacklistModel(Request request, Response response) { diff --git a/code/services-core/control-service/java/nu/marginalia/control/app/svc/DomainComplaintService.java b/code/services-core/control-service/java/nu/marginalia/control/app/svc/DomainComplaintService.java index 262bc4b5..04988c55 100644 --- a/code/services-core/control-service/java/nu/marginalia/control/app/svc/DomainComplaintService.java +++ b/code/services-core/control-service/java/nu/marginalia/control/app/svc/DomainComplaintService.java @@ -46,8 +46,8 @@ public class DomainComplaintService { public void register() throws IOException { var domainComplaintsRenderer = rendererFactory.renderer("control/app/domain-complaints"); - Spark.get("/public/complaints", this::complaintsModel, domainComplaintsRenderer::render); - Spark.post("/public/complaints/:domain", this::reviewComplaint, Redirects.redirectToComplaints); + Spark.get("/complaints", this::complaintsModel, domainComplaintsRenderer::render); + Spark.post("/complaints/:domain", this::reviewComplaint, Redirects.redirectToComplaints); } private Object complaintsModel(Request request, Response response) { diff --git a/code/services-core/control-service/java/nu/marginalia/control/app/svc/RandomExplorationService.java b/code/services-core/control-service/java/nu/marginalia/control/app/svc/RandomExplorationService.java index 38b74106..1720079b 100644 --- a/code/services-core/control-service/java/nu/marginalia/control/app/svc/RandomExplorationService.java +++ b/code/services-core/control-service/java/nu/marginalia/control/app/svc/RandomExplorationService.java @@ -32,9 +32,9 @@ public class RandomExplorationService { public void register() throws IOException { var reviewRandomDomainsRenderer = rendererFactory.renderer("control/app/review-random-domains"); - Spark.get("/public/review-random-domains", this::reviewRandomDomainsModel, reviewRandomDomainsRenderer::render); + Spark.get("/review-random-domains", this::reviewRandomDomainsModel, reviewRandomDomainsRenderer::render); - Spark.post("/public/review-random-domains", this::reviewRandomDomainsAction); + Spark.post("/review-random-domains", this::reviewRandomDomainsAction); } private Object reviewRandomDomainsModel(Request request, Response response) throws SQLException { diff --git a/code/services-core/control-service/java/nu/marginalia/control/app/svc/SearchToBanService.java b/code/services-core/control-service/java/nu/marginalia/control/app/svc/SearchToBanService.java index f9487e22..7993009c 100644 --- a/code/services-core/control-service/java/nu/marginalia/control/app/svc/SearchToBanService.java +++ b/code/services-core/control-service/java/nu/marginalia/control/app/svc/SearchToBanService.java @@ -39,8 +39,8 @@ public class SearchToBanService { public void register() throws IOException { var searchToBanRenderer = rendererFactory.renderer("control/app/search-to-ban"); - Spark.get("/public/search-to-ban", this::handle, searchToBanRenderer::render); - Spark.post("/public/search-to-ban", this::handle, searchToBanRenderer::render); + Spark.get("/search-to-ban", this::handle, searchToBanRenderer::render); + Spark.post("/search-to-ban", this::handle, searchToBanRenderer::render); } public Object handle(Request request, Response response) { diff --git a/code/services-core/control-service/java/nu/marginalia/control/node/svc/ControlFileStorageService.java b/code/services-core/control-service/java/nu/marginalia/control/node/svc/ControlFileStorageService.java index b385e32e..ea1b8d47 100644 --- a/code/services-core/control-service/java/nu/marginalia/control/node/svc/ControlFileStorageService.java +++ b/code/services-core/control-service/java/nu/marginalia/control/node/svc/ControlFileStorageService.java @@ -32,12 +32,12 @@ public class ControlFileStorageService { } public void register() throws IOException { - Spark.post("/public/storage/:fid/delete", this::flagFileForDeletionRequest, Redirects.redirectToStorage); + Spark.post("/storage/:fid/delete", this::flagFileForDeletionRequest, Redirects.redirectToStorage); - Spark.post("/public/nodes/:id/storage/:fid/delete", this::deleteFileStorage); - Spark.post("/public/nodes/:id/storage/:fid/enable", this::enableFileStorage); - Spark.post("/public/nodes/:id/storage/:fid/disable", this::disableFileStorage); - Spark.get("/public/nodes/:id/storage/:fid/transfer", this::downloadFileFromStorage); + Spark.post("/nodes/:id/storage/:fid/delete", this::deleteFileStorage); + Spark.post("/nodes/:id/storage/:fid/enable", this::enableFileStorage); + Spark.post("/nodes/:id/storage/:fid/disable", this::disableFileStorage); + Spark.get("/nodes/:id/storage/:fid/transfer", this::downloadFileFromStorage); } diff --git a/code/services-core/control-service/java/nu/marginalia/control/node/svc/ControlNodeActionsService.java b/code/services-core/control-service/java/nu/marginalia/control/node/svc/ControlNodeActionsService.java index b711be14..4b833789 100644 --- a/code/services-core/control-service/java/nu/marginalia/control/node/svc/ControlNodeActionsService.java +++ b/code/services-core/control-service/java/nu/marginalia/control/node/svc/ControlNodeActionsService.java @@ -58,55 +58,55 @@ public class ControlNodeActionsService { } public void register() { - Spark.post("/public/nodes/:node/actions/repartition-index", this::triggerRepartition, + Spark.post("/nodes/:node/actions/repartition-index", this::triggerRepartition, redirectControl.renderRedirectAcknowledgement("Repartitioning", "..") ); - Spark.post("/public/nodes/:node/actions/sideload-encyclopedia", this::sideloadEncyclopedia, + Spark.post("/nodes/:node/actions/sideload-encyclopedia", this::sideloadEncyclopedia, redirectControl.renderRedirectAcknowledgement("Sideloading", "..") ); - Spark.post("/public/nodes/:node/actions/sideload-dirtree", this::sideloadDirtree, + Spark.post("/nodes/:node/actions/sideload-dirtree", this::sideloadDirtree, redirectControl.renderRedirectAcknowledgement("Sideloading", "..") ); - Spark.post("/public/nodes/:node/actions/sideload-reddit", this::sideloadReddit, + Spark.post("/nodes/:node/actions/sideload-reddit", this::sideloadReddit, redirectControl.renderRedirectAcknowledgement("Sideloading", "..") ); - Spark.post("/public/nodes/:node/actions/sideload-warc", this::sideloadWarc, + Spark.post("/nodes/:node/actions/sideload-warc", this::sideloadWarc, redirectControl.renderRedirectAcknowledgement("Sideloading", "..") ); - Spark.post("/public/nodes/:node/actions/sideload-stackexchange", this::sideloadStackexchange, + Spark.post("/nodes/:node/actions/sideload-stackexchange", this::sideloadStackexchange, redirectControl.renderRedirectAcknowledgement("Sideloading", "..") ); - Spark.post("/public/nodes/:node/actions/export-segmentation", this::exportSegmentationModel, + Spark.post("/nodes/:node/actions/export-segmentation", this::exportSegmentationModel, redirectControl.renderRedirectAcknowledgement("Exporting", "..") ); - Spark.post("/public/nodes/:node/actions/download-sample-data", this::downloadSampleData, + Spark.post("/nodes/:node/actions/download-sample-data", this::downloadSampleData, redirectControl.renderRedirectAcknowledgement("Downloading", "..") ); - Spark.post("/public/nodes/:id/actions/new-crawl", this::triggerNewCrawl, + Spark.post("/nodes/:id/actions/new-crawl", this::triggerNewCrawl, redirectControl.renderRedirectAcknowledgement("Crawling", "..") ); - Spark.post("/public/nodes/:id/actions/recrawl", this::triggerAutoRecrawl, + Spark.post("/nodes/:id/actions/recrawl", this::triggerAutoRecrawl, redirectControl.renderRedirectAcknowledgement("Recrawling", "..") ); - Spark.post("/public/nodes/:id/actions/process", this::triggerProcess, + Spark.post("/nodes/:id/actions/process", this::triggerProcess, redirectControl.renderRedirectAcknowledgement("Processing", "..") ); - Spark.post("/public/nodes/:id/actions/load", this::triggerLoadSelected, + Spark.post("/nodes/:id/actions/load", this::triggerLoadSelected, redirectControl.renderRedirectAcknowledgement("Loading", "..") ); - Spark.post("/public/nodes/:id/actions/restore-backup", this::triggerRestoreBackup, + Spark.post("/nodes/:id/actions/restore-backup", this::triggerRestoreBackup, redirectControl.renderRedirectAcknowledgement("Restoring", "..") ); - Spark.post("/public/nodes/:id/actions/new-crawl-specs", this::createNewSpecsAction, + Spark.post("/nodes/:id/actions/new-crawl-specs", this::createNewSpecsAction, redirectControl.renderRedirectAcknowledgement("Creating", "../actions?view=new-crawl") ); - Spark.post("/public/nodes/:id/actions/export-db-data", this::exportDbData, + Spark.post("/nodes/:id/actions/export-db-data", this::exportDbData, redirectControl.renderRedirectAcknowledgement("Exporting", "..") ); - Spark.post("/public/nodes/:id/actions/export-from-crawl-data", this::exportFromCrawlData, + Spark.post("/nodes/:id/actions/export-from-crawl-data", this::exportFromCrawlData, redirectControl.renderRedirectAcknowledgement("Exporting", "..") ); - Spark.post("/public/nodes/:id/actions/export-sample-data", this::exportSampleData, + Spark.post("/nodes/:id/actions/export-sample-data", this::exportSampleData, redirectControl.renderRedirectAcknowledgement("Exporting", "..") ); } diff --git a/code/services-core/control-service/java/nu/marginalia/control/node/svc/ControlNodeService.java b/code/services-core/control-service/java/nu/marginalia/control/node/svc/ControlNodeService.java index a62bbad3..bc87a921 100644 --- a/code/services-core/control-service/java/nu/marginalia/control/node/svc/ControlNodeService.java +++ b/code/services-core/control-service/java/nu/marginalia/control/node/svc/ControlNodeService.java @@ -75,29 +75,29 @@ public class ControlNodeService { var configRenderer = rendererFactory.renderer("control/node/node-config"); - Spark.get("/public/nodes", this::nodeListModel, nodeListRenderer::render); - Spark.get("/public/nodes/:id", this::nodeOverviewModel, overviewRenderer::render); - Spark.get("/public/nodes/:id/", this::nodeOverviewModel, overviewRenderer::render); - Spark.get("/public/nodes/:id/actors", this::nodeActorsModel, actorsRenderer::render); - Spark.get("/public/nodes/:id/actions", this::nodeActionsModel, actionsRenderer::render); - Spark.get("/public/nodes/:id/storage/", this::nodeStorageConfModel, storageConfRenderer::render); - Spark.get("/public/nodes/:id/storage/conf", this::nodeStorageConfModel, storageConfRenderer::render); - Spark.get("/public/nodes/:id/storage/details", this::nodeStorageDetailsModel, storageDetailsRenderer::render); + Spark.get("/nodes", this::nodeListModel, nodeListRenderer::render); + Spark.get("/nodes/:id", this::nodeOverviewModel, overviewRenderer::render); + Spark.get("/nodes/:id/", this::nodeOverviewModel, overviewRenderer::render); + Spark.get("/nodes/:id/actors", this::nodeActorsModel, actorsRenderer::render); + Spark.get("/nodes/:id/actions", this::nodeActionsModel, actionsRenderer::render); + Spark.get("/nodes/:id/storage/", this::nodeStorageConfModel, storageConfRenderer::render); + Spark.get("/nodes/:id/storage/conf", this::nodeStorageConfModel, storageConfRenderer::render); + Spark.get("/nodes/:id/storage/details", this::nodeStorageDetailsModel, storageDetailsRenderer::render); - Spark.post("/public/nodes/:id/process/:processBase/stop", this::stopProcess, + Spark.post("/nodes/:id/process/:processBase/stop", this::stopProcess, redirectControl.renderRedirectAcknowledgement("Stopping", "../..") ); - Spark.get("/public/nodes/:id/storage/:view", this::nodeStorageListModel, storageListRenderer::render); + Spark.get("/nodes/:id/storage/:view", this::nodeStorageListModel, storageListRenderer::render); - Spark.get("/public/nodes/:id/configuration", this::nodeConfigModel, configRenderer::render); - Spark.post("/public/nodes/:id/configuration", this::updateConfigModel, configRenderer::render); + Spark.get("/nodes/:id/configuration", this::nodeConfigModel, configRenderer::render); + Spark.post("/nodes/:id/configuration", this::updateConfigModel, configRenderer::render); - Spark.post("/public/nodes/:id/storage/reset-state/:fid", this::resetState, + Spark.post("/nodes/:id/storage/reset-state/:fid", this::resetState, redirectControl.renderRedirectAcknowledgement("Restoring", "..") ); - Spark.post("/public/nodes/:id/fsms/:fsm/start", this::startFsm); - Spark.post("/public/nodes/:id/fsms/:fsm/stop", this::stopFsm); + Spark.post("/nodes/:id/fsms/:fsm/start", this::startFsm); + Spark.post("/nodes/:id/fsms/:fsm/stop", this::stopFsm); } private Object resetState(Request request, Response response) throws SQLException { diff --git a/code/services-core/control-service/java/nu/marginalia/control/sys/svc/AbortedProcessService.java b/code/services-core/control-service/java/nu/marginalia/control/sys/svc/AbortedProcessService.java index 8290e7dc..d188a25c 100644 --- a/code/services-core/control-service/java/nu/marginalia/control/sys/svc/AbortedProcessService.java +++ b/code/services-core/control-service/java/nu/marginalia/control/sys/svc/AbortedProcessService.java @@ -60,9 +60,9 @@ public class AbortedProcessService { public void register() { var abortedProcessesRenderer = rendererFactory.renderer("control/sys/aborted-processes"); - Spark.get("/public/aborted-processes", this::abortedProcessesModel, abortedProcessesRenderer::render); - Spark.get("/public/aborted-processes/", this::abortedProcessesModel, abortedProcessesRenderer::render); - Spark.post("/public/aborted-processes/:id", this::restartProcess, redirectControl.renderRedirectAcknowledgement("Restarting...", "/")); + Spark.get("/aborted-processes", this::abortedProcessesModel, abortedProcessesRenderer::render); + Spark.get("/aborted-processes/", this::abortedProcessesModel, abortedProcessesRenderer::render); + Spark.post("/aborted-processes/:id", this::restartProcess, redirectControl.renderRedirectAcknowledgement("Restarting...", "/")); } private Object abortedProcessesModel(Request request, Response response) { diff --git a/code/services-core/control-service/java/nu/marginalia/control/sys/svc/ControlDomainRankingSetsService.java b/code/services-core/control-service/java/nu/marginalia/control/sys/svc/ControlDomainRankingSetsService.java index e2adf14b..5e060c07 100644 --- a/code/services-core/control-service/java/nu/marginalia/control/sys/svc/ControlDomainRankingSetsService.java +++ b/code/services-core/control-service/java/nu/marginalia/control/sys/svc/ControlDomainRankingSetsService.java @@ -29,10 +29,10 @@ public class ControlDomainRankingSetsService { var updateDatasetRenderer = rendererFactory.renderer("control/sys/update-domain-ranking-set"); var newDatasetRenderer = rendererFactory.renderer("control/sys/new-domain-ranking-set"); - Spark.get("/public/domain-ranking-sets", this::rankingSetsModel, datasetsRenderer::render); - Spark.get("/public/domain-ranking-sets/new", (rq,rs) -> new Object(), newDatasetRenderer::render); - Spark.get("/public/domain-ranking-sets/:id", this::rankingSetModel, updateDatasetRenderer::render); - Spark.post("/public/domain-ranking-sets/:id", this::alterSetModel, Redirects.redirectToRankingDataSets); + Spark.get("/domain-ranking-sets", this::rankingSetsModel, datasetsRenderer::render); + Spark.get("/domain-ranking-sets/new", (rq,rs) -> new Object(), newDatasetRenderer::render); + Spark.get("/domain-ranking-sets/:id", this::rankingSetModel, updateDatasetRenderer::render); + Spark.post("/domain-ranking-sets/:id", this::alterSetModel, Redirects.redirectToRankingDataSets); } private Object alterSetModel(Request request, Response response) throws SQLException { diff --git a/code/services-core/control-service/java/nu/marginalia/control/sys/svc/ControlSysActionsService.java b/code/services-core/control-service/java/nu/marginalia/control/sys/svc/ControlSysActionsService.java index 738e2cd5..f2e52c2d 100644 --- a/code/services-core/control-service/java/nu/marginalia/control/sys/svc/ControlSysActionsService.java +++ b/code/services-core/control-service/java/nu/marginalia/control/sys/svc/ControlSysActionsService.java @@ -64,13 +64,13 @@ public class ControlSysActionsService { public void register() { var actionsView = rendererFactory.renderer("control/sys/sys-actions"); - Spark.get("/public/actions", this::actionsModel, actionsView::render); - Spark.post("/public/actions/recalculate-adjacencies-graph", this::calculateAdjacencies, Redirects.redirectToOverview); - Spark.post("/public/actions/reindex-all", this::reindexAll, Redirects.redirectToOverview); - Spark.post("/public/actions/reprocess-all", this::reprocessAll, Redirects.redirectToOverview); - Spark.post("/public/actions/recrawl-all", this::recrawlAll, Redirects.redirectToOverview); - Spark.post("/public/actions/flush-api-caches", this::flushApiCaches, Redirects.redirectToOverview); - Spark.post("/public/actions/reload-blogs-list", this::reloadBlogsList, Redirects.redirectToOverview); + Spark.get("/actions", this::actionsModel, actionsView::render); + Spark.post("/actions/recalculate-adjacencies-graph", this::calculateAdjacencies, Redirects.redirectToOverview); + Spark.post("/actions/reindex-all", this::reindexAll, Redirects.redirectToOverview); + Spark.post("/actions/reprocess-all", this::reprocessAll, Redirects.redirectToOverview); + Spark.post("/actions/recrawl-all", this::recrawlAll, Redirects.redirectToOverview); + Spark.post("/actions/flush-api-caches", this::flushApiCaches, Redirects.redirectToOverview); + Spark.post("/actions/reload-blogs-list", this::reloadBlogsList, Redirects.redirectToOverview); } @SneakyThrows diff --git a/code/services-core/control-service/java/nu/marginalia/control/sys/svc/DataSetsService.java b/code/services-core/control-service/java/nu/marginalia/control/sys/svc/DataSetsService.java index d1636623..c85d5b80 100644 --- a/code/services-core/control-service/java/nu/marginalia/control/sys/svc/DataSetsService.java +++ b/code/services-core/control-service/java/nu/marginalia/control/sys/svc/DataSetsService.java @@ -28,8 +28,8 @@ public class DataSetsService { public void register() throws IOException { var datasetsRenderer = rendererFactory.renderer("control/sys/data-sets"); - Spark.get("/public/datasets", this::dataSetsModel, datasetsRenderer::render); - Spark.post("/public/datasets", this::updateDataSets, datasetsRenderer::render); + Spark.get("/datasets", this::dataSetsModel, datasetsRenderer::render); + Spark.post("/datasets", this::updateDataSets, datasetsRenderer::render); } public Object dataSetsModel(Request request, Response response) { diff --git a/code/services-core/control-service/java/nu/marginalia/control/sys/svc/MessageQueueService.java b/code/services-core/control-service/java/nu/marginalia/control/sys/svc/MessageQueueService.java index 922d4a20..4ef9df9a 100644 --- a/code/services-core/control-service/java/nu/marginalia/control/sys/svc/MessageQueueService.java +++ b/code/services-core/control-service/java/nu/marginalia/control/sys/svc/MessageQueueService.java @@ -41,13 +41,13 @@ public class MessageQueueService { var newMessageRenderer = rendererFactory.renderer("control/sys/new-message"); var viewMessageRenderer = rendererFactory.renderer("control/sys/view-message"); - Spark.get("/public/message-queue", this::listMessageQueueModel, messageQueueRenderer::render); - Spark.post("/public/message-queue/", this::createMessage, Redirects.redirectToMessageQueue); - Spark.get("/public/message-queue/new", this::newMessageModel, newMessageRenderer::render); - Spark.get("/public/message-queue/:id", this::viewMessageModel, viewMessageRenderer::render); - Spark.get("/public/message-queue/:id/reply", this::replyMessageModel, newMessageRenderer::render); - Spark.get("/public/message-queue/:id/edit", this::viewMessageForEditStateModel, updateMessageStateRenderer::render); - Spark.post("/public/message-queue/:id/edit", this::editMessageState, Redirects.redirectToMessageQueue); + Spark.get("/message-queue", this::listMessageQueueModel, messageQueueRenderer::render); + Spark.post("/message-queue/", this::createMessage, Redirects.redirectToMessageQueue); + Spark.get("/message-queue/new", this::newMessageModel, newMessageRenderer::render); + Spark.get("/message-queue/:id", this::viewMessageModel, viewMessageRenderer::render); + Spark.get("/message-queue/:id/reply", this::replyMessageModel, newMessageRenderer::render); + Spark.get("/message-queue/:id/edit", this::viewMessageForEditStateModel, updateMessageStateRenderer::render); + Spark.post("/message-queue/:id/edit", this::editMessageState, Redirects.redirectToMessageQueue); } diff --git a/code/services-core/query-service/java/nu/marginalia/query/QueryService.java b/code/services-core/query-service/java/nu/marginalia/query/QueryService.java index 5a2cc82f..6a7a7b0a 100644 --- a/code/services-core/query-service/java/nu/marginalia/query/QueryService.java +++ b/code/services-core/query-service/java/nu/marginalia/query/QueryService.java @@ -31,10 +31,10 @@ public class QueryService extends Service { List.of(queryGRPCService, domainLinksService)); - Spark.get("/public/search", queryBasicInterface::handleBasic); + Spark.get("/search", queryBasicInterface::handleBasic); if (!Boolean.getBoolean("noQdebug")) { - Spark.get("/public/qdebug", queryBasicInterface::handleAdvanced); + Spark.get("/qdebug", queryBasicInterface::handleAdvanced); } Spark.exception(Exception.class, (e, request, response) -> { diff --git a/run/install/docker-compose-barebones-1.yml.template b/run/install/docker-compose-barebones-1.yml.template index e4c71a6b..66283e8c 100644 --- a/run/install/docker-compose-barebones-1.yml.template +++ b/run/install/docker-compose-barebones-1.yml.template @@ -50,9 +50,6 @@ services: - "traefik.enable=true" - "traefik.http.routers.search-service.rule=PathPrefix(`/`)" - "traefik.http.routers.search-service.entrypoints=search" - - "traefik.http.routers.search-service.middlewares=add-xpublic,add-public" - - "traefik.http.middlewares.add-xpublic.headers.customrequestheaders.X-Public=1" - - "traefik.http.middlewares.add-public.addprefix.prefix=/public" control-service: <<: *service image: "marginalia/control-service" @@ -66,9 +63,6 @@ services: - "traefik.enable=true" - "traefik.http.routers.control-service.rule=PathPrefix(`/`)" - "traefik.http.routers.control-service.entrypoints=control" - - "traefik.http.routers.control-service.middlewares=add-xpublic,add-public" - - "traefik.http.middlewares.add-xpublic.headers.customrequestheaders.X-Public=1" - - "traefik.http.middlewares.add-public.addprefix.prefix=/public" mariadb: image: "mariadb:lts" container_name: "mariadb" diff --git a/run/install/docker-compose-barebones-2.yml.template b/run/install/docker-compose-barebones-2.yml.template index ab9d0a08..0b6b9971 100644 --- a/run/install/docker-compose-barebones-2.yml.template +++ b/run/install/docker-compose-barebones-2.yml.template @@ -78,9 +78,6 @@ services: - "traefik.enable=true" - "traefik.http.routers.search-service.rule=PathPrefix(`/`)" - "traefik.http.routers.search-service.entrypoints=search" - - "traefik.http.routers.search-service.middlewares=add-xpublic,add-public" - - "traefik.http.middlewares.add-xpublic.headers.customrequestheaders.X-Public=1" - - "traefik.http.middlewares.add-public.addprefix.prefix=/public" control-service: <<: *service image: "marginalia/control-service" @@ -94,9 +91,6 @@ services: - "traefik.enable=true" - "traefik.http.routers.control-service.rule=PathPrefix(`/`)" - "traefik.http.routers.control-service.entrypoints=control" - - "traefik.http.routers.control-service.middlewares=add-xpublic,add-public" - - "traefik.http.middlewares.add-xpublic.headers.customrequestheaders.X-Public=1" - - "traefik.http.middlewares.add-public.addprefix.prefix=/public" mariadb: image: "mariadb:lts" container_name: "mariadb" diff --git a/run/install/docker-compose-marginalia.yml.template b/run/install/docker-compose-marginalia.yml.template index e8622a97..ed562ab9 100644 --- a/run/install/docker-compose-marginalia.yml.template +++ b/run/install/docker-compose-marginalia.yml.template @@ -82,9 +82,6 @@ services: - "traefik.enable=true" - "traefik.http.routers.search-service.rule=PathPrefix(`/`)" - "traefik.http.routers.search-service.entrypoints=search" - - "traefik.http.routers.search-service.middlewares=add-xpublic,add-public" - - "traefik.http.middlewares.add-xpublic.headers.customrequestheaders.X-Public=1" - - "traefik.http.middlewares.add-public.addprefix.prefix=/public" assistant-service: <<: *service image: "marginalia/assistant-service" @@ -95,13 +92,8 @@ services: - "traefik.enable=true" - "traefik.http.routers.assistant-service-screenshot.rule=PathPrefix(`/screenshot`)" - "traefik.http.routers.assistant-service-screenshot.entrypoints=search" - - "traefik.http.routers.assistant-service-screenshot.middlewares=add-xpublic" - - "traefik.http.routers.assistant-service-screenshot.middlewares=add-public" - "traefik.http.routers.assistant-service-suggest.rule=PathPrefix(`/suggest`)" - "traefik.http.routers.assistant-service-suggest.entrypoints=search" - - "traefik.http.routers.assistant-service-suggest.middlewares=add-xpublic,add-public" - - "traefik.http.middlewares.add-xpublic.headers.customrequestheaders.X-Public=1" - - "traefik.http.middlewares.add-public.addprefix.prefix=/public" api-service: <<: *service image: "marginalia/api-service" @@ -112,9 +104,6 @@ services: - "traefik.enable=true" - "traefik.http.routers.api-service.rule=PathPrefix(`/`)" - "traefik.http.routers.api-service.entrypoints=api" - - "traefik.http.routers.api-service.middlewares=add-xpublic,add-public" - - "traefik.http.middlewares.add-xpublic.headers.customrequestheaders.X-Public=1" - - "traefik.http.middlewares.add-public.addprefix.prefix=/public" control-service: <<: *service image: "marginalia/control-service" @@ -128,9 +117,6 @@ services: - "traefik.enable=true" - "traefik.http.routers.control-service.rule=PathPrefix(`/`)" - "traefik.http.routers.control-service.entrypoints=control" - - "traefik.http.routers.control-service.middlewares=add-xpublic,add-public" - - "traefik.http.middlewares.add-xpublic.headers.customrequestheaders.X-Public=1" - - "traefik.http.middlewares.add-public.addprefix.prefix=/public" mariadb: image: "mariadb:lts" container_name: "mariadb"