From 7d27cc9712a928ee378cc7b81775d437204b5bef Mon Sep 17 00:00:00 2001 From: John Niang Date: Mon, 8 May 2023 18:21:41 +0800 Subject: [PATCH] Change the type of site.url to URL instead of URI (#3910) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### What type of PR is this? /kind bug /area core /milestone 2.6.x #### What this PR does / why we need it: This PR make the type of `site.url` to URL instead of URI. If we don't configure `halo.external-url`, the request URI will be used. #### Which issue(s) this PR fixes: Fixes https://github.com/halo-dev/halo/issues/3908 #### Special notes for your reviewer: Add the line below into any templates: ```html ``` And check if the output is correct by accessing `http://localhost:8090` or `http://127.0.0.1:8090` or `http://192.168.xxx.xxx:8090` when `halo.external-url` is not set. Check if the output is correct by accessing `http://localhost:8090` or `http://127.0.0.1:8090` or `http://192.168.xxx.xxx:8090` when `halo.external-url` is set to `https://halo.run/`. #### Does this PR introduce a user-facing change? ```release-note 修复 site.url 解析有误的问题 ``` --- .../theme/SiteSettingVariablesAcquirer.java | 2 +- .../app/theme/finders/vo/SiteSettingVo.java | 4 ++-- .../SiteSettingVariablesAcquirerTest.java | 21 +++++++++++-------- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/application/src/main/java/run/halo/app/theme/SiteSettingVariablesAcquirer.java b/application/src/main/java/run/halo/app/theme/SiteSettingVariablesAcquirer.java index 4713fa7a9..d5145ae8e 100644 --- a/application/src/main/java/run/halo/app/theme/SiteSettingVariablesAcquirer.java +++ b/application/src/main/java/run/halo/app/theme/SiteSettingVariablesAcquirer.java @@ -28,7 +28,7 @@ public class SiteSettingVariablesAcquirer implements ViewContextBasedVariablesAc .filter(configMap -> configMap.getData() != null) .map(configMap -> { SiteSettingVo siteSettingVo = SiteSettingVo.from(configMap) - .withUrl(externalUrlSupplier.get()); + .withUrl(externalUrlSupplier.getURL(exchange.getRequest())); return Map.of("site", siteSettingVo); }); } diff --git a/application/src/main/java/run/halo/app/theme/finders/vo/SiteSettingVo.java b/application/src/main/java/run/halo/app/theme/finders/vo/SiteSettingVo.java index 1b0145f50..485ee1a11 100644 --- a/application/src/main/java/run/halo/app/theme/finders/vo/SiteSettingVo.java +++ b/application/src/main/java/run/halo/app/theme/finders/vo/SiteSettingVo.java @@ -1,6 +1,6 @@ package run.halo.app.theme.finders.vo; -import java.net.URI; +import java.net.URL; import java.util.Map; import lombok.Builder; import lombok.Value; @@ -23,7 +23,7 @@ public class SiteSettingVo { String title; @With - URI url; + URL url; String subtitle; diff --git a/application/src/test/java/run/halo/app/theme/SiteSettingVariablesAcquirerTest.java b/application/src/test/java/run/halo/app/theme/SiteSettingVariablesAcquirerTest.java index dc0e69f11..8fd8066ab 100644 --- a/application/src/test/java/run/halo/app/theme/SiteSettingVariablesAcquirerTest.java +++ b/application/src/test/java/run/halo/app/theme/SiteSettingVariablesAcquirerTest.java @@ -1,16 +1,18 @@ package run.halo.app.theme; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import java.net.URI; -import java.net.URISyntaxException; +import java.net.MalformedURLException; +import java.net.URL; import java.util.Map; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; @@ -37,23 +39,24 @@ public class SiteSettingVariablesAcquirerTest { private SiteSettingVariablesAcquirer siteSettingVariablesAcquirer; @Test - void acquire() throws URISyntaxException { - ConfigMap configMap = new ConfigMap(); + void acquireWhenExternalUrlSet() throws MalformedURLException { + var configMap = new ConfigMap(); configMap.setData(Map.of()); - URI uri = new URI("https://halo.run"); - when(externalUrlSupplier.get()).thenReturn(uri); + var url = new URL("https://halo.run"); + when(externalUrlSupplier.getURL(any())).thenReturn(url); when(environmentFetcher.getConfigMap()).thenReturn(Mono.just(configMap)); - siteSettingVariablesAcquirer.acquire(Mockito.mock(ServerWebExchange.class)) + siteSettingVariablesAcquirer.acquire(mock(ServerWebExchange.class)) .as(StepVerifier::create) .consumeNextWith(result -> { assertThat(result).containsKey("site"); assertThat(result.get("site")).isInstanceOf(SiteSettingVo.class); assertThat((SiteSettingVo) result.get("site")) .extracting(SiteSettingVo::getUrl) - .isEqualTo(uri); + .isEqualTo(url); }) .verifyComplete(); + verify(externalUrlSupplier).getURL(any()); } }