From d612d83874febe6151ef3e8e2fdfc9e1f9c81d50 Mon Sep 17 00:00:00 2001 From: Athou Date: Wed, 14 Aug 2024 21:07:45 +0200 Subject: [PATCH] resolve public url dynamically, remove publicUrl config element --- .../java/com/commafeed/CommaFeedConfiguration.java | 10 ---------- .../backend/service/FeedSubscriptionService.java | 11 ----------- .../com/commafeed/frontend/resource/CategoryREST.java | 4 +++- .../com/commafeed/frontend/resource/FeedREST.java | 7 ++++--- .../com/commafeed/frontend/resource/UserREST.java | 6 ++++-- .../com/commafeed/frontend/servlet/LogoutServlet.java | 9 ++++++--- .../commafeed/frontend/servlet/NextUnreadServlet.java | 6 ++++-- 7 files changed, 21 insertions(+), 32 deletions(-) diff --git a/commafeed-server/src/main/java/com/commafeed/CommaFeedConfiguration.java b/commafeed-server/src/main/java/com/commafeed/CommaFeedConfiguration.java index 362face9..57c5ae14 100644 --- a/commafeed-server/src/main/java/com/commafeed/CommaFeedConfiguration.java +++ b/commafeed-server/src/main/java/com/commafeed/CommaFeedConfiguration.java @@ -10,7 +10,6 @@ import io.quarkus.runtime.configuration.MemorySize; import io.smallrye.config.ConfigMapping; import io.smallrye.config.WithDefault; import jakarta.validation.constraints.Min; -import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Positive; /** @@ -20,15 +19,6 @@ import jakarta.validation.constraints.Positive; */ @ConfigMapping(prefix = "commafeed") public interface CommaFeedConfiguration { - - /** - * URL used to access commafeed, used for various redirects. - * - */ - @NotBlank - @WithDefault("http://localhost:8082") - String publicUrl(); - /** * Whether to expose a robots.txt file that disallows web crawlers and search engine indexers. */ diff --git a/commafeed-server/src/main/java/com/commafeed/backend/service/FeedSubscriptionService.java b/commafeed-server/src/main/java/com/commafeed/backend/service/FeedSubscriptionService.java index 45d6674f..a3d69ba5 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/service/FeedSubscriptionService.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/service/FeedSubscriptionService.java @@ -5,8 +5,6 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import org.apache.commons.lang3.StringUtils; - import com.commafeed.CommaFeedConfiguration; import com.commafeed.backend.dao.FeedDAO; import com.commafeed.backend.dao.FeedEntryStatusDAO; @@ -56,15 +54,6 @@ public class FeedSubscriptionService { } public long subscribe(User user, String url, String title, FeedCategory category, int position) { - - final String pubUrl = config.publicUrl(); - if (StringUtils.isBlank(pubUrl)) { - throw new FeedSubscriptionException("Public URL of this CommaFeed instance is not set"); - } - if (url.startsWith(pubUrl)) { - throw new FeedSubscriptionException("Could not subscribe to a feed from this CommaFeed instance"); - } - Integer maxFeedsPerUser = config.database().cleanup().maxFeedsPerUser(); if (maxFeedsPerUser > 0 && feedSubscriptionDAO.count(user) >= maxFeedsPerUser) { String message = String.format("You cannot subscribe to more feeds on this CommaFeed instance (max %s feeds per user)", diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/CategoryREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/CategoryREST.java index 668db51c..0d83332d 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/CategoryREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/CategoryREST.java @@ -66,6 +66,7 @@ import jakarta.ws.rs.QueryParam; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.UriInfo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -89,6 +90,7 @@ public class CategoryREST { private final FeedEntryService feedEntryService; private final FeedSubscriptionService feedSubscriptionService; private final CommaFeedConfiguration config; + private final UriInfo uri; @Path("/entries") @GET @@ -215,7 +217,7 @@ public class CategoryREST { feed.setFeedType("rss_2.0"); feed.setTitle("CommaFeed - " + entries.getName()); feed.setDescription("CommaFeed - " + entries.getName()); - feed.setLink(config.publicUrl()); + feed.setLink(uri.getBaseUri().toString()); feed.setEntries(entries.getEntries().stream().map(Entry::asRss).toList()); SyndFeedOutput output = new SyndFeedOutput(); diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java index 33543b78..91befeb6 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/FeedREST.java @@ -1,7 +1,6 @@ package com.commafeed.frontend.resource; import java.io.StringWriter; -import java.net.URI; import java.nio.charset.StandardCharsets; import java.time.Instant; import java.util.Calendar; @@ -86,6 +85,7 @@ import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.Response.ResponseBuilder; import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.UriInfo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -114,6 +114,7 @@ public class FeedREST { private final OPMLImporter opmlImporter; private final OPMLExporter opmlExporter; private final CommaFeedConfiguration config; + private final UriInfo uri; private static FeedEntry initTestEntry() { FeedEntry entry = new FeedEntry(); @@ -217,7 +218,7 @@ public class FeedREST { feed.setFeedType("rss_2.0"); feed.setTitle("CommaFeed - " + entries.getName()); feed.setDescription("CommaFeed - " + entries.getName()); - feed.setLink(config.publicUrl()); + feed.setLink(uri.getBaseUri().toString()); feed.setEntries(entries.getEntries().stream().map(Entry::asRss).toList()); SyndFeedOutput output = new SyndFeedOutput(); @@ -413,7 +414,7 @@ public class FeedREST { } catch (Exception e) { log.info("Could not subscribe to url {} : {}", url, e.getMessage()); } - return Response.temporaryRedirect(URI.create(config.publicUrl())).build(); + return Response.temporaryRedirect(uri.getBaseUri()).build(); } private String prependHttp(String url) { diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/UserREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/UserREST.java index 0162c089..22744fe7 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/UserREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/UserREST.java @@ -58,6 +58,7 @@ import jakarta.ws.rs.QueryParam; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.UriInfo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -79,6 +80,7 @@ public class UserREST { private final PasswordEncryptionService encryptionService; private final MailService mailService; private final CommaFeedConfiguration config; + private final UriInfo uri; @Path("/settings") @GET @@ -289,7 +291,7 @@ public class UserREST { } private String buildEmailContent(User user) throws Exception { - String publicUrl = FeedUtils.removeTrailingSlash(config.publicUrl()); + String publicUrl = FeedUtils.removeTrailingSlash(uri.getBaseUri().toString()); publicUrl += "/rest/user/passwordResetCallback"; return String.format( "You asked for password recovery for account '%s', follow this link to change your password. Ignore this if you didn't request a password recovery.", @@ -337,7 +339,7 @@ public class UserREST { String message = "Your new password is: " + passwd; message += "
"; - message += String.format("Back to Homepage", config.publicUrl()); + message += String.format("Back to Homepage", uri.getBaseUri()); return Response.ok(message).build(); } diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/servlet/LogoutServlet.java b/commafeed-server/src/main/java/com/commafeed/frontend/servlet/LogoutServlet.java index 592074b4..7ef11c9d 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/servlet/LogoutServlet.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/servlet/LogoutServlet.java @@ -1,6 +1,5 @@ package com.commafeed.frontend.servlet; -import java.net.URI; import java.time.Instant; import java.util.Date; @@ -14,6 +13,7 @@ import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.core.NewCookie; import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriInfo; @Path("/logout") @PermitAll @@ -21,16 +21,19 @@ import jakarta.ws.rs.core.Response; public class LogoutServlet { private final CommaFeedConfiguration config; + private final UriInfo uri; private final String cookieName; - public LogoutServlet(CommaFeedConfiguration config, @ConfigProperty(name = "quarkus.http.auth.form.cookie-name") String cookieName) { + public LogoutServlet(CommaFeedConfiguration config, UriInfo uri, + @ConfigProperty(name = "quarkus.http.auth.form.cookie-name") String cookieName) { this.config = config; + this.uri = uri; this.cookieName = cookieName; } @GET public Response get() { NewCookie removeCookie = new NewCookie.Builder(cookieName).maxAge(0).expiry(Date.from(Instant.EPOCH)).path("/").build(); - return Response.temporaryRedirect(URI.create(config.publicUrl())).cookie(removeCookie).build(); + return Response.temporaryRedirect(uri.getBaseUri()).cookie(removeCookie).build(); } } diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/servlet/NextUnreadServlet.java b/commafeed-server/src/main/java/com/commafeed/frontend/servlet/NextUnreadServlet.java index 80ee3974..5e831744 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/servlet/NextUnreadServlet.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/servlet/NextUnreadServlet.java @@ -26,6 +26,7 @@ import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.QueryParam; import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriInfo; import lombok.RequiredArgsConstructor; @Path("/next") @@ -40,12 +41,13 @@ public class NextUnreadServlet { private final FeedEntryService feedEntryService; private final CommaFeedConfiguration config; private final AuthenticationContext authenticationContext; + private final UriInfo uri; @GET public Response get(@QueryParam("category") String categoryId, @QueryParam("order") @DefaultValue("desc") ReadingOrder order) { User user = authenticationContext.getCurrentUser(); if (user == null) { - return Response.temporaryRedirect(URI.create(config.publicUrl())).build(); + return Response.temporaryRedirect(uri.getBaseUri()).build(); } FeedEntryStatus status = unitOfWork.call(() -> { @@ -71,7 +73,7 @@ public class NextUnreadServlet { return s; }); - String url = status == null ? config.publicUrl() : status.getEntry().getUrl(); + String url = status == null ? uri.getBaseUri().toString() : status.getEntry().getUrl(); return Response.temporaryRedirect(URI.create(url)).build(); } }