mirror of
https://github.com/MarginaliaSearch/MarginaliaSearch.git
synced 2025-02-23 04:58:59 +00:00
(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.
This commit is contained in:
parent
9c49e876d5
commit
4772e0b59d
@ -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 """
|
||||
<html><body>
|
||||
<h1>Migration required</h1>
|
||||
<p>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.</p>
|
||||
""";
|
||||
});
|
||||
|
||||
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";
|
||||
|
@ -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")
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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) {
|
||||
|
@ -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 {
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
@ -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", "..")
|
||||
);
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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) {
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
@ -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) -> {
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
Loading…
Reference in New Issue
Block a user