diff --git a/api/src/main/java/run/halo/app/infra/ExternalUrlSupplier.java b/api/src/main/java/run/halo/app/infra/ExternalUrlSupplier.java index fa5bc74e8..0e8e91df0 100644 --- a/api/src/main/java/run/halo/app/infra/ExternalUrlSupplier.java +++ b/api/src/main/java/run/halo/app/infra/ExternalUrlSupplier.java @@ -3,6 +3,7 @@ package run.halo.app.infra; import java.net.URI; import java.net.URL; import java.util.function.Supplier; +import javax.annotation.Nullable; import org.springframework.http.HttpRequest; /** @@ -30,4 +31,11 @@ public interface ExternalUrlSupplier extends Supplier { */ URL getURL(HttpRequest request); + /** + * Gets user-configured external URL from HaloProperties#getExternalUrl(). + * + * @return user-configured external URL or null if it is not provided. + */ + @Nullable + URL getRaw(); } diff --git a/application/src/main/java/run/halo/app/infra/HaloPropertiesExternalUrlSupplier.java b/application/src/main/java/run/halo/app/infra/HaloPropertiesExternalUrlSupplier.java index 453b89adc..d17c9e670 100644 --- a/application/src/main/java/run/halo/app/infra/HaloPropertiesExternalUrlSupplier.java +++ b/application/src/main/java/run/halo/app/infra/HaloPropertiesExternalUrlSupplier.java @@ -6,6 +6,7 @@ import java.net.URISyntaxException; import java.net.URL; import org.springframework.boot.autoconfigure.web.reactive.WebFluxProperties; import org.springframework.http.HttpRequest; +import org.springframework.lang.Nullable; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import run.halo.app.infra.properties.HaloProperties; @@ -54,6 +55,12 @@ public class HaloPropertiesExternalUrlSupplier implements ExternalUrlSupplier { return externalUrl; } + @Nullable + @Override + public URL getRaw() { + return haloProperties.getExternalUrl(); + } + private String getBasePath() { var basePath = webFluxProperties.getBasePath(); if (!StringUtils.hasText(basePath)) { diff --git a/application/src/test/java/run/halo/app/infra/HaloPropertiesExternalUrlSupplierTest.java b/application/src/test/java/run/halo/app/infra/HaloPropertiesExternalUrlSupplierTest.java index b94ff1127..4fe085e3d 100644 --- a/application/src/test/java/run/halo/app/infra/HaloPropertiesExternalUrlSupplierTest.java +++ b/application/src/test/java/run/halo/app/infra/HaloPropertiesExternalUrlSupplierTest.java @@ -1,6 +1,7 @@ package run.halo.app.infra; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -105,4 +106,14 @@ class HaloPropertiesExternalUrlSupplierTest { assertEquals(new URL("https://localhost/blog"), url); } + @Test + void getRaw() throws MalformedURLException { + var fakeUri = URI.create("http://localhost/fake"); + when(haloProperties.getExternalUrl()).thenReturn(fakeUri.toURL()); + assertEquals(fakeUri.toURL(), externalUrl.getRaw()); + + when(haloProperties.getExternalUrl()).thenReturn(null); + assertNull(externalUrl.getRaw()); + } + } \ No newline at end of file