From 1c3191777856e5703bbe9473d378994ea8a76582 Mon Sep 17 00:00:00 2001 From: guqing <38999863+guqing@users.noreply.github.com> Date: Thu, 19 Sep 2024 15:50:55 +0800 Subject: [PATCH 1/6] chore: replace deprecated Version methods with updated API (#6678) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### What type of PR is this? /milestone 2.20.x /area core #### What this PR does / why we need it: 替换 Version 过时方法的引用为新 API #### Does this PR introduce a user-facing change? ```release-note None ``` --- .../app/core/extension/service/impl/PluginServiceImpl.java | 2 +- .../java/run/halo/app/infra/DefaultSystemVersionSupplier.java | 4 ++-- .../src/main/java/run/halo/app/infra/utils/VersionUtils.java | 2 +- .../halo/app/core/extension/endpoint/PluginEndpointTest.java | 2 +- .../app/core/extension/reconciler/ThemeReconcilerTest.java | 4 ++-- .../core/extension/service/impl/PluginServiceImplTest.java | 2 +- .../halo/app/core/extension/theme/ThemeServiceImplTest.java | 2 +- .../run/halo/app/infra/DefaultSystemVersionSupplierTest.java | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/application/src/main/java/run/halo/app/core/extension/service/impl/PluginServiceImpl.java b/application/src/main/java/run/halo/app/core/extension/service/impl/PluginServiceImpl.java index 991250aac..266f0df39 100644 --- a/application/src/main/java/run/halo/app/core/extension/service/impl/PluginServiceImpl.java +++ b/application/src/main/java/run/halo/app/core/extension/service/impl/PluginServiceImpl.java @@ -476,7 +476,7 @@ public class PluginServiceImpl implements PluginService, InitializingBean, Dispo Version version = systemVersion.get(); // validate the plugin version // only use the nominal system version to compare, the format is like MAJOR.MINOR.PATCH - String systemVersion = version.getNormalVersion(); + String systemVersion = version.toStableVersion().toString(); String requires = newPlugin.getSpec().getRequires(); if (!VersionUtils.satisfiesRequires(systemVersion, requires)) { throw new UnsatisfiedAttributeValueException(String.format( diff --git a/application/src/main/java/run/halo/app/infra/DefaultSystemVersionSupplier.java b/application/src/main/java/run/halo/app/infra/DefaultSystemVersionSupplier.java index f91b48e73..806070a6b 100644 --- a/application/src/main/java/run/halo/app/infra/DefaultSystemVersionSupplier.java +++ b/application/src/main/java/run/halo/app/infra/DefaultSystemVersionSupplier.java @@ -26,9 +26,9 @@ public class DefaultSystemVersionSupplier implements SystemVersionSupplier { public Version get() { var properties = buildProperties.getIfUnique(); if (properties == null) { - return Version.valueOf(DEFAULT_VERSION); + return Version.parse(DEFAULT_VERSION); } var projectVersion = Objects.toString(properties.getVersion(), DEFAULT_VERSION); - return Version.valueOf(projectVersion); + return Version.parse(projectVersion); } } diff --git a/application/src/main/java/run/halo/app/infra/utils/VersionUtils.java b/application/src/main/java/run/halo/app/infra/utils/VersionUtils.java index 09441ac08..2f537b944 100644 --- a/application/src/main/java/run/halo/app/infra/utils/VersionUtils.java +++ b/application/src/main/java/run/halo/app/infra/utils/VersionUtils.java @@ -41,7 +41,7 @@ public class VersionUtils { try { return StringUtils.isBlank(constraint) || "*".equals(constraint) - || Version.valueOf(version).satisfies(constraint); + || Version.parse(version).satisfies(constraint); } catch (Exception e) { throw new ServerWebInputException("Illegal requires version expression.", null, e); } diff --git a/application/src/test/java/run/halo/app/core/extension/endpoint/PluginEndpointTest.java b/application/src/test/java/run/halo/app/core/extension/endpoint/PluginEndpointTest.java index 3de56eb72..2ff443606 100644 --- a/application/src/test/java/run/halo/app/core/extension/endpoint/PluginEndpointTest.java +++ b/application/src/test/java/run/halo/app/core/extension/endpoint/PluginEndpointTest.java @@ -183,7 +183,7 @@ class PluginEndpointTest { webClient = WebTestClient.bindToRouterFunction(endpoint.endpoint()) .build(); - lenient().when(systemVersionSupplier.get()).thenReturn(Version.valueOf("0.0.0")); + lenient().when(systemVersionSupplier.get()).thenReturn(Version.parse("0.0.0")); tempDirectory = Files.createTempDirectory("halo-test-plugin-upgrade-"); plugin002 = tempDirectory.resolve("plugin-0.0.2.jar"); diff --git a/application/src/test/java/run/halo/app/core/extension/reconciler/ThemeReconcilerTest.java b/application/src/test/java/run/halo/app/core/extension/reconciler/ThemeReconcilerTest.java index b18f928a8..e95044c8c 100644 --- a/application/src/test/java/run/halo/app/core/extension/reconciler/ThemeReconcilerTest.java +++ b/application/src/test/java/run/halo/app/core/extension/reconciler/ThemeReconcilerTest.java @@ -74,7 +74,7 @@ class ThemeReconcilerTest { @BeforeEach void setUp() throws IOException { defaultTheme = ResourceUtils.getFile("classpath:themes/default"); - lenient().when(systemVersionSupplier.get()).thenReturn(Version.valueOf("0.0.0")); + lenient().when(systemVersionSupplier.get()).thenReturn(Version.parse("0.0.0")); } @Test @@ -190,7 +190,7 @@ class ThemeReconcilerTest { @Test void reconcileStatus() { - when(systemVersionSupplier.get()).thenReturn(Version.valueOf("2.3.0")); + when(systemVersionSupplier.get()).thenReturn(Version.parse("2.3.0")); Path testWorkDir = tempDirectory.resolve("reconcile-delete"); when(themeRoot.get()).thenReturn(testWorkDir); diff --git a/application/src/test/java/run/halo/app/core/extension/service/impl/PluginServiceImplTest.java b/application/src/test/java/run/halo/app/core/extension/service/impl/PluginServiceImplTest.java index 2e79ce0fe..d90303fa1 100644 --- a/application/src/test/java/run/halo/app/core/extension/service/impl/PluginServiceImplTest.java +++ b/application/src/test/java/run/halo/app/core/extension/service/impl/PluginServiceImplTest.java @@ -123,7 +123,7 @@ class PluginServiceImplTest { getClass().getClassLoader().getResource("plugin/plugin-0.0.2")).toURI(); FileUtils.jar(Paths.get(fakePluingUri), tempDirectory.resolve("plugin-0.0.2.jar")); - lenient().when(systemVersionSupplier.get()).thenReturn(Version.valueOf("0.0.0")); + lenient().when(systemVersionSupplier.get()).thenReturn(Version.parse("0.0.0")); } @Test diff --git a/application/src/test/java/run/halo/app/core/extension/theme/ThemeServiceImplTest.java b/application/src/test/java/run/halo/app/core/extension/theme/ThemeServiceImplTest.java index 045b5f14e..6ef808b8d 100644 --- a/application/src/test/java/run/halo/app/core/extension/theme/ThemeServiceImplTest.java +++ b/application/src/test/java/run/halo/app/core/extension/theme/ThemeServiceImplTest.java @@ -78,7 +78,7 @@ class ThemeServiceImplTest { // init the folder Files.createDirectory(themeRoot.get()); - lenient().when(systemVersionSupplier.get()).thenReturn(Version.valueOf("0.0.0")); + lenient().when(systemVersionSupplier.get()).thenReturn(Version.parse("0.0.0")); } @AfterEach diff --git a/application/src/test/java/run/halo/app/infra/DefaultSystemVersionSupplierTest.java b/application/src/test/java/run/halo/app/infra/DefaultSystemVersionSupplierTest.java index 6be7f0a5f..217de47a9 100644 --- a/application/src/test/java/run/halo/app/infra/DefaultSystemVersionSupplierTest.java +++ b/application/src/test/java/run/halo/app/infra/DefaultSystemVersionSupplierTest.java @@ -60,6 +60,6 @@ class DefaultSystemVersionSupplierTest { when(buildPropertiesProvider.getIfUnique()).thenReturn(buildProperties); version = systemVersionSupplier.get(); assertThat(version.toString()).isEqualTo("2.0.0-SNAPSHOT"); - assertThat(version.getPreReleaseVersion()).isEqualTo("SNAPSHOT"); + assertThat(version.preReleaseVersion().orElseThrow()).isEqualTo("SNAPSHOT"); } } \ No newline at end of file From fb9aff00cad2904f4c4fe7e2067b37cb8afd8c23 Mon Sep 17 00:00:00 2001 From: John Niang Date: Thu, 19 Sep 2024 18:16:55 +0800 Subject: [PATCH 2/6] Add chunked transfer support for rendering templates (#6580) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### What type of PR is this? /kind improvement /area core /milestone 2.20.x #### What this PR does / why we need it: This PR adds chunked transfer support for rendering templates, which means that the max memory used by rendering template will be max chunk size instead of size of rendering result. Users can define the max chunk size like below: ```yaml spring: thymeleaf: reactive: maxChunkSize: 8KB # Setting to 0 will disable the chunked response. ``` #### Special notes for your reviewer: 1. Try to start Halo instance 2. Execute the command like below and see if the response headers contain `transfer-encoding: chunked`: ```bash http http://localhost:8090/ -p h HTTP/1.1 200 OK Cache-Control: no-cache, no-store, max-age=0, must-revalidate Content-Language: en-CN Content-Type: text/html Expires: 0 Pragma: no-cache Referrer-Policy: strict-origin-when-cross-origin Vary: Origin Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers X-Content-Type-Options: nosniff X-Frame-Options: SAMEORIGIN X-XSS-Protection: 0 content-encoding: gzip set-cookie: XSRF-TOKEN=1e677724-ce82-4b63-911c-f78b22cd9169; Path=/ transfer-encoding: chunked ``` #### Does this PR introduce a user-facing change? ```release-note 优化模板渲染时所需的内存 ``` --- .../run/halo/app/theme/HaloViewResolver.java | 45 +++++++++++++++++-- .../app/theme/engine/HaloTemplateEngine.java | 13 +++++- .../src/main/resources/application.yaml | 3 ++ 3 files changed, 56 insertions(+), 5 deletions(-) diff --git a/application/src/main/java/run/halo/app/theme/HaloViewResolver.java b/application/src/main/java/run/halo/app/theme/HaloViewResolver.java index 540e54512..3446240d0 100644 --- a/application/src/main/java/run/halo/app/theme/HaloViewResolver.java +++ b/application/src/main/java/run/halo/app/theme/HaloViewResolver.java @@ -6,11 +6,16 @@ import java.util.Locale; import java.util.Map; import java.util.Optional; import org.attoparser.ParseException; +import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties; +import org.springframework.boot.context.properties.PropertyMapper; import org.springframework.context.ApplicationContext; +import org.springframework.core.Ordered; import org.springframework.http.MediaType; import org.springframework.lang.NonNull; import org.springframework.stereotype.Component; +import org.springframework.util.unit.DataSize; import org.springframework.web.ErrorResponse; import org.springframework.web.reactive.result.view.View; import org.springframework.web.server.ServerWebExchange; @@ -24,13 +29,16 @@ import run.halo.app.theme.finders.FinderRegistry; import run.halo.app.theme.router.ModelConst; @Component("thymeleafReactiveViewResolver") -public class HaloViewResolver extends ThymeleafReactiveViewResolver { +public class HaloViewResolver extends ThymeleafReactiveViewResolver implements InitializingBean { private final FinderRegistry finderRegistry; - public HaloViewResolver(FinderRegistry finderRegistry) { - setViewClass(HaloView.class); + private final ThymeleafProperties thymeleafProperties; + + public HaloViewResolver(FinderRegistry finderRegistry, + ThymeleafProperties thymeleafProperties) { this.finderRegistry = finderRegistry; + this.thymeleafProperties = thymeleafProperties; } @Override @@ -44,6 +52,37 @@ public class HaloViewResolver extends ThymeleafReactiveViewResolver { }); } + @Override + public void afterPropertiesSet() throws Exception { + setViewClass(HaloView.class); + var map = PropertyMapper.get(); + map.from(thymeleafProperties::getEncoding) + .whenNonNull() + .to(this::setDefaultCharset); + map.from(thymeleafProperties::getExcludedViewNames) + .whenNonNull() + .to(this::setExcludedViewNames); + map.from(thymeleafProperties::getViewNames) + .whenNonNull() + .to(this::setViewNames); + + var reactive = thymeleafProperties.getReactive(); + map.from(reactive::getMediaTypes) + .whenNonNull() + .to(this::setSupportedMediaTypes); + map.from(reactive::getFullModeViewNames) + .whenNonNull() + .to(this::setFullModeViewNames); + map.from(reactive::getChunkedModeViewNames) + .whenNonNull() + .to(this::setChunkedModeViewNames); + map.from(reactive::getMaxChunkSize) + .asInt(DataSize::toBytes) + .when(size -> size > 0) + .to(this::setResponseMaxChunkSizeBytes); + setOrder(Ordered.LOWEST_PRECEDENCE - 5); + } + public static class HaloView extends ThymeleafReactiveView { @Autowired diff --git a/application/src/main/java/run/halo/app/theme/engine/HaloTemplateEngine.java b/application/src/main/java/run/halo/app/theme/engine/HaloTemplateEngine.java index fcbd3c3e1..c890d57df 100644 --- a/application/src/main/java/run/halo/app/theme/engine/HaloTemplateEngine.java +++ b/application/src/main/java/run/halo/app/theme/engine/HaloTemplateEngine.java @@ -42,10 +42,19 @@ public class HaloTemplateEngine extends SpringWebFluxTemplateEngine { // We have to subscribe on blocking thread, because some blocking operations will be present // while processing. if (publisher instanceof Mono mono) { - return mono.subscribeOn(Schedulers.boundedElastic()); + return mono.subscribeOn(Schedulers.boundedElastic()) + // We should switch back to non-blocking thread. + // See https://github.com/spring-projects/spring-framework/issues/26958 + // for more details. + .publishOn(Schedulers.parallel()); } if (publisher instanceof Flux flux) { - return flux.subscribeOn(Schedulers.boundedElastic()); + return flux + .subscribeOn(Schedulers.boundedElastic()) + // We should switch back to non-blocking thread. + // See https://github.com/spring-projects/spring-framework/issues/26958 + // for more details. + .publishOn(Schedulers.parallel()); } return publisher; } diff --git a/application/src/main/resources/application.yaml b/application/src/main/resources/application.yaml index a24b43d73..681a94adc 100644 --- a/application/src/main/resources/application.yaml +++ b/application/src/main/resources/application.yaml @@ -27,6 +27,9 @@ spring: cache: cachecontrol: max-age: 365d + thymeleaf: + reactive: + maxChunkSize: 8KB cache: type: caffeine caffeine: From a87dedd916314bc81fa319adc6a024b14bf81c92 Mon Sep 17 00:00:00 2001 From: John Niang Date: Fri, 20 Sep 2024 11:14:58 +0800 Subject: [PATCH 3/6] Make ApplicationContext inaccessible in ITemplateContext (#6680) #### What type of PR is this? /kind improvement /area core /area plugin /milestone 2.20.x #### What this PR does / why we need it: This PR disables access to ApplicationContext using ITemplateContext. #### Does this PR introduce a user-facing change? ```release-note None ``` --- .../dialect/CommentElementTagProcessor.java | 2 +- .../dialect/GlobalHeadInjectionProcessor.java | 4 +- .../dialect/HaloPostTemplateHandler.java | 3 +- .../theme/dialect/SecureTemplateContext.java | 159 ++++++++++++++++++ .../TemplateFooterElementTagProcessor.java | 4 +- .../dialect/HaloPostTemplateHandlerTest.java | 10 +- 6 files changed, 172 insertions(+), 10 deletions(-) create mode 100644 application/src/main/java/run/halo/app/theme/dialect/SecureTemplateContext.java diff --git a/application/src/main/java/run/halo/app/theme/dialect/CommentElementTagProcessor.java b/application/src/main/java/run/halo/app/theme/dialect/CommentElementTagProcessor.java index 96b9935c1..f449f2e69 100644 --- a/application/src/main/java/run/halo/app/theme/dialect/CommentElementTagProcessor.java +++ b/application/src/main/java/run/halo/app/theme/dialect/CommentElementTagProcessor.java @@ -45,6 +45,6 @@ public class CommentElementTagProcessor extends AbstractElementTagProcessor { structureHandler.replaceWith("", false); return; } - commentWidget.render(context, tag, structureHandler); + commentWidget.render(new SecureTemplateContext(context), tag, structureHandler); } } diff --git a/application/src/main/java/run/halo/app/theme/dialect/GlobalHeadInjectionProcessor.java b/application/src/main/java/run/halo/app/theme/dialect/GlobalHeadInjectionProcessor.java index 6be5c52bb..a346d42e0 100644 --- a/application/src/main/java/run/halo/app/theme/dialect/GlobalHeadInjectionProcessor.java +++ b/application/src/main/java/run/halo/app/theme/dialect/GlobalHeadInjectionProcessor.java @@ -71,7 +71,9 @@ public class GlobalHeadInjectionProcessor extends AbstractElementModelProcessor // apply processors to modelToInsert getTemplateHeadProcessors(context) - .concatMap(processor -> processor.process(context, modelToInsert, structureHandler)) + .concatMap(processor -> processor.process( + new SecureTemplateContext(context), modelToInsert, structureHandler) + ) .then() .block(); diff --git a/application/src/main/java/run/halo/app/theme/dialect/HaloPostTemplateHandler.java b/application/src/main/java/run/halo/app/theme/dialect/HaloPostTemplateHandler.java index 1eebd67fe..25755a457 100644 --- a/application/src/main/java/run/halo/app/theme/dialect/HaloPostTemplateHandler.java +++ b/application/src/main/java/run/halo/app/theme/dialect/HaloPostTemplateHandler.java @@ -57,7 +57,8 @@ public class HaloPostTemplateHandler extends AbstractTemplateHandler { var context = getContext(); for (ElementTagPostProcessor elementTagPostProcessor : postProcessors) { tagProcessorChain = tagProcessorChain.flatMap( - tag -> elementTagPostProcessor.process(context, tag).defaultIfEmpty(tag) + tag -> elementTagPostProcessor.process(new SecureTemplateContext(context), tag) + .defaultIfEmpty(tag) ); } processedTag = diff --git a/application/src/main/java/run/halo/app/theme/dialect/SecureTemplateContext.java b/application/src/main/java/run/halo/app/theme/dialect/SecureTemplateContext.java new file mode 100644 index 000000000..3fe8d0403 --- /dev/null +++ b/application/src/main/java/run/halo/app/theme/dialect/SecureTemplateContext.java @@ -0,0 +1,159 @@ +package run.halo.app.theme.dialect; + +import static org.thymeleaf.spring6.expression.ThymeleafEvaluationContext.THYMELEAF_EVALUATION_CONTEXT_CONTEXT_VARIABLE_NAME; + +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; +import org.thymeleaf.IEngineConfiguration; +import org.thymeleaf.context.ITemplateContext; +import org.thymeleaf.context.IdentifierSequences; +import org.thymeleaf.engine.TemplateData; +import org.thymeleaf.expression.IExpressionObjects; +import org.thymeleaf.inline.IInliner; +import org.thymeleaf.model.IModelFactory; +import org.thymeleaf.model.IProcessableElementTag; +import org.thymeleaf.templatemode.TemplateMode; + +/** + * Secure template context. + * + * @author johnniang + * @since 2.20.0 + */ +class SecureTemplateContext implements ITemplateContext { + + private static final Set DANGEROUS_VARIABLES = + Set.of(THYMELEAF_EVALUATION_CONTEXT_CONTEXT_VARIABLE_NAME); + + private final ITemplateContext delegate; + + public SecureTemplateContext(ITemplateContext delegate) { + this.delegate = delegate; + } + + @Override + public TemplateData getTemplateData() { + return delegate.getTemplateData(); + } + + @Override + public TemplateMode getTemplateMode() { + return delegate.getTemplateMode(); + } + + @Override + public List getTemplateStack() { + return delegate.getTemplateStack(); + } + + @Override + public List getElementStack() { + return delegate.getElementStack(); + } + + @Override + public Map getTemplateResolutionAttributes() { + return delegate.getTemplateResolutionAttributes(); + } + + @Override + public IModelFactory getModelFactory() { + return delegate.getModelFactory(); + } + + @Override + public boolean hasSelectionTarget() { + return delegate.hasSelectionTarget(); + } + + @Override + public Object getSelectionTarget() { + return delegate.getSelectionTarget(); + } + + @Override + public IInliner getInliner() { + return delegate.getInliner(); + } + + @Override + public String getMessage( + Class origin, + String key, + Object[] messageParameters, + boolean useAbsentMessageRepresentation + ) { + return delegate.getMessage(origin, key, messageParameters, useAbsentMessageRepresentation); + } + + @Override + public String buildLink(String base, Map parameters) { + return delegate.buildLink(base, parameters); + } + + @Override + public IdentifierSequences getIdentifierSequences() { + return delegate.getIdentifierSequences(); + } + + @Override + public IEngineConfiguration getConfiguration() { + return delegate.getConfiguration(); + } + + @Override + public IExpressionObjects getExpressionObjects() { + return delegate.getExpressionObjects(); + } + + @Override + public Locale getLocale() { + return delegate.getLocale(); + } + + @Override + public boolean containsVariable(String name) { + if (DANGEROUS_VARIABLES.contains(name)) { + return false; + } + return delegate.containsVariable(name); + } + + @Override + public Set getVariableNames() { + return delegate.getVariableNames() + .stream() + .filter(name -> !DANGEROUS_VARIABLES.contains(name)) + .collect(Collectors.toSet()); + } + + @Override + public Object getVariable(String name) { + if (DANGEROUS_VARIABLES.contains(name)) { + return null; + } + return delegate.getVariable(name); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + SecureTemplateContext that = (SecureTemplateContext) o; + return Objects.equals(delegate, that.delegate); + } + + @Override + public int hashCode() { + return Objects.hashCode(delegate); + } +} diff --git a/application/src/main/java/run/halo/app/theme/dialect/TemplateFooterElementTagProcessor.java b/application/src/main/java/run/halo/app/theme/dialect/TemplateFooterElementTagProcessor.java index 74239b1f2..26a286b26 100644 --- a/application/src/main/java/run/halo/app/theme/dialect/TemplateFooterElementTagProcessor.java +++ b/application/src/main/java/run/halo/app/theme/dialect/TemplateFooterElementTagProcessor.java @@ -58,8 +58,8 @@ public class TemplateFooterElementTagProcessor extends AbstractElementTagProcess modelToInsert.add(context.getModelFactory().createText(globalFooterText)); getTemplateFooterProcessors(context) - .concatMap(processor -> processor.process(context, tag, - structureHandler, modelToInsert) + .concatMap(processor -> processor.process( + new SecureTemplateContext(context), tag, structureHandler, modelToInsert) ) .then() .block(); diff --git a/application/src/test/java/run/halo/app/theme/dialect/HaloPostTemplateHandlerTest.java b/application/src/test/java/run/halo/app/theme/dialect/HaloPostTemplateHandlerTest.java index 20c32f90b..9d6266f2d 100644 --- a/application/src/test/java/run/halo/app/theme/dialect/HaloPostTemplateHandlerTest.java +++ b/application/src/test/java/run/halo/app/theme/dialect/HaloPostTemplateHandlerTest.java @@ -82,7 +82,7 @@ class HaloPostTemplateHandlerTest { void shouldHandleStandaloneElementIfOneElementTagProcessorProvided() { var processor = mock(ElementTagPostProcessor.class); var newTag = mock(IStandaloneElementTag.class); - when(processor.process(templateContext, standaloneElementTag)) + when(processor.process(new SecureTemplateContext(templateContext), standaloneElementTag)) .thenReturn(Mono.just(newTag)); when(extensionGetter.getExtensionList(ElementTagPostProcessor.class)) .thenReturn(List.of(processor)); @@ -97,7 +97,7 @@ class HaloPostTemplateHandlerTest { void shouldHandleStandaloneElementIfTagTypeChanged() { var processor = mock(ElementTagPostProcessor.class); var newTag = mock(IStandaloneElementTag.class); - when(processor.process(templateContext, standaloneElementTag)) + when(processor.process(new SecureTemplateContext(templateContext), standaloneElementTag)) .thenReturn(Mono.just(newTag)); when(extensionGetter.getExtensionList(ElementTagPostProcessor.class)) .thenReturn(List.of(processor)); @@ -114,9 +114,9 @@ class HaloPostTemplateHandlerTest { var processor2 = mock(ElementTagPostProcessor.class); var newTag1 = mock(IStandaloneElementTag.class); var newTag2 = mock(IStandaloneElementTag.class); - when(processor1.process(templateContext, standaloneElementTag)) + when(processor1.process(new SecureTemplateContext(templateContext), standaloneElementTag)) .thenReturn(Mono.just(newTag1)); - when(processor2.process(templateContext, newTag1)) + when(processor2.process(new SecureTemplateContext(templateContext), newTag1)) .thenReturn(Mono.just(newTag2)); when(extensionGetter.getExtensionList(ElementTagPostProcessor.class)) .thenReturn(List.of(processor1, processor2)); @@ -131,7 +131,7 @@ class HaloPostTemplateHandlerTest { void shouldNotHandleIfProcessedTagTypeChanged() { var processor = mock(ElementTagPostProcessor.class); var newTag = mock(IOpenElementTag.class); - when(processor.process(templateContext, standaloneElementTag)) + when(processor.process(new SecureTemplateContext(templateContext), standaloneElementTag)) .thenReturn(Mono.just(newTag)); when(extensionGetter.getExtensionList(ElementTagPostProcessor.class)) .thenReturn(List.of(processor)); From df195b12f2801b1de7119bd3552afa796ac44889 Mon Sep 17 00:00:00 2001 From: John Niang Date: Fri, 20 Sep 2024 11:16:59 +0800 Subject: [PATCH 4/6] Make ApplicationContext inaccessible in ServerWebExchange (#6679) #### What type of PR is this? /kind improvement /area core /area plugin /milestone 2.20.x #### What this PR does / why we need it: Plugins can implement their own RouterFunctions and ControllerMappings, but those might expose root ApplicationContext for plugins, which is not expected. So this PR fixes the insecure access to root ApplicationContext. #### Does this PR introduce a user-facing change? ```release-note None ``` --- .../run/halo/app/config/WebFluxConfig.java | 16 ++++++++++ .../SecureRequestMappingHandlerAdapter.java | 26 ++++++++++++++++ .../halo/app/infra/SecureServerRequest.java | 31 +++++++++++++++++++ .../app/infra/SecureServerWebExchange.java | 25 +++++++++++++++ .../app/plugin/AggregatedRouterFunction.java | 3 +- .../DefaultPluginRouterFunctionRegistry.java | 4 ++- 6 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 application/src/main/java/run/halo/app/infra/SecureRequestMappingHandlerAdapter.java create mode 100644 application/src/main/java/run/halo/app/infra/SecureServerRequest.java create mode 100644 application/src/main/java/run/halo/app/infra/SecureServerWebExchange.java diff --git a/application/src/main/java/run/halo/app/config/WebFluxConfig.java b/application/src/main/java/run/halo/app/config/WebFluxConfig.java index 1a864ca63..22a8b50e1 100644 --- a/application/src/main/java/run/halo/app/config/WebFluxConfig.java +++ b/application/src/main/java/run/halo/app/config/WebFluxConfig.java @@ -12,6 +12,7 @@ import java.util.List; import java.util.Objects; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.web.WebProperties; +import org.springframework.boot.autoconfigure.web.reactive.WebFluxRegistrations; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -33,6 +34,7 @@ import org.springframework.web.reactive.function.server.RouterFunction; import org.springframework.web.reactive.function.server.ServerResponse; import org.springframework.web.reactive.resource.EncodedResourceResolver; import org.springframework.web.reactive.resource.PathResourceResolver; +import org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter; import org.springframework.web.reactive.result.view.ViewResolutionResultHandler; import org.springframework.web.reactive.result.view.ViewResolver; import reactor.core.publisher.Mono; @@ -41,6 +43,7 @@ import run.halo.app.console.WebSocketRequestPredicate; import run.halo.app.core.endpoint.WebSocketHandlerMapping; import run.halo.app.core.extension.endpoint.CustomEndpoint; import run.halo.app.core.extension.endpoint.CustomEndpointsBuilder; +import run.halo.app.infra.SecureRequestMappingHandlerAdapter; import run.halo.app.infra.properties.AttachmentProperties; import run.halo.app.infra.properties.HaloProperties; import run.halo.app.plugin.extensionpoint.ExtensionGetter; @@ -67,6 +70,19 @@ public class WebFluxConfig implements WebFluxConfigurer { this.applicationContext = applicationContext; } + @Bean + WebFluxRegistrations webFluxRegistrations() { + return new WebFluxRegistrations() { + @Override + public RequestMappingHandlerAdapter getRequestMappingHandlerAdapter() { + // Because we have no chance to customize ServerWebExchangeMethodArgumentResolver, + // we have to use SecureRequestMappingHandlerAdapter to replace a secure + // ServerWebExchange. + return new SecureRequestMappingHandlerAdapter(); + } + }; + } + @Bean ServerResponse.Context context(CodecConfigurer codec, ViewResolutionResultHandler resultHandler) { diff --git a/application/src/main/java/run/halo/app/infra/SecureRequestMappingHandlerAdapter.java b/application/src/main/java/run/halo/app/infra/SecureRequestMappingHandlerAdapter.java new file mode 100644 index 000000000..78b75531d --- /dev/null +++ b/application/src/main/java/run/halo/app/infra/SecureRequestMappingHandlerAdapter.java @@ -0,0 +1,26 @@ +package run.halo.app.infra; + +import org.springframework.lang.NonNull; +import org.springframework.web.reactive.HandlerResult; +import org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +/** + * Secure request mapping handler adapter. + * + * @author johnniang + * @since 2.20.0 + */ +public class SecureRequestMappingHandlerAdapter extends RequestMappingHandlerAdapter { + + @Override + @NonNull + public Mono handle( + @NonNull ServerWebExchange exchange, + @NonNull Object handler + ) { + return super.handle(new SecureServerWebExchange(exchange), handler); + } + +} diff --git a/application/src/main/java/run/halo/app/infra/SecureServerRequest.java b/application/src/main/java/run/halo/app/infra/SecureServerRequest.java new file mode 100644 index 000000000..851b8140c --- /dev/null +++ b/application/src/main/java/run/halo/app/infra/SecureServerRequest.java @@ -0,0 +1,31 @@ +package run.halo.app.infra; + +import org.springframework.lang.NonNull; +import org.springframework.web.reactive.function.server.ServerRequest; +import org.springframework.web.reactive.function.server.support.ServerRequestWrapper; +import org.springframework.web.server.ServerWebExchange; + +/** + * Secure server request without application context available. + * + * @author johnniang + * @since 2.20.0 + */ +public class SecureServerRequest extends ServerRequestWrapper { + + /** + * Create a new {@code ServerRequestWrapper} that wraps the given request. + * + * @param delegate the request to wrap + */ + public SecureServerRequest(ServerRequest delegate) { + super(delegate); + } + + @Override + @NonNull + public ServerWebExchange exchange() { + return new SecureServerWebExchange(super.exchange()); + } + +} diff --git a/application/src/main/java/run/halo/app/infra/SecureServerWebExchange.java b/application/src/main/java/run/halo/app/infra/SecureServerWebExchange.java new file mode 100644 index 000000000..4d244532f --- /dev/null +++ b/application/src/main/java/run/halo/app/infra/SecureServerWebExchange.java @@ -0,0 +1,25 @@ +package run.halo.app.infra; + +import org.springframework.context.ApplicationContext; +import org.springframework.web.server.ServerWebExchange; +import org.springframework.web.server.ServerWebExchangeDecorator; + +/** + * Secure server web exchange without application context available. + * + * @author johnniang + * @since 2.20.0 + */ +public class SecureServerWebExchange extends ServerWebExchangeDecorator { + + public SecureServerWebExchange(ServerWebExchange delegate) { + super(delegate); + } + + @Override + public ApplicationContext getApplicationContext() { + // Always return null to prevent access to application context + return null; + } + +} diff --git a/application/src/main/java/run/halo/app/plugin/AggregatedRouterFunction.java b/application/src/main/java/run/halo/app/plugin/AggregatedRouterFunction.java index 396c2d49d..6dbbbd484 100644 --- a/application/src/main/java/run/halo/app/plugin/AggregatedRouterFunction.java +++ b/application/src/main/java/run/halo/app/plugin/AggregatedRouterFunction.java @@ -9,6 +9,7 @@ import org.springframework.web.reactive.function.server.ServerResponse; import reactor.core.publisher.Mono; import run.halo.app.core.extension.endpoint.CustomEndpoint; import run.halo.app.core.extension.endpoint.CustomEndpointsBuilder; +import run.halo.app.infra.SecureServerRequest; /** * Aggregated router function built from all custom endpoints. @@ -28,7 +29,7 @@ public class AggregatedRouterFunction implements RouterFunction @Override public Mono> route(ServerRequest request) { - return aggregated.route(request); + return aggregated.route(new SecureServerRequest(request)); } @Override diff --git a/application/src/main/java/run/halo/app/plugin/DefaultPluginRouterFunctionRegistry.java b/application/src/main/java/run/halo/app/plugin/DefaultPluginRouterFunctionRegistry.java index 602fd5606..547a07a54 100644 --- a/application/src/main/java/run/halo/app/plugin/DefaultPluginRouterFunctionRegistry.java +++ b/application/src/main/java/run/halo/app/plugin/DefaultPluginRouterFunctionRegistry.java @@ -11,6 +11,7 @@ import org.springframework.web.reactive.function.server.ServerRequest; import org.springframework.web.reactive.function.server.ServerResponse; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; +import run.halo.app.infra.SecureServerRequest; /** * A composite {@link RouterFunction} implementation for plugin. @@ -31,8 +32,9 @@ public class DefaultPluginRouterFunctionRegistry @Override @NonNull public Mono> route(@NonNull ServerRequest request) { + var secureRequest = new SecureServerRequest(request); return Flux.fromIterable(this.routerFunctions) - .concatMap(routerFunction -> routerFunction.route(request)) + .concatMap(routerFunction -> routerFunction.route(secureRequest)) .next(); } From 8b3bde050f28d4b423f65fd2b6326631cafa5b2f Mon Sep 17 00:00:00 2001 From: John Niang Date: Mon, 23 Sep 2024 16:47:15 +0800 Subject: [PATCH 5/6] Refactor ReactivePropertyAccessor by wrapping existing PropertyAccessor (#6686) #### What type of PR is this? /kind improvement /area core /area theme #### What this PR does / why we need it: This PR removes ReactivePropertyAccessor because it use `AstUtils#getPropertyAccessorsToTry` which is already hidden in [the commit](https://github.com/spring-projects/spring-framework/commit/33fbd7141d46c281cdc0a26d4bdeb21b00bdb5d3#diff-deaf3517fbd66f40a8717877a8328dee0fb2581dfb6be487f327dc73ea33b5b5). If we upgraded to Spring Boot 3.4.0-M3, the code in ReactivePropertyAccessor would be broken. More importantly, I believe there is one issue with the current implementation although it can resolve the reactive issue. - The PropertyAccessor modified the process flow of SPEL This PR provides some wrappers to wrap existing PropertyAccessor and MethodResolver to evaluate reactive return value. #### Does this PR introduce a user-facing change? ```release-note None ``` --- .../halo/app/infra/utils/ReactiveUtils.java | 62 ++++++ .../app/theme/ReactivePropertyAccessor.java | 118 ---------- ...activeSpelVariableExpressionEvaluator.java | 33 ++- .../dialect/EvaluationContextEnhancer.java | 210 ++++++++++++++++++ .../theme/dialect/HaloProcessorDialect.java | 2 +- ...dePropertyAccessorBoundariesProcessor.java | 49 ---- .../ReactiveFinderExpressionParserTests.java | 1 - 7 files changed, 288 insertions(+), 187 deletions(-) create mode 100644 application/src/main/java/run/halo/app/infra/utils/ReactiveUtils.java delete mode 100644 application/src/main/java/run/halo/app/theme/ReactivePropertyAccessor.java create mode 100644 application/src/main/java/run/halo/app/theme/dialect/EvaluationContextEnhancer.java delete mode 100644 application/src/main/java/run/halo/app/theme/dialect/JsonNodePropertyAccessorBoundariesProcessor.java diff --git a/application/src/main/java/run/halo/app/infra/utils/ReactiveUtils.java b/application/src/main/java/run/halo/app/infra/utils/ReactiveUtils.java new file mode 100644 index 000000000..c87b0e03b --- /dev/null +++ b/application/src/main/java/run/halo/app/infra/utils/ReactiveUtils.java @@ -0,0 +1,62 @@ +package run.halo.app.infra.utils; + +import java.time.Duration; +import org.springframework.lang.NonNull; +import org.springframework.lang.Nullable; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +/** + * Utility class for reactive. + * + * @author johnniang + * @since 2.20.0 + */ +public enum ReactiveUtils { + ; + + private static final Duration DEFAULT_TIMEOUT = Duration.ofMinutes(1); + + /** + * Resolve reactive value by blocking operation. + * + * @param value the normal value or reactive value + * @return the resolved value + */ + @Nullable + public static Object blockReactiveValue(@Nullable Object value) { + return blockReactiveValue(value, DEFAULT_TIMEOUT); + } + + /** + * Resolve reactive value by blocking operation. + * + * @param value the normal value or reactive value + * @param timeout the timeout of blocking operation + * @return the resolved value + */ + @Nullable + public static Object blockReactiveValue(@Nullable Object value, @NonNull Duration timeout) { + if (value == null) { + return null; + } + Class clazz = value.getClass(); + if (Mono.class.isAssignableFrom(clazz)) { + return ((Mono) value).blockOptional(timeout).orElse(null); + } + if (Flux.class.isAssignableFrom(clazz)) { + return ((Flux) value).collectList().block(timeout); + } + return value; + } + + /** + * Check if the class is a reactive type. + * + * @param clazz the class to check + * @return true if the class is a reactive type, false otherwise + */ + public static boolean isReactiveType(@NonNull Class clazz) { + return Mono.class.isAssignableFrom(clazz) || Flux.class.isAssignableFrom(clazz); + } +} diff --git a/application/src/main/java/run/halo/app/theme/ReactivePropertyAccessor.java b/application/src/main/java/run/halo/app/theme/ReactivePropertyAccessor.java deleted file mode 100644 index db847d24b..000000000 --- a/application/src/main/java/run/halo/app/theme/ReactivePropertyAccessor.java +++ /dev/null @@ -1,118 +0,0 @@ -package run.halo.app.theme; - -import java.util.List; -import org.springframework.expression.AccessException; -import org.springframework.expression.EvaluationContext; -import org.springframework.expression.PropertyAccessor; -import org.springframework.expression.TypedValue; -import org.springframework.expression.spel.ast.AstUtils; -import org.springframework.integration.json.JsonPropertyAccessor; -import org.springframework.lang.NonNull; -import org.springframework.lang.Nullable; -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; - -/** - * A SpEL PropertyAccessor that knows how to read properties from {@link Mono} or {@link Flux} - * object. It first converts the target to the actual value and then calls other - * {@link PropertyAccessor}s to parse the result, If it still cannot be resolved, - * {@link JsonPropertyAccessor} will be used to resolve finally. - * - * @author guqing - * @since 2.0.0 - */ -public class ReactivePropertyAccessor implements PropertyAccessor { - - @Override - public Class[] getSpecificTargetClasses() { - return null; - } - - @Override - public boolean canRead(@NonNull EvaluationContext context, Object target, @NonNull String name) - throws AccessException { - if (isReactiveType(target)) { - return true; - } - var propertyAccessors = - getPropertyAccessorsToTry(target.getClass(), context.getPropertyAccessors()); - for (PropertyAccessor propertyAccessor : propertyAccessors) { - if (propertyAccessor.canRead(context, target, name)) { - return true; - } - } - return false; - } - - @Override - @NonNull - public TypedValue read(@NonNull EvaluationContext context, Object target, @NonNull String name) - throws AccessException { - if (target == null) { - return TypedValue.NULL; - } - Object value = blockingGetForReactive(target); - - List propertyAccessorsToTry = - getPropertyAccessorsToTry(value, context.getPropertyAccessors()); - for (PropertyAccessor propertyAccessor : propertyAccessorsToTry) { - try { - TypedValue result = propertyAccessor.read(context, value, name); - return new TypedValue(blockingGetForReactive(result.getValue())); - } catch (AccessException e) { - // ignore this - } - } - - throw new AccessException("Cannot read property '" + name + "' from [" + value + "]"); - } - - @Nullable - private static Object blockingGetForReactive(@Nullable Object target) { - if (target == null) { - return null; - } - Class clazz = target.getClass(); - Object value = target; - if (Mono.class.isAssignableFrom(clazz)) { - value = ((Mono) target).block(); - } else if (Flux.class.isAssignableFrom(clazz)) { - value = ((Flux) target).collectList().block(); - } - return value; - } - - private boolean isReactiveType(Object target) { - if (target == null) { - return true; - } - Class clazz = target.getClass(); - return Mono.class.isAssignableFrom(clazz) - || Flux.class.isAssignableFrom(clazz); - } - - private List getPropertyAccessorsToTry( - @Nullable Object contextObject, List propertyAccessors) { - - Class targetType = (contextObject != null ? contextObject.getClass() : null); - - List resolvers = - AstUtils.getPropertyAccessorsToTry(targetType, propertyAccessors); - // remove this resolver to avoid infinite loop - resolvers.remove(this); - return resolvers; - } - - @Override - public boolean canWrite(@NonNull EvaluationContext context, Object target, @NonNull String name) - throws AccessException { - return false; - } - - @Override - public void write(@NonNull EvaluationContext context, Object target, @NonNull String name, - Object newValue) - throws AccessException { - throw new UnsupportedOperationException("Write is not supported"); - } -} diff --git a/application/src/main/java/run/halo/app/theme/ReactiveSpelVariableExpressionEvaluator.java b/application/src/main/java/run/halo/app/theme/ReactiveSpelVariableExpressionEvaluator.java index 179449778..b961f0eea 100644 --- a/application/src/main/java/run/halo/app/theme/ReactiveSpelVariableExpressionEvaluator.java +++ b/application/src/main/java/run/halo/app/theme/ReactiveSpelVariableExpressionEvaluator.java @@ -1,12 +1,12 @@ package run.halo.app.theme; +import java.util.Optional; import org.thymeleaf.context.IExpressionContext; import org.thymeleaf.spring6.expression.SPELVariableExpressionEvaluator; import org.thymeleaf.standard.expression.IStandardVariableExpression; import org.thymeleaf.standard.expression.IStandardVariableExpressionEvaluator; import org.thymeleaf.standard.expression.StandardExpressionExecutionContext; -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; +import run.halo.app.infra.utils.ReactiveUtils; /** * Reactive SPEL variable expression evaluator. @@ -17,28 +17,25 @@ import reactor.core.publisher.Mono; public class ReactiveSpelVariableExpressionEvaluator implements IStandardVariableExpressionEvaluator { - private final SPELVariableExpressionEvaluator delegate = - SPELVariableExpressionEvaluator.INSTANCE; + private final IStandardVariableExpressionEvaluator delegate; public static final ReactiveSpelVariableExpressionEvaluator INSTANCE = new ReactiveSpelVariableExpressionEvaluator(); + public ReactiveSpelVariableExpressionEvaluator(IStandardVariableExpressionEvaluator delegate) { + this.delegate = delegate; + } + + public ReactiveSpelVariableExpressionEvaluator() { + this(SPELVariableExpressionEvaluator.INSTANCE); + } + @Override public Object evaluate(IExpressionContext context, IStandardVariableExpression expression, StandardExpressionExecutionContext expContext) { - Object returnValue = delegate.evaluate(context, expression, expContext); - if (returnValue == null) { - return null; - } - - Class clazz = returnValue.getClass(); - // Note that: 3 instanceof Foo -> syntax error - if (Mono.class.isAssignableFrom(clazz)) { - return ((Mono) returnValue).block(); - } - if (Flux.class.isAssignableFrom(clazz)) { - return ((Flux) returnValue).collectList().block(); - } - return returnValue; + var returnValue = delegate.evaluate(context, expression, expContext); + return Optional.ofNullable(returnValue) + .map(ReactiveUtils::blockReactiveValue) + .orElse(null); } } diff --git a/application/src/main/java/run/halo/app/theme/dialect/EvaluationContextEnhancer.java b/application/src/main/java/run/halo/app/theme/dialect/EvaluationContextEnhancer.java new file mode 100644 index 000000000..2d01e48b6 --- /dev/null +++ b/application/src/main/java/run/halo/app/theme/dialect/EvaluationContextEnhancer.java @@ -0,0 +1,210 @@ +package run.halo.app.theme.dialect; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; +import org.springframework.core.convert.TypeDescriptor; +import org.springframework.expression.AccessException; +import org.springframework.expression.EvaluationContext; +import org.springframework.expression.MethodExecutor; +import org.springframework.expression.MethodResolver; +import org.springframework.expression.PropertyAccessor; +import org.springframework.expression.TypedValue; +import org.springframework.expression.spel.support.ReflectivePropertyAccessor; +import org.springframework.integration.json.JsonPropertyAccessor; +import org.springframework.lang.Nullable; +import org.thymeleaf.context.ITemplateContext; +import org.thymeleaf.model.ITemplateEnd; +import org.thymeleaf.model.ITemplateStart; +import org.thymeleaf.processor.templateboundaries.AbstractTemplateBoundariesProcessor; +import org.thymeleaf.processor.templateboundaries.ITemplateBoundariesStructureHandler; +import org.thymeleaf.spring6.expression.ThymeleafEvaluationContext; +import org.thymeleaf.standard.StandardDialect; +import org.thymeleaf.templatemode.TemplateMode; +import run.halo.app.infra.utils.ReactiveUtils; + +/** + * Enhance the evaluation context to support reactive types. + * + * @author guqing + * @author johnniang + * @since 2.20.0 + */ +public class EvaluationContextEnhancer extends AbstractTemplateBoundariesProcessor { + + private static final int PRECEDENCE = StandardDialect.PROCESSOR_PRECEDENCE; + + private static final JsonPropertyAccessor JSON_PROPERTY_ACCESSOR = new JsonPropertyAccessor(); + + public EvaluationContextEnhancer() { + super(TemplateMode.HTML, PRECEDENCE); + } + + @Override + public void doProcessTemplateStart(ITemplateContext context, ITemplateStart templateStart, + ITemplateBoundariesStructureHandler structureHandler) { + var evluationContextObject = context.getVariable( + ThymeleafEvaluationContext.THYMELEAF_EVALUATION_CONTEXT_CONTEXT_VARIABLE_NAME + ); + if (evluationContextObject instanceof ThymeleafEvaluationContext evaluationContext) { + evaluationContext.addPropertyAccessor(JSON_PROPERTY_ACCESSOR); + ReactiveReflectivePropertyAccessor.wrap(evaluationContext); + ReactiveMethodResolver.wrap(evaluationContext); + } + } + + @Override + public void doProcessTemplateEnd(ITemplateContext context, ITemplateEnd templateEnd, + ITemplateBoundariesStructureHandler structureHandler) { + // nothing to do + } + + /** + * A {@link PropertyAccessor} that wraps the original {@link ReflectivePropertyAccessor} and + * blocks the reactive value. + */ + private static class ReactiveReflectivePropertyAccessor + extends ReflectivePropertyAccessor { + private final ReflectivePropertyAccessor delegate; + + private ReactiveReflectivePropertyAccessor(ReflectivePropertyAccessor delegate) { + this.delegate = delegate; + } + + @Override + public boolean canRead(EvaluationContext context, Object target, String name) + throws AccessException { + if (target == null) { + // For backward compatibility + return true; + } + return this.delegate.canRead(context, target, name); + } + + @Override + public TypedValue read(EvaluationContext context, Object target, String name) + throws AccessException { + if (target == null) { + // For backward compatibility + return TypedValue.NULL; + } + var typedValue = delegate.read(context, target, name); + return Optional.of(typedValue) + .filter(tv -> + Objects.nonNull(tv.getValue()) + && Objects.nonNull(tv.getTypeDescriptor()) + && ReactiveUtils.isReactiveType(tv.getTypeDescriptor().getType()) + ) + .map(tv -> new TypedValue(ReactiveUtils.blockReactiveValue(tv.getValue()))) + .orElse(typedValue); + } + + @Override + public boolean canWrite(EvaluationContext context, Object target, String name) + throws AccessException { + return delegate.canWrite(context, target, name); + } + + @Override + public void write(EvaluationContext context, Object target, String name, Object newValue) + throws AccessException { + delegate.write(context, target, name, newValue); + } + + @Override + public Class[] getSpecificTargetClasses() { + return delegate.getSpecificTargetClasses(); + } + + @Override + public PropertyAccessor createOptimalAccessor(EvaluationContext context, Object target, + String name) { + var optimalAccessor = delegate.createOptimalAccessor(context, target, name); + if (optimalAccessor instanceof OptimalPropertyAccessor optimalPropertyAccessor) { + if (ReactiveUtils.isReactiveType(optimalPropertyAccessor.getPropertyType())) { + return this; + } + return optimalPropertyAccessor; + } + return this; + } + + static void wrap(ThymeleafEvaluationContext evaluationContext) { + var wrappedPropertyAccessors = evaluationContext.getPropertyAccessors() + .stream() + .map(propertyAccessor -> { + if (propertyAccessor instanceof ReflectivePropertyAccessor reflectiveAccessor) { + return new ReactiveReflectivePropertyAccessor(reflectiveAccessor); + } + return propertyAccessor; + }) + // make the list mutable + .collect(Collectors.toCollection(ArrayList::new)); + evaluationContext.setPropertyAccessors(wrappedPropertyAccessors); + } + + @Override + public boolean equals(Object obj) { + return delegate.equals(obj); + } + + @Override + public int hashCode() { + return delegate.hashCode(); + } + + } + + /** + * A {@link MethodResolver} that wraps the original {@link MethodResolver} and blocks the + * reactive value. + * + * @param delegate the original {@link MethodResolver} + */ + private record ReactiveMethodResolver(MethodResolver delegate) implements MethodResolver { + + @Override + @Nullable + public MethodExecutor resolve(EvaluationContext context, Object targetObject, String name, + List argumentTypes) throws AccessException { + var executor = delegate.resolve(context, targetObject, name, argumentTypes); + return Optional.ofNullable(executor).map(ReactiveMethodExecutor::new).orElse(null); + } + + static void wrap(ThymeleafEvaluationContext evaluationContext) { + var wrappedMethodResolvers = evaluationContext.getMethodResolvers() + .stream() + .map(ReactiveMethodResolver::new) + // make the list mutable + .collect(Collectors.toCollection(ArrayList::new)); + evaluationContext.setMethodResolvers(wrappedMethodResolvers); + } + + } + + /** + * A {@link MethodExecutor} that wraps the original {@link MethodExecutor} and blocks the + * reactive value. + * + * @param delegate the original {@link MethodExecutor} + */ + private record ReactiveMethodExecutor(MethodExecutor delegate) implements MethodExecutor { + + @Override + public TypedValue execute(EvaluationContext context, Object target, Object... arguments) + throws AccessException { + var typedValue = delegate.execute(context, target, arguments); + return Optional.of(typedValue) + .filter(tv -> + Objects.nonNull(tv.getValue()) + && Objects.nonNull(tv.getTypeDescriptor()) + && ReactiveUtils.isReactiveType(tv.getTypeDescriptor().getType()) + ) + .map(tv -> new TypedValue(ReactiveUtils.blockReactiveValue(tv.getValue()))) + .orElse(typedValue); + } + + } +} diff --git a/application/src/main/java/run/halo/app/theme/dialect/HaloProcessorDialect.java b/application/src/main/java/run/halo/app/theme/dialect/HaloProcessorDialect.java index a88296531..a355f5ae8 100644 --- a/application/src/main/java/run/halo/app/theme/dialect/HaloProcessorDialect.java +++ b/application/src/main/java/run/halo/app/theme/dialect/HaloProcessorDialect.java @@ -38,7 +38,7 @@ public class HaloProcessorDialect extends AbstractProcessorDialect // add more processors processors.add(new GlobalHeadInjectionProcessor(dialectPrefix)); processors.add(new TemplateFooterElementTagProcessor(dialectPrefix)); - processors.add(new JsonNodePropertyAccessorBoundariesProcessor()); + processors.add(new EvaluationContextEnhancer()); processors.add(new CommentElementTagProcessor(dialectPrefix)); processors.add(new CommentEnabledVariableProcessor()); return processors; diff --git a/application/src/main/java/run/halo/app/theme/dialect/JsonNodePropertyAccessorBoundariesProcessor.java b/application/src/main/java/run/halo/app/theme/dialect/JsonNodePropertyAccessorBoundariesProcessor.java deleted file mode 100644 index 0ab86fffe..000000000 --- a/application/src/main/java/run/halo/app/theme/dialect/JsonNodePropertyAccessorBoundariesProcessor.java +++ /dev/null @@ -1,49 +0,0 @@ -package run.halo.app.theme.dialect; - -import org.springframework.integration.json.JsonPropertyAccessor; -import org.thymeleaf.context.ITemplateContext; -import org.thymeleaf.model.ITemplateEnd; -import org.thymeleaf.model.ITemplateStart; -import org.thymeleaf.processor.templateboundaries.AbstractTemplateBoundariesProcessor; -import org.thymeleaf.processor.templateboundaries.ITemplateBoundariesStructureHandler; -import org.thymeleaf.spring6.expression.ThymeleafEvaluationContext; -import org.thymeleaf.standard.StandardDialect; -import org.thymeleaf.templatemode.TemplateMode; -import run.halo.app.theme.ReactivePropertyAccessor; - -/** - * A template boundaries processor for add {@link JsonPropertyAccessor} to - * {@link ThymeleafEvaluationContext}. - * - * @author guqing - * @since 2.0.0 - */ -public class JsonNodePropertyAccessorBoundariesProcessor - extends AbstractTemplateBoundariesProcessor { - private static final int PRECEDENCE = StandardDialect.PROCESSOR_PRECEDENCE; - private static final JsonPropertyAccessor JSON_PROPERTY_ACCESSOR = new JsonPropertyAccessor(); - private static final ReactivePropertyAccessor REACTIVE_PROPERTY_ACCESSOR = - new ReactivePropertyAccessor(); - - public JsonNodePropertyAccessorBoundariesProcessor() { - super(TemplateMode.HTML, PRECEDENCE); - } - - @Override - public void doProcessTemplateStart(ITemplateContext context, ITemplateStart templateStart, - ITemplateBoundariesStructureHandler structureHandler) { - ThymeleafEvaluationContext evaluationContext = - (ThymeleafEvaluationContext) context.getVariable( - ThymeleafEvaluationContext.THYMELEAF_EVALUATION_CONTEXT_CONTEXT_VARIABLE_NAME); - if (evaluationContext != null) { - evaluationContext.addPropertyAccessor(JSON_PROPERTY_ACCESSOR); - evaluationContext.addPropertyAccessor(REACTIVE_PROPERTY_ACCESSOR); - } - } - - @Override - public void doProcessTemplateEnd(ITemplateContext context, ITemplateEnd templateEnd, - ITemplateBoundariesStructureHandler structureHandler) { - // nothing to do - } -} diff --git a/application/src/test/java/run/halo/app/theme/ReactiveFinderExpressionParserTests.java b/application/src/test/java/run/halo/app/theme/ReactiveFinderExpressionParserTests.java index 346aa9945..20010b0f3 100644 --- a/application/src/test/java/run/halo/app/theme/ReactiveFinderExpressionParserTests.java +++ b/application/src/test/java/run/halo/app/theme/ReactiveFinderExpressionParserTests.java @@ -38,7 +38,6 @@ import run.halo.app.theme.dialect.HaloProcessorDialect; * Tests expression parser for reactive return value. * * @author guqing - * @see ReactivePropertyAccessor * @see ReactiveSpelVariableExpressionEvaluator * @since 2.0.0 */ From 03368281cc73e91c26fe2105263d243bf2e99247 Mon Sep 17 00:00:00 2001 From: guqing <38999863+guqing@users.noreply.github.com> Date: Mon, 23 Sep 2024 17:59:03 +0800 Subject: [PATCH 6/6] chore: reorganize package structure in application project (#6691) * chore: reorganize package structure in application project --- .../app/content/comment/AbstractCommentService.java | 4 ++-- .../halo/app/content/comment/CommentServiceImpl.java | 4 ++-- .../run/halo/app/content/comment/ReplyServiceImpl.java | 4 ++-- .../run/halo/app/content/impl/PostServiceImpl.java | 2 +- .../halo/app/content/impl/SinglePageServiceImpl.java | 2 +- .../app/core/attachment/LocalThumbnailService.java | 2 +- .../attachment/endpoint/AttachmentEndpoint.java | 2 +- .../endpoint/LocalAttachmentUploadHandler.java | 3 ++- .../extension}/LocalThumbnail.java | 2 +- .../attachment => attachment/extension}/Thumbnail.java | 2 +- .../attachment/impl/LocalThumbnailServiceImpl.java | 2 +- .../app/core/attachment/impl/ThumbnailServiceImpl.java | 2 +- .../reconciler/LocalThumbnailsReconciler.java | 4 ++-- .../app/core/endpoint/WebSocketHandlerMapping.java | 2 +- .../console}/AuthProviderEndpoint.java | 3 ++- .../endpoint => endpoint/console}/CommentEndpoint.java | 3 ++- .../console}/CustomEndpointsBuilder.java | 3 ++- .../endpoint => endpoint/console}/PluginEndpoint.java | 7 ++++--- .../endpoint => endpoint/console}/PostEndpoint.java | 3 ++- .../endpoint => endpoint/console}/ReplyEndpoint.java | 3 ++- .../console}/SinglePageEndpoint.java | 3 ++- .../endpoint => endpoint/console}/StatsEndpoint.java | 3 ++- .../console}/SystemInitializationEndpoint.java | 3 ++- .../endpoint => endpoint/console}/TagEndpoint.java | 3 ++- .../endpoint => endpoint/console}/TrackerEndpoint.java | 3 ++- .../endpoint => endpoint/console}/UserEndpoint.java | 9 +++++---- .../endpoint/theme}/CategoryQueryEndpoint.java | 4 ++-- .../endpoint/theme}/CommentFinderEndpoint.java | 2 +- .../endpoint/theme}/MenuQueryEndpoint.java | 2 +- .../endpoint/theme}/PluginQueryEndpoint.java | 2 +- .../endpoint/theme}/PostPublicQuery.java | 2 +- .../endpoint/theme}/PostQueryEndpoint.java | 2 +- .../endpoint/theme}/PublicApiUtils.java | 2 +- .../endpoint/theme}/PublicUserEndpoint.java | 8 ++++---- .../endpoint/theme}/SinglePageQueryEndpoint.java | 2 +- .../endpoint/theme}/SiteStatsQueryEndpoint.java | 2 +- .../endpoint/theme}/TagQueryEndpoint.java | 2 +- .../endpoint/theme}/ThumbnailEndpoint.java | 2 +- .../endpoint/uc}/UcPostAttachmentEndpoint.java | 2 +- .../content => core/endpoint/uc}/UcPostEndpoint.java | 2 +- .../endpoint/uc}/UcSnapshotEndpoint.java | 2 +- .../reconciler/AnnotationSettingReconciler.java | 2 +- .../reconciler/AuthProviderReconciler.java | 2 +- .../{extension => }/reconciler/CategoryReconciler.java | 2 +- .../{extension => }/reconciler/CommentReconciler.java | 2 +- .../{extension => }/reconciler/MenuItemReconciler.java | 2 +- .../{extension => }/reconciler/PluginReconciler.java | 4 ++-- .../reconciler/PostCounterReconciler.java | 2 +- .../{extension => }/reconciler/PostReconciler.java | 2 +- .../{extension => }/reconciler/ReplyReconciler.java | 2 +- .../reconciler/ReverseProxyReconciler.java | 2 +- .../{extension => }/reconciler/RoleReconciler.java | 2 +- .../reconciler/SinglePageReconciler.java | 2 +- .../reconciler/SystemSettingReconciler.java | 2 +- .../core/{extension => }/reconciler/TagReconciler.java | 2 +- .../{extension => }/reconciler/ThemeReconciler.java | 4 ++-- .../{extension => }/reconciler/UserReconciler.java | 6 +++--- .../service/DefaultRoleService.java | 2 +- .../service/EmailPasswordRecoveryService.java | 2 +- .../service/EmailVerificationService.java | 2 +- .../core/{extension => user}/service/RoleService.java | 2 +- .../core/{extension => user}/service/UserService.java | 2 +- .../{extension => user}/service/UserServiceImpl.java | 2 +- .../service/impl/DefaultAttachmentService.java | 2 +- .../service/impl/EmailPasswordRecoveryServiceImpl.java | 6 +++--- .../service/impl/EmailVerificationServiceImpl.java | 6 +++--- .../run/halo/app/infra/DefaultThemeInitializer.java | 4 ++-- .../java/run/halo/app/infra/SchemeInitializer.java | 4 ++-- .../{ => infra}/actuator/DatabaseInfoContributor.java | 2 +- .../app/{ => infra}/actuator/GlobalInfoEndpoint.java | 2 +- .../halo/app/{ => infra}/actuator/RestartEndpoint.java | 2 +- .../app/{ => infra}/config/ExtensionConfiguration.java | 2 +- .../halo/app/{ => infra}/config/HaloConfiguration.java | 2 +- .../run/halo/app/{ => infra}/config/SwaggerConfig.java | 2 +- .../run/halo/app/{ => infra}/config/WebFluxConfig.java | 10 +++++----- .../{ => infra}/config/WebServerSecurityConfig.java | 6 +++--- .../run/halo/app/{ => infra}/console/ProxyFilter.java | 2 +- .../{ => infra}/console/WebSocketRequestPredicate.java | 4 ++-- .../console/WebSocketServerWebExchangeMatcher.java | 4 ++-- .../halo/app/{ => infra}/console/WebSocketUtils.java | 2 +- .../extension/theme => infra/utils}/SettingUtils.java | 4 +--- .../webfilter/AdditionalWebFilterChainProxy.java | 2 +- .../{ => infra}/webfilter/LocaleChangeWebFilter.java | 2 +- .../run/halo/app/plugin/AggregatedRouterFunction.java | 2 +- .../extension/service => plugin}/PluginService.java | 2 +- .../service/impl => plugin}/PluginServiceImpl.java | 9 +-------- .../halo/app/security/DefaultUserDetailService.java | 4 ++-- .../pat/impl/UserScopedPatHandlerImpl.java | 2 +- .../twofactor/TwoFactorAuthEndpoint.java | 2 +- .../security/authorization/DefaultRuleResolver.java | 2 +- .../authorization/RequestInfoAuthorizationManager.java | 2 +- .../app/security/authorization/RequestInfoFactory.java | 2 +- .../theme => theme/endpoint}/ThemeEndpoint.java | 4 +++- .../finders/impl/CommentPublicQueryServiceImpl.java | 2 +- .../app/theme/finders/impl/ContributorFinderImpl.java | 2 +- .../theme => theme/service}/ThemeService.java | 2 +- .../theme => theme/service}/ThemeServiceImpl.java | 9 +++++---- .../extension/theme => theme/service}/ThemeUtils.java | 8 +++++--- .../halo/app/config/ExtensionConfigurationTest.java | 2 +- .../java/run/halo/app/config/WebFluxConfigTest.java | 2 +- .../console/WebSocketServerWebExchangeMatcherTest.java | 1 + .../java/run/halo/app/console/WebSocketUtilsTest.java | 1 + .../run/halo/app/content/PostIntegrationTests.java | 2 +- .../app/content/comment/CommentServiceImplTest.java | 4 ++-- .../attachment/impl/LocalThumbnailServiceImplTest.java | 2 +- .../core/attachment/impl/ThumbnailServiceImplTest.java | 2 +- .../console}/EmailVerificationCodeTest.java | 6 +++--- .../console}/PluginEndpointTest.java | 4 ++-- .../console}/PostEndpointTest.java | 2 +- .../console}/SinglePageEndpointTest.java | 2 +- .../console}/SystemInitializationEndpointTest.java | 4 ++-- .../endpoint => endpoint/console}/TagEndpointTest.java | 2 +- .../console}/UserEndpointIntegrationTest.java | 4 ++-- .../console}/UserEndpointTest.java | 6 +++--- .../endpoint/theme}/CategoryQueryEndpointTest.java | 2 +- .../endpoint/theme}/CommentFinderEndpointTest.java | 2 +- .../endpoint/theme}/MenuQueryEndpointTest.java | 2 +- .../endpoint/theme}/PluginQueryEndpointTest.java | 2 +- .../endpoint/theme}/PostQueryEndpointTest.java | 2 +- .../endpoint/theme}/PublicApiUtilsTest.java | 2 +- .../endpoint/theme}/PublicUserEndpointTest.java | 4 ++-- .../endpoint/theme}/SinglePageQueryEndpointTest.java | 2 +- .../endpoint/theme}/ThumbnailEndpointTest.java | 2 +- .../attachment/endpoint/AttachmentEndpointTest.java | 3 ++- .../reconciler/CommentReconcilerTest.java | 3 ++- .../reconciler/MenuItemReconcilerTest.java | 3 ++- .../reconciler/PluginReconcilerTest.java | 3 ++- .../{extension => }/reconciler/PostReconcilerTest.java | 3 ++- .../reconciler/ReverseProxyReconcilerTest.java | 3 ++- .../reconciler/SinglePageReconcilerTest.java | 3 ++- .../reconciler/SystemSettingReconcilerTest.java | 3 ++- .../{extension => }/reconciler/TagReconcilerTest.java | 3 ++- .../reconciler/ThemeReconcilerTest.java | 3 ++- .../{extension => }/reconciler/UserReconcilerTest.java | 5 +++-- .../service/DefaultRoleServiceTest.java | 3 ++- .../service/UserServiceImplTest.java | 4 +++- .../impl/EmailPasswordRecoveryServiceImplTest.java | 3 ++- .../service/impl/EmailVerificationServiceImplTest.java | 5 +++-- .../theme => infra/utils}/SettingUtilsTest.java | 3 +-- .../service/impl => plugin}/PluginServiceImplTest.java | 6 +----- .../app/security/DefaultUserDetailServiceTest.java | 4 ++-- .../app/security/authorization/AuthorizationTest.java | 2 +- .../authorization/DefaultRuleResolverTest.java | 2 +- .../theme => theme/endpoint}/ThemeEndpointTest.java | 3 ++- .../impl/CommentPublicQueryServiceImplTest.java | 2 +- .../theme => theme/service}/ThemeServiceImplTest.java | 2 +- .../halo/app/webfilter/LocaleChangeWebFilterTest.java | 1 + 147 files changed, 231 insertions(+), 207 deletions(-) rename application/src/main/java/run/halo/app/core/{extension => }/attachment/endpoint/AttachmentEndpoint.java (99%) rename application/src/main/java/run/halo/app/core/{extension => }/attachment/endpoint/LocalAttachmentUploadHandler.java (99%) rename application/src/main/java/run/halo/app/core/{extension/attachment => attachment/extension}/LocalThumbnail.java (98%) rename application/src/main/java/run/halo/app/core/{extension/attachment => attachment/extension}/Thumbnail.java (96%) rename application/src/main/java/run/halo/app/core/{extension/endpoint => endpoint/console}/AuthProviderEndpoint.java (97%) rename application/src/main/java/run/halo/app/core/{extension/endpoint => endpoint/console}/CommentEndpoint.java (98%) rename application/src/main/java/run/halo/app/core/{extension/endpoint => endpoint/console}/CustomEndpointsBuilder.java (94%) rename application/src/main/java/run/halo/app/core/{extension/endpoint => endpoint/console}/PluginEndpoint.java (99%) rename application/src/main/java/run/halo/app/core/{extension/endpoint => endpoint/console}/PostEndpoint.java (99%) rename application/src/main/java/run/halo/app/core/{extension/endpoint => endpoint/console}/ReplyEndpoint.java (94%) rename application/src/main/java/run/halo/app/core/{extension/endpoint => endpoint/console}/SinglePageEndpoint.java (99%) rename application/src/main/java/run/halo/app/core/{extension/endpoint => endpoint/console}/StatsEndpoint.java (97%) rename application/src/main/java/run/halo/app/core/{extension/endpoint => endpoint/console}/SystemInitializationEndpoint.java (98%) rename application/src/main/java/run/halo/app/core/{extension/endpoint => endpoint/console}/TagEndpoint.java (97%) rename application/src/main/java/run/halo/app/core/{extension/endpoint => endpoint/console}/TrackerEndpoint.java (98%) rename application/src/main/java/run/halo/app/core/{extension/endpoint => endpoint/console}/UserEndpoint.java (99%) rename application/src/main/java/run/halo/app/{theme/endpoint => core/endpoint/theme}/CategoryQueryEndpoint.java (97%) rename application/src/main/java/run/halo/app/{theme/endpoint => core/endpoint/theme}/CommentFinderEndpoint.java (99%) rename application/src/main/java/run/halo/app/{theme/endpoint => core/endpoint/theme}/MenuQueryEndpoint.java (98%) rename application/src/main/java/run/halo/app/{theme/endpoint => core/endpoint/theme}/PluginQueryEndpoint.java (98%) rename application/src/main/java/run/halo/app/{theme/endpoint => core/endpoint/theme}/PostPublicQuery.java (92%) rename application/src/main/java/run/halo/app/{theme/endpoint => core/endpoint/theme}/PostQueryEndpoint.java (99%) rename application/src/main/java/run/halo/app/{theme/endpoint => core/endpoint/theme}/PublicApiUtils.java (98%) rename application/src/main/java/run/halo/app/{theme/endpoint => core/endpoint/theme}/PublicUserEndpoint.java (98%) rename application/src/main/java/run/halo/app/{theme/endpoint => core/endpoint/theme}/SinglePageQueryEndpoint.java (98%) rename application/src/main/java/run/halo/app/{theme/endpoint => core/endpoint/theme}/SiteStatsQueryEndpoint.java (97%) rename application/src/main/java/run/halo/app/{theme/endpoint => core/endpoint/theme}/TagQueryEndpoint.java (99%) rename application/src/main/java/run/halo/app/{theme/endpoint => core/endpoint/theme}/ThumbnailEndpoint.java (99%) rename application/src/main/java/run/halo/app/{endpoint/uc/content => core/endpoint/uc}/UcPostAttachmentEndpoint.java (99%) rename application/src/main/java/run/halo/app/{endpoint/uc/content => core/endpoint/uc}/UcPostEndpoint.java (99%) rename application/src/main/java/run/halo/app/{endpoint/uc/content => core/endpoint/uc}/UcSnapshotEndpoint.java (99%) rename application/src/main/java/run/halo/app/core/{extension => }/reconciler/AnnotationSettingReconciler.java (97%) rename application/src/main/java/run/halo/app/core/{extension => }/reconciler/AuthProviderReconciler.java (97%) rename application/src/main/java/run/halo/app/core/{extension => }/reconciler/CategoryReconciler.java (98%) rename application/src/main/java/run/halo/app/core/{extension => }/reconciler/CommentReconciler.java (99%) rename application/src/main/java/run/halo/app/core/{extension => }/reconciler/MenuItemReconciler.java (99%) rename application/src/main/java/run/halo/app/core/{extension => }/reconciler/PluginReconciler.java (99%) rename application/src/main/java/run/halo/app/core/{extension => }/reconciler/PostCounterReconciler.java (97%) rename application/src/main/java/run/halo/app/core/{extension => }/reconciler/PostReconciler.java (99%) rename application/src/main/java/run/halo/app/core/{extension => }/reconciler/ReplyReconciler.java (98%) rename application/src/main/java/run/halo/app/core/{extension => }/reconciler/ReverseProxyReconciler.java (98%) rename application/src/main/java/run/halo/app/core/{extension => }/reconciler/RoleReconciler.java (97%) rename application/src/main/java/run/halo/app/core/{extension => }/reconciler/SinglePageReconciler.java (99%) rename application/src/main/java/run/halo/app/core/{extension => }/reconciler/SystemSettingReconciler.java (99%) rename application/src/main/java/run/halo/app/core/{extension => }/reconciler/TagReconciler.java (98%) rename application/src/main/java/run/halo/app/core/{extension => }/reconciler/ThemeReconciler.java (98%) rename application/src/main/java/run/halo/app/core/{extension => }/reconciler/UserReconciler.java (97%) rename application/src/main/java/run/halo/app/core/{extension => user}/service/DefaultRoleService.java (99%) rename application/src/main/java/run/halo/app/core/{extension => user}/service/EmailPasswordRecoveryService.java (96%) rename application/src/main/java/run/halo/app/core/{extension => user}/service/EmailVerificationService.java (96%) rename application/src/main/java/run/halo/app/core/{extension => user}/service/RoleService.java (96%) rename application/src/main/java/run/halo/app/core/{extension => user}/service/UserService.java (94%) rename application/src/main/java/run/halo/app/core/{extension => user}/service/UserServiceImpl.java (99%) rename application/src/main/java/run/halo/app/core/{extension => user}/service/impl/DefaultAttachmentService.java (99%) rename application/src/main/java/run/halo/app/core/{extension => user}/service/impl/EmailPasswordRecoveryServiceImpl.java (97%) rename application/src/main/java/run/halo/app/core/{extension => user}/service/impl/EmailVerificationServiceImpl.java (98%) rename application/src/main/java/run/halo/app/{ => infra}/actuator/DatabaseInfoContributor.java (97%) rename application/src/main/java/run/halo/app/{ => infra}/actuator/GlobalInfoEndpoint.java (99%) rename application/src/main/java/run/halo/app/{ => infra}/actuator/RestartEndpoint.java (98%) rename application/src/main/java/run/halo/app/{ => infra}/config/ExtensionConfiguration.java (97%) rename application/src/main/java/run/halo/app/{ => infra}/config/HaloConfiguration.java (97%) rename application/src/main/java/run/halo/app/{ => infra}/config/SwaggerConfig.java (99%) rename application/src/main/java/run/halo/app/{ => infra}/config/WebFluxConfig.java (97%) rename application/src/main/java/run/halo/app/{ => infra}/config/WebServerSecurityConfig.java (97%) rename application/src/main/java/run/halo/app/{ => infra}/console/ProxyFilter.java (98%) rename application/src/main/java/run/halo/app/{ => infra}/console/WebSocketRequestPredicate.java (78%) rename application/src/main/java/run/halo/app/{ => infra}/console/WebSocketServerWebExchangeMatcher.java (85%) rename application/src/main/java/run/halo/app/{ => infra}/console/WebSocketUtils.java (94%) rename application/src/main/java/run/halo/app/{core/extension/theme => infra/utils}/SettingUtils.java (97%) rename application/src/main/java/run/halo/app/{ => infra}/webfilter/AdditionalWebFilterChainProxy.java (97%) rename application/src/main/java/run/halo/app/{ => infra}/webfilter/LocaleChangeWebFilter.java (98%) rename application/src/main/java/run/halo/app/{core/extension/service => plugin}/PluginService.java (98%) rename application/src/main/java/run/halo/app/{core/extension/service/impl => plugin}/PluginServiceImpl.java (98%) rename application/src/main/java/run/halo/app/{core/extension/theme => theme/endpoint}/ThemeEndpoint.java (99%) rename application/src/main/java/run/halo/app/{core/extension/theme => theme/service}/ThemeService.java (92%) rename application/src/main/java/run/halo/app/{core/extension/theme => theme/service}/ThemeServiceImpl.java (98%) rename application/src/main/java/run/halo/app/{core/extension/theme => theme/service}/ThemeUtils.java (97%) rename application/src/test/java/run/halo/app/core/{extension/endpoint => endpoint/console}/EmailVerificationCodeTest.java (96%) rename application/src/test/java/run/halo/app/core/{extension/endpoint => endpoint/console}/PluginEndpointTest.java (99%) rename application/src/test/java/run/halo/app/core/{extension/endpoint => endpoint/console}/PostEndpointTest.java (99%) rename application/src/test/java/run/halo/app/core/{extension/endpoint => endpoint/console}/SinglePageEndpointTest.java (98%) rename application/src/test/java/run/halo/app/core/{extension/endpoint => endpoint/console}/SystemInitializationEndpointTest.java (95%) rename application/src/test/java/run/halo/app/core/{extension/endpoint => endpoint/console}/TagEndpointTest.java (98%) rename application/src/test/java/run/halo/app/core/{extension/endpoint => endpoint/console}/UserEndpointIntegrationTest.java (97%) rename application/src/test/java/run/halo/app/core/{extension/endpoint => endpoint/console}/UserEndpointTest.java (99%) rename application/src/test/java/run/halo/app/{theme/endpoint => core/endpoint/theme}/CategoryQueryEndpointTest.java (98%) rename application/src/test/java/run/halo/app/{theme/endpoint => core/endpoint/theme}/CommentFinderEndpointTest.java (99%) rename application/src/test/java/run/halo/app/{theme/endpoint => core/endpoint/theme}/MenuQueryEndpointTest.java (98%) rename application/src/test/java/run/halo/app/{theme/endpoint => core/endpoint/theme}/PluginQueryEndpointTest.java (97%) rename application/src/test/java/run/halo/app/{theme/endpoint => core/endpoint/theme}/PostQueryEndpointTest.java (98%) rename application/src/test/java/run/halo/app/{theme/endpoint => core/endpoint/theme}/PublicApiUtilsTest.java (97%) rename application/src/test/java/run/halo/app/{theme/endpoint => core/endpoint/theme}/PublicUserEndpointTest.java (97%) rename application/src/test/java/run/halo/app/{theme/endpoint => core/endpoint/theme}/SinglePageQueryEndpointTest.java (98%) rename application/src/test/java/run/halo/app/{theme/endpoint => core/endpoint/theme}/ThumbnailEndpointTest.java (97%) rename application/src/test/java/run/halo/app/core/{extension => }/reconciler/CommentReconcilerTest.java (97%) rename application/src/test/java/run/halo/app/core/{extension => }/reconciler/MenuItemReconcilerTest.java (98%) rename application/src/test/java/run/halo/app/core/{extension => }/reconciler/PluginReconcilerTest.java (99%) rename application/src/test/java/run/halo/app/core/{extension => }/reconciler/PostReconcilerTest.java (99%) rename application/src/test/java/run/halo/app/core/{extension => }/reconciler/ReverseProxyReconcilerTest.java (95%) rename application/src/test/java/run/halo/app/core/{extension => }/reconciler/SinglePageReconcilerTest.java (99%) rename application/src/test/java/run/halo/app/core/{extension => }/reconciler/SystemSettingReconcilerTest.java (98%) rename application/src/test/java/run/halo/app/core/{extension => }/reconciler/TagReconcilerTest.java (97%) rename application/src/test/java/run/halo/app/core/{extension => }/reconciler/ThemeReconcilerTest.java (99%) rename application/src/test/java/run/halo/app/core/{extension => }/reconciler/UserReconcilerTest.java (96%) rename application/src/test/java/run/halo/app/core/{extension => user}/service/DefaultRoleServiceTest.java (99%) rename application/src/test/java/run/halo/app/core/{extension => user}/service/UserServiceImplTest.java (99%) rename application/src/test/java/run/halo/app/core/{extension => user}/service/impl/EmailPasswordRecoveryServiceImplTest.java (96%) rename application/src/test/java/run/halo/app/core/{extension => user}/service/impl/EmailVerificationServiceImplTest.java (94%) rename application/src/test/java/run/halo/app/{core/extension/theme => infra/utils}/SettingUtilsTest.java (98%) rename application/src/test/java/run/halo/app/{core/extension/service/impl => plugin}/PluginServiceImplTest.java (98%) rename application/src/test/java/run/halo/app/{core/extension/theme => theme/endpoint}/ThemeEndpointTest.java (99%) rename application/src/test/java/run/halo/app/{core/extension/theme => theme/service}/ThemeServiceImplTest.java (99%) diff --git a/application/src/main/java/run/halo/app/content/comment/AbstractCommentService.java b/application/src/main/java/run/halo/app/content/comment/AbstractCommentService.java index 175d1817f..3ebc08df8 100644 --- a/application/src/main/java/run/halo/app/content/comment/AbstractCommentService.java +++ b/application/src/main/java/run/halo/app/content/comment/AbstractCommentService.java @@ -8,8 +8,8 @@ import reactor.core.publisher.Mono; import run.halo.app.core.extension.User; import run.halo.app.core.extension.content.Comment; import run.halo.app.core.extension.content.Reply; -import run.halo.app.core.extension.service.RoleService; -import run.halo.app.core.extension.service.UserService; +import run.halo.app.core.user.service.RoleService; +import run.halo.app.core.user.service.UserService; import run.halo.app.extension.ReactiveExtensionClient; import run.halo.app.metrics.CounterService; import run.halo.app.metrics.MeterUtils; diff --git a/application/src/main/java/run/halo/app/content/comment/CommentServiceImpl.java b/application/src/main/java/run/halo/app/content/comment/CommentServiceImpl.java index a7510bdab..76e985aae 100644 --- a/application/src/main/java/run/halo/app/content/comment/CommentServiceImpl.java +++ b/application/src/main/java/run/halo/app/content/comment/CommentServiceImpl.java @@ -17,8 +17,8 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.util.retry.Retry; import run.halo.app.core.extension.content.Comment; -import run.halo.app.core.extension.service.RoleService; -import run.halo.app.core.extension.service.UserService; +import run.halo.app.core.user.service.RoleService; +import run.halo.app.core.user.service.UserService; import run.halo.app.extension.Extension; import run.halo.app.extension.ListOptions; import run.halo.app.extension.ListResult; diff --git a/application/src/main/java/run/halo/app/content/comment/ReplyServiceImpl.java b/application/src/main/java/run/halo/app/content/comment/ReplyServiceImpl.java index 26b99e63e..54687b929 100644 --- a/application/src/main/java/run/halo/app/content/comment/ReplyServiceImpl.java +++ b/application/src/main/java/run/halo/app/content/comment/ReplyServiceImpl.java @@ -22,8 +22,8 @@ import reactor.core.publisher.Mono; import reactor.util.retry.Retry; import run.halo.app.core.extension.content.Comment; import run.halo.app.core.extension.content.Reply; -import run.halo.app.core.extension.service.RoleService; -import run.halo.app.core.extension.service.UserService; +import run.halo.app.core.user.service.RoleService; +import run.halo.app.core.user.service.UserService; import run.halo.app.extension.ListOptions; import run.halo.app.extension.ListResult; import run.halo.app.extension.PageRequest; diff --git a/application/src/main/java/run/halo/app/content/impl/PostServiceImpl.java b/application/src/main/java/run/halo/app/content/impl/PostServiceImpl.java index bf535a9fa..b8a12c0f0 100644 --- a/application/src/main/java/run/halo/app/content/impl/PostServiceImpl.java +++ b/application/src/main/java/run/halo/app/content/impl/PostServiceImpl.java @@ -34,7 +34,7 @@ import run.halo.app.core.extension.content.Category; import run.halo.app.core.extension.content.Post; import run.halo.app.core.extension.content.Snapshot; import run.halo.app.core.extension.content.Tag; -import run.halo.app.core.extension.service.UserService; +import run.halo.app.core.user.service.UserService; import run.halo.app.extension.ListOptions; import run.halo.app.extension.ListResult; import run.halo.app.extension.MetadataOperator; diff --git a/application/src/main/java/run/halo/app/content/impl/SinglePageServiceImpl.java b/application/src/main/java/run/halo/app/content/impl/SinglePageServiceImpl.java index ab055b67d..868ca69df 100644 --- a/application/src/main/java/run/halo/app/content/impl/SinglePageServiceImpl.java +++ b/application/src/main/java/run/halo/app/content/impl/SinglePageServiceImpl.java @@ -28,7 +28,7 @@ import run.halo.app.content.Stats; import run.halo.app.core.extension.content.Post; import run.halo.app.core.extension.content.SinglePage; import run.halo.app.core.extension.content.Snapshot; -import run.halo.app.core.extension.service.UserService; +import run.halo.app.core.user.service.UserService; import run.halo.app.extension.ListResult; import run.halo.app.extension.ReactiveExtensionClient; import run.halo.app.extension.Ref; diff --git a/application/src/main/java/run/halo/app/core/attachment/LocalThumbnailService.java b/application/src/main/java/run/halo/app/core/attachment/LocalThumbnailService.java index 050650ddb..a372446e8 100644 --- a/application/src/main/java/run/halo/app/core/attachment/LocalThumbnailService.java +++ b/application/src/main/java/run/halo/app/core/attachment/LocalThumbnailService.java @@ -6,7 +6,7 @@ import java.nio.file.Path; import org.springframework.core.io.Resource; import org.springframework.lang.NonNull; import reactor.core.publisher.Mono; -import run.halo.app.core.extension.attachment.LocalThumbnail; +import run.halo.app.core.attachment.extension.LocalThumbnail; import run.halo.app.infra.ExternalLinkProcessor; import run.halo.app.infra.exception.NotFoundException; diff --git a/application/src/main/java/run/halo/app/core/extension/attachment/endpoint/AttachmentEndpoint.java b/application/src/main/java/run/halo/app/core/attachment/endpoint/AttachmentEndpoint.java similarity index 99% rename from application/src/main/java/run/halo/app/core/extension/attachment/endpoint/AttachmentEndpoint.java rename to application/src/main/java/run/halo/app/core/attachment/endpoint/AttachmentEndpoint.java index 3e9c5b35d..a79e0f326 100644 --- a/application/src/main/java/run/halo/app/core/extension/attachment/endpoint/AttachmentEndpoint.java +++ b/application/src/main/java/run/halo/app/core/attachment/endpoint/AttachmentEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.attachment.endpoint; +package run.halo.app.core.attachment.endpoint; import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED; import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; diff --git a/application/src/main/java/run/halo/app/core/extension/attachment/endpoint/LocalAttachmentUploadHandler.java b/application/src/main/java/run/halo/app/core/attachment/endpoint/LocalAttachmentUploadHandler.java similarity index 99% rename from application/src/main/java/run/halo/app/core/extension/attachment/endpoint/LocalAttachmentUploadHandler.java rename to application/src/main/java/run/halo/app/core/attachment/endpoint/LocalAttachmentUploadHandler.java index b0db21fc8..f13408cea 100644 --- a/application/src/main/java/run/halo/app/core/extension/attachment/endpoint/LocalAttachmentUploadHandler.java +++ b/application/src/main/java/run/halo/app/core/attachment/endpoint/LocalAttachmentUploadHandler.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.attachment.endpoint; +package run.halo.app.core.attachment.endpoint; import static java.nio.file.StandardOpenOption.CREATE_NEW; import static run.halo.app.infra.utils.FileNameUtils.randomFileName; @@ -41,6 +41,7 @@ import run.halo.app.core.extension.attachment.Attachment; import run.halo.app.core.extension.attachment.Attachment.AttachmentSpec; import run.halo.app.core.extension.attachment.Constant; import run.halo.app.core.extension.attachment.Policy; +import run.halo.app.core.extension.attachment.endpoint.AttachmentHandler; import run.halo.app.extension.ConfigMap; import run.halo.app.extension.Metadata; import run.halo.app.infra.ExternalUrlSupplier; diff --git a/application/src/main/java/run/halo/app/core/extension/attachment/LocalThumbnail.java b/application/src/main/java/run/halo/app/core/attachment/extension/LocalThumbnail.java similarity index 98% rename from application/src/main/java/run/halo/app/core/extension/attachment/LocalThumbnail.java rename to application/src/main/java/run/halo/app/core/attachment/extension/LocalThumbnail.java index a4378853a..97ee3974b 100644 --- a/application/src/main/java/run/halo/app/core/extension/attachment/LocalThumbnail.java +++ b/application/src/main/java/run/halo/app/core/attachment/extension/LocalThumbnail.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.attachment; +package run.halo.app.core.attachment.extension; import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.NOT_REQUIRED; import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED; diff --git a/application/src/main/java/run/halo/app/core/extension/attachment/Thumbnail.java b/application/src/main/java/run/halo/app/core/attachment/extension/Thumbnail.java similarity index 96% rename from application/src/main/java/run/halo/app/core/extension/attachment/Thumbnail.java rename to application/src/main/java/run/halo/app/core/attachment/extension/Thumbnail.java index 759a362f5..0228cc99d 100644 --- a/application/src/main/java/run/halo/app/core/extension/attachment/Thumbnail.java +++ b/application/src/main/java/run/halo/app/core/attachment/extension/Thumbnail.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.attachment; +package run.halo.app.core.attachment.extension; import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED; diff --git a/application/src/main/java/run/halo/app/core/attachment/impl/LocalThumbnailServiceImpl.java b/application/src/main/java/run/halo/app/core/attachment/impl/LocalThumbnailServiceImpl.java index 747606253..5b25d4b01 100644 --- a/application/src/main/java/run/halo/app/core/attachment/impl/LocalThumbnailServiceImpl.java +++ b/application/src/main/java/run/halo/app/core/attachment/impl/LocalThumbnailServiceImpl.java @@ -38,7 +38,7 @@ import run.halo.app.core.attachment.LocalThumbnailService; import run.halo.app.core.attachment.ThumbnailGenerator; import run.halo.app.core.attachment.ThumbnailSigner; import run.halo.app.core.attachment.ThumbnailSize; -import run.halo.app.core.extension.attachment.LocalThumbnail; +import run.halo.app.core.attachment.extension.LocalThumbnail; import run.halo.app.extension.ListOptions; import run.halo.app.extension.ListResult; import run.halo.app.extension.Metadata; diff --git a/application/src/main/java/run/halo/app/core/attachment/impl/ThumbnailServiceImpl.java b/application/src/main/java/run/halo/app/core/attachment/impl/ThumbnailServiceImpl.java index 11cc3cadf..a499ebc00 100644 --- a/application/src/main/java/run/halo/app/core/attachment/impl/ThumbnailServiceImpl.java +++ b/application/src/main/java/run/halo/app/core/attachment/impl/ThumbnailServiceImpl.java @@ -20,7 +20,7 @@ import run.halo.app.core.attachment.ThumbnailProvider.ThumbnailContext; import run.halo.app.core.attachment.ThumbnailService; import run.halo.app.core.attachment.ThumbnailSigner; import run.halo.app.core.attachment.ThumbnailSize; -import run.halo.app.core.extension.attachment.Thumbnail; +import run.halo.app.core.attachment.extension.Thumbnail; import run.halo.app.extension.ListOptions; import run.halo.app.extension.ListResult; import run.halo.app.extension.Metadata; diff --git a/application/src/main/java/run/halo/app/core/attachment/reconciler/LocalThumbnailsReconciler.java b/application/src/main/java/run/halo/app/core/attachment/reconciler/LocalThumbnailsReconciler.java index ce2d90f82..900f57ff2 100644 --- a/application/src/main/java/run/halo/app/core/attachment/reconciler/LocalThumbnailsReconciler.java +++ b/application/src/main/java/run/halo/app/core/attachment/reconciler/LocalThumbnailsReconciler.java @@ -1,7 +1,7 @@ package run.halo.app.core.attachment.reconciler; import static org.springframework.data.domain.Sort.Order.desc; -import static run.halo.app.core.extension.attachment.LocalThumbnail.REQUEST_TO_GENERATE_ANNO; +import static run.halo.app.core.attachment.extension.LocalThumbnail.REQUEST_TO_GENERATE_ANNO; import static run.halo.app.extension.MetadataUtil.nullSafeAnnotations; import static run.halo.app.extension.index.query.QueryFactory.and; import static run.halo.app.extension.index.query.QueryFactory.equal; @@ -23,9 +23,9 @@ import run.halo.app.core.attachment.AttachmentRootGetter; import run.halo.app.core.attachment.AttachmentUtils; import run.halo.app.core.attachment.LocalThumbnailService; import run.halo.app.core.attachment.ThumbnailGenerator; +import run.halo.app.core.attachment.extension.LocalThumbnail; import run.halo.app.core.extension.attachment.Attachment; import run.halo.app.core.extension.attachment.Constant; -import run.halo.app.core.extension.attachment.LocalThumbnail; import run.halo.app.extension.ExtensionClient; import run.halo.app.extension.ExtensionUtil; import run.halo.app.extension.ListOptions; diff --git a/application/src/main/java/run/halo/app/core/endpoint/WebSocketHandlerMapping.java b/application/src/main/java/run/halo/app/core/endpoint/WebSocketHandlerMapping.java index 0105c03b3..c76fa0de2 100644 --- a/application/src/main/java/run/halo/app/core/endpoint/WebSocketHandlerMapping.java +++ b/application/src/main/java/run/halo/app/core/endpoint/WebSocketHandlerMapping.java @@ -19,7 +19,7 @@ import org.springframework.web.reactive.socket.WebSocketHandler; import org.springframework.web.server.ServerWebExchange; import org.springframework.web.util.pattern.PathPattern; import reactor.core.publisher.Mono; -import run.halo.app.console.WebSocketUtils; +import run.halo.app.infra.console.WebSocketUtils; public class WebSocketHandlerMapping extends AbstractHandlerMapping implements WebSocketEndpointManager, InitializingBean { diff --git a/application/src/main/java/run/halo/app/core/extension/endpoint/AuthProviderEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/console/AuthProviderEndpoint.java similarity index 97% rename from application/src/main/java/run/halo/app/core/extension/endpoint/AuthProviderEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/console/AuthProviderEndpoint.java index a58b922fe..e1ecbbc1b 100644 --- a/application/src/main/java/run/halo/app/core/extension/endpoint/AuthProviderEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/console/AuthProviderEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.endpoint; +package run.halo.app.core.endpoint.console; import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; import static org.springdoc.core.fn.builders.parameter.Builder.parameterBuilder; @@ -12,6 +12,7 @@ import org.springframework.web.reactive.function.server.ServerRequest; import org.springframework.web.reactive.function.server.ServerResponse; import reactor.core.publisher.Mono; import run.halo.app.core.extension.AuthProvider; +import run.halo.app.core.extension.endpoint.CustomEndpoint; import run.halo.app.security.AuthProviderService; import run.halo.app.security.ListedAuthProvider; diff --git a/application/src/main/java/run/halo/app/core/extension/endpoint/CommentEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/console/CommentEndpoint.java similarity index 98% rename from application/src/main/java/run/halo/app/core/extension/endpoint/CommentEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/console/CommentEndpoint.java index 18c904c53..e1efd293b 100644 --- a/application/src/main/java/run/halo/app/core/extension/endpoint/CommentEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/console/CommentEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.endpoint; +package run.halo.app.core.endpoint.console; import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; import static org.springdoc.core.fn.builders.content.Builder.contentBuilder; @@ -23,6 +23,7 @@ import run.halo.app.content.comment.ReplyRequest; import run.halo.app.content.comment.ReplyService; import run.halo.app.core.extension.content.Comment; import run.halo.app.core.extension.content.Reply; +import run.halo.app.core.extension.endpoint.CustomEndpoint; import run.halo.app.extension.ListResult; import run.halo.app.infra.utils.HaloUtils; import run.halo.app.infra.utils.IpAddressUtils; diff --git a/application/src/main/java/run/halo/app/core/extension/endpoint/CustomEndpointsBuilder.java b/application/src/main/java/run/halo/app/core/endpoint/console/CustomEndpointsBuilder.java similarity index 94% rename from application/src/main/java/run/halo/app/core/extension/endpoint/CustomEndpointsBuilder.java rename to application/src/main/java/run/halo/app/core/endpoint/console/CustomEndpointsBuilder.java index 6b8d7cf06..b328709a6 100644 --- a/application/src/main/java/run/halo/app/core/extension/endpoint/CustomEndpointsBuilder.java +++ b/application/src/main/java/run/halo/app/core/endpoint/console/CustomEndpointsBuilder.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.endpoint; +package run.halo.app.core.endpoint.console; import java.util.HashMap; import java.util.LinkedList; @@ -9,6 +9,7 @@ import org.springframework.web.reactive.function.server.RequestPredicates; import org.springframework.web.reactive.function.server.RouterFunction; import org.springframework.web.reactive.function.server.ServerResponse; import reactor.core.publisher.Mono; +import run.halo.app.core.extension.endpoint.CustomEndpoint; import run.halo.app.extension.GroupVersion; public class CustomEndpointsBuilder { diff --git a/application/src/main/java/run/halo/app/core/extension/endpoint/PluginEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/console/PluginEndpoint.java similarity index 99% rename from application/src/main/java/run/halo/app/core/extension/endpoint/PluginEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/console/PluginEndpoint.java index a05a216bd..2f3dea989 100644 --- a/application/src/main/java/run/halo/app/core/extension/endpoint/PluginEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/console/PluginEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.endpoint; +package run.halo.app.core.endpoint.console; import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.NOT_REQUIRED; import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED; @@ -60,15 +60,16 @@ import reactor.core.scheduler.Schedulers; import reactor.util.retry.Retry; import run.halo.app.core.extension.Plugin; import run.halo.app.core.extension.Setting; -import run.halo.app.core.extension.service.PluginService; -import run.halo.app.core.extension.theme.SettingUtils; +import run.halo.app.core.extension.endpoint.CustomEndpoint; import run.halo.app.extension.ConfigMap; import run.halo.app.extension.ListOptions; import run.halo.app.extension.ReactiveExtensionClient; import run.halo.app.extension.router.IListRequest; import run.halo.app.extension.router.SortableRequest; import run.halo.app.infra.ReactiveUrlDataBufferFetcher; +import run.halo.app.infra.utils.SettingUtils; import run.halo.app.plugin.PluginNotFoundException; +import run.halo.app.plugin.PluginService; @Slf4j @Component diff --git a/application/src/main/java/run/halo/app/core/extension/endpoint/PostEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/console/PostEndpoint.java similarity index 99% rename from application/src/main/java/run/halo/app/core/extension/endpoint/PostEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/console/PostEndpoint.java index 07049041a..689a0f201 100644 --- a/application/src/main/java/run/halo/app/core/extension/endpoint/PostEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/console/PostEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.endpoint; +package run.halo.app.core.endpoint.console; import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; import static org.springdoc.core.fn.builders.content.Builder.contentBuilder; @@ -37,6 +37,7 @@ import run.halo.app.content.PostQuery; import run.halo.app.content.PostRequest; import run.halo.app.content.PostService; import run.halo.app.core.extension.content.Post; +import run.halo.app.core.extension.endpoint.CustomEndpoint; import run.halo.app.extension.ListResult; import run.halo.app.extension.MetadataUtil; import run.halo.app.extension.ReactiveExtensionClient; diff --git a/application/src/main/java/run/halo/app/core/extension/endpoint/ReplyEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/console/ReplyEndpoint.java similarity index 94% rename from application/src/main/java/run/halo/app/core/extension/endpoint/ReplyEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/console/ReplyEndpoint.java index 61e2fb589..29a6cd9cc 100644 --- a/application/src/main/java/run/halo/app/core/extension/endpoint/ReplyEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/console/ReplyEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.endpoint; +package run.halo.app.core.endpoint.console; import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; @@ -12,6 +12,7 @@ import run.halo.app.content.comment.ListedReply; import run.halo.app.content.comment.ReplyQuery; import run.halo.app.content.comment.ReplyService; import run.halo.app.core.extension.content.Reply; +import run.halo.app.core.extension.endpoint.CustomEndpoint; import run.halo.app.extension.ListResult; /** diff --git a/application/src/main/java/run/halo/app/core/extension/endpoint/SinglePageEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/console/SinglePageEndpoint.java similarity index 99% rename from application/src/main/java/run/halo/app/core/extension/endpoint/SinglePageEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/console/SinglePageEndpoint.java index 0c86c0164..56f8ce014 100644 --- a/application/src/main/java/run/halo/app/core/extension/endpoint/SinglePageEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/console/SinglePageEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.endpoint; +package run.halo.app.core.endpoint.console; import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; import static org.springdoc.core.fn.builders.content.Builder.contentBuilder; @@ -33,6 +33,7 @@ import run.halo.app.content.SinglePageRequest; import run.halo.app.content.SinglePageService; import run.halo.app.core.extension.content.Post; import run.halo.app.core.extension.content.SinglePage; +import run.halo.app.core.extension.endpoint.CustomEndpoint; import run.halo.app.extension.ListResult; import run.halo.app.extension.MetadataUtil; import run.halo.app.extension.ReactiveExtensionClient; diff --git a/application/src/main/java/run/halo/app/core/extension/endpoint/StatsEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/console/StatsEndpoint.java similarity index 97% rename from application/src/main/java/run/halo/app/core/extension/endpoint/StatsEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/console/StatsEndpoint.java index 84881b73d..6be262e68 100644 --- a/application/src/main/java/run/halo/app/core/extension/endpoint/StatsEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/console/StatsEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.endpoint; +package run.halo.app.core.endpoint.console; import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; import static run.halo.app.extension.index.query.QueryFactory.and; @@ -15,6 +15,7 @@ import reactor.core.publisher.Mono; import run.halo.app.core.extension.Counter; import run.halo.app.core.extension.User; import run.halo.app.core.extension.content.Post; +import run.halo.app.core.extension.endpoint.CustomEndpoint; import run.halo.app.extension.ListOptions; import run.halo.app.extension.PageRequestImpl; import run.halo.app.extension.ReactiveExtensionClient; diff --git a/application/src/main/java/run/halo/app/core/extension/endpoint/SystemInitializationEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/console/SystemInitializationEndpoint.java similarity index 98% rename from application/src/main/java/run/halo/app/core/extension/endpoint/SystemInitializationEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/console/SystemInitializationEndpoint.java index 37477cc81..4bb6b21b3 100644 --- a/application/src/main/java/run/halo/app/core/extension/endpoint/SystemInitializationEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/console/SystemInitializationEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.endpoint; +package run.halo.app.core.endpoint.console; import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED; import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; @@ -25,6 +25,7 @@ import org.springframework.web.server.ResponseStatusException; import org.springframework.web.server.ServerWebInputException; import reactor.core.publisher.Mono; import reactor.util.retry.Retry; +import run.halo.app.core.extension.endpoint.CustomEndpoint; import run.halo.app.extension.ConfigMap; import run.halo.app.extension.ReactiveExtensionClient; import run.halo.app.infra.InitializationStateGetter; diff --git a/application/src/main/java/run/halo/app/core/extension/endpoint/TagEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/console/TagEndpoint.java similarity index 97% rename from application/src/main/java/run/halo/app/core/extension/endpoint/TagEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/console/TagEndpoint.java index ca768092f..612113413 100644 --- a/application/src/main/java/run/halo/app/core/extension/endpoint/TagEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/console/TagEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.endpoint; +package run.halo.app.core.endpoint.console; import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; import static org.springdoc.core.fn.builders.parameter.Builder.parameterBuilder; @@ -19,6 +19,7 @@ import org.springframework.web.reactive.function.server.ServerRequest; import org.springframework.web.reactive.function.server.ServerResponse; import reactor.core.publisher.Mono; import run.halo.app.core.extension.content.Tag; +import run.halo.app.core.extension.endpoint.CustomEndpoint; import run.halo.app.extension.ListOptions; import run.halo.app.extension.ListResult; import run.halo.app.extension.PageRequestImpl; diff --git a/application/src/main/java/run/halo/app/core/extension/endpoint/TrackerEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/console/TrackerEndpoint.java similarity index 98% rename from application/src/main/java/run/halo/app/core/extension/endpoint/TrackerEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/console/TrackerEndpoint.java index 8ada7725f..a69a30150 100644 --- a/application/src/main/java/run/halo/app/core/extension/endpoint/TrackerEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/console/TrackerEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.endpoint; +package run.halo.app.core.endpoint.console; import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; import static org.springdoc.core.fn.builders.content.Builder.contentBuilder; @@ -16,6 +16,7 @@ import org.springframework.web.reactive.function.server.RouterFunction; import org.springframework.web.reactive.function.server.ServerRequest; import org.springframework.web.reactive.function.server.ServerResponse; import reactor.core.publisher.Mono; +import run.halo.app.core.extension.endpoint.CustomEndpoint; import run.halo.app.event.post.DownvotedEvent; import run.halo.app.event.post.UpvotedEvent; import run.halo.app.event.post.VisitedEvent; diff --git a/application/src/main/java/run/halo/app/core/extension/endpoint/UserEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/console/UserEndpoint.java similarity index 99% rename from application/src/main/java/run/halo/app/core/extension/endpoint/UserEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/console/UserEndpoint.java index d8bc8bd98..8a907e84c 100644 --- a/application/src/main/java/run/halo/app/core/extension/endpoint/UserEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/console/UserEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.endpoint; +package run.halo.app.core.endpoint.console; import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED; import static org.apache.commons.lang3.ObjectUtils.defaultIfNull; @@ -70,10 +70,11 @@ import reactor.util.retry.Retry; import run.halo.app.core.extension.Role; import run.halo.app.core.extension.User; import run.halo.app.core.extension.attachment.Attachment; +import run.halo.app.core.extension.endpoint.CustomEndpoint; import run.halo.app.core.extension.service.AttachmentService; -import run.halo.app.core.extension.service.EmailVerificationService; -import run.halo.app.core.extension.service.RoleService; -import run.halo.app.core.extension.service.UserService; +import run.halo.app.core.user.service.EmailVerificationService; +import run.halo.app.core.user.service.RoleService; +import run.halo.app.core.user.service.UserService; import run.halo.app.extension.ListOptions; import run.halo.app.extension.ListResult; import run.halo.app.extension.Metadata; diff --git a/application/src/main/java/run/halo/app/theme/endpoint/CategoryQueryEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/theme/CategoryQueryEndpoint.java similarity index 97% rename from application/src/main/java/run/halo/app/theme/endpoint/CategoryQueryEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/theme/CategoryQueryEndpoint.java index 1183211a3..85587ad40 100644 --- a/application/src/main/java/run/halo/app/theme/endpoint/CategoryQueryEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/theme/CategoryQueryEndpoint.java @@ -1,8 +1,8 @@ -package run.halo.app.theme.endpoint; +package run.halo.app.core.endpoint.theme; import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; import static org.springdoc.core.fn.builders.parameter.Builder.parameterBuilder; -import static run.halo.app.theme.endpoint.PublicApiUtils.toAnotherListResult; +import static run.halo.app.core.endpoint.theme.PublicApiUtils.toAnotherListResult; import io.swagger.v3.oas.annotations.enums.ParameterIn; import lombok.RequiredArgsConstructor; diff --git a/application/src/main/java/run/halo/app/theme/endpoint/CommentFinderEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/theme/CommentFinderEndpoint.java similarity index 99% rename from application/src/main/java/run/halo/app/theme/endpoint/CommentFinderEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/theme/CommentFinderEndpoint.java index edfd4c4ae..2e4169ff1 100644 --- a/application/src/main/java/run/halo/app/theme/endpoint/CommentFinderEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/theme/CommentFinderEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.theme.endpoint; +package run.halo.app.core.endpoint.theme; import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED; import static org.apache.commons.lang3.BooleanUtils.isFalse; diff --git a/application/src/main/java/run/halo/app/theme/endpoint/MenuQueryEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/theme/MenuQueryEndpoint.java similarity index 98% rename from application/src/main/java/run/halo/app/theme/endpoint/MenuQueryEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/theme/MenuQueryEndpoint.java index b43eff049..f0ac37df1 100644 --- a/application/src/main/java/run/halo/app/theme/endpoint/MenuQueryEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/theme/MenuQueryEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.theme.endpoint; +package run.halo.app.core.endpoint.theme; import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; import static org.springdoc.core.fn.builders.parameter.Builder.parameterBuilder; diff --git a/application/src/main/java/run/halo/app/theme/endpoint/PluginQueryEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/theme/PluginQueryEndpoint.java similarity index 98% rename from application/src/main/java/run/halo/app/theme/endpoint/PluginQueryEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/theme/PluginQueryEndpoint.java index 2de30247d..d649f7961 100644 --- a/application/src/main/java/run/halo/app/theme/endpoint/PluginQueryEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/theme/PluginQueryEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.theme.endpoint; +package run.halo.app.core.endpoint.theme; import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; import static org.springdoc.core.fn.builders.parameter.Builder.parameterBuilder; diff --git a/application/src/main/java/run/halo/app/theme/endpoint/PostPublicQuery.java b/application/src/main/java/run/halo/app/core/endpoint/theme/PostPublicQuery.java similarity index 92% rename from application/src/main/java/run/halo/app/theme/endpoint/PostPublicQuery.java rename to application/src/main/java/run/halo/app/core/endpoint/theme/PostPublicQuery.java index c880186a1..281748108 100644 --- a/application/src/main/java/run/halo/app/theme/endpoint/PostPublicQuery.java +++ b/application/src/main/java/run/halo/app/core/endpoint/theme/PostPublicQuery.java @@ -1,4 +1,4 @@ -package run.halo.app.theme.endpoint; +package run.halo.app.core.endpoint.theme; import org.springdoc.core.fn.builders.operation.Builder; import org.springframework.web.server.ServerWebExchange; diff --git a/application/src/main/java/run/halo/app/theme/endpoint/PostQueryEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/theme/PostQueryEndpoint.java similarity index 99% rename from application/src/main/java/run/halo/app/theme/endpoint/PostQueryEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/theme/PostQueryEndpoint.java index 9136eea7e..9588265f9 100644 --- a/application/src/main/java/run/halo/app/theme/endpoint/PostQueryEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/theme/PostQueryEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.theme.endpoint; +package run.halo.app.core.endpoint.theme; import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; import static org.springdoc.core.fn.builders.parameter.Builder.parameterBuilder; diff --git a/application/src/main/java/run/halo/app/theme/endpoint/PublicApiUtils.java b/application/src/main/java/run/halo/app/core/endpoint/theme/PublicApiUtils.java similarity index 98% rename from application/src/main/java/run/halo/app/theme/endpoint/PublicApiUtils.java rename to application/src/main/java/run/halo/app/core/endpoint/theme/PublicApiUtils.java index 142b72055..5a622e85d 100644 --- a/application/src/main/java/run/halo/app/theme/endpoint/PublicApiUtils.java +++ b/application/src/main/java/run/halo/app/core/endpoint/theme/PublicApiUtils.java @@ -1,4 +1,4 @@ -package run.halo.app.theme.endpoint; +package run.halo.app.core.endpoint.theme; import java.util.Collection; import java.util.List; diff --git a/application/src/main/java/run/halo/app/theme/endpoint/PublicUserEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/theme/PublicUserEndpoint.java similarity index 98% rename from application/src/main/java/run/halo/app/theme/endpoint/PublicUserEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/theme/PublicUserEndpoint.java index 9ebd7b22a..862aad334 100644 --- a/application/src/main/java/run/halo/app/theme/endpoint/PublicUserEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/theme/PublicUserEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.theme.endpoint; +package run.halo.app.core.endpoint.theme; import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.NOT_REQUIRED; import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED; @@ -30,9 +30,9 @@ import org.springframework.web.server.ServerWebInputException; import reactor.core.publisher.Mono; import run.halo.app.core.extension.User; import run.halo.app.core.extension.endpoint.CustomEndpoint; -import run.halo.app.core.extension.service.EmailPasswordRecoveryService; -import run.halo.app.core.extension.service.EmailVerificationService; -import run.halo.app.core.extension.service.UserService; +import run.halo.app.core.user.service.EmailPasswordRecoveryService; +import run.halo.app.core.user.service.EmailVerificationService; +import run.halo.app.core.user.service.UserService; import run.halo.app.extension.GroupVersion; import run.halo.app.infra.SystemConfigurableEnvironmentFetcher; import run.halo.app.infra.SystemSetting; diff --git a/application/src/main/java/run/halo/app/theme/endpoint/SinglePageQueryEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/theme/SinglePageQueryEndpoint.java similarity index 98% rename from application/src/main/java/run/halo/app/theme/endpoint/SinglePageQueryEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/theme/SinglePageQueryEndpoint.java index 933f3516d..8813cd273 100644 --- a/application/src/main/java/run/halo/app/theme/endpoint/SinglePageQueryEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/theme/SinglePageQueryEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.theme.endpoint; +package run.halo.app.core.endpoint.theme; import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; import static org.springdoc.core.fn.builders.parameter.Builder.parameterBuilder; diff --git a/application/src/main/java/run/halo/app/theme/endpoint/SiteStatsQueryEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/theme/SiteStatsQueryEndpoint.java similarity index 97% rename from application/src/main/java/run/halo/app/theme/endpoint/SiteStatsQueryEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/theme/SiteStatsQueryEndpoint.java index 40792d06b..13ed5c0a7 100644 --- a/application/src/main/java/run/halo/app/theme/endpoint/SiteStatsQueryEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/theme/SiteStatsQueryEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.theme.endpoint; +package run.halo.app.core.endpoint.theme; import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; diff --git a/application/src/main/java/run/halo/app/theme/endpoint/TagQueryEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/theme/TagQueryEndpoint.java similarity index 99% rename from application/src/main/java/run/halo/app/theme/endpoint/TagQueryEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/theme/TagQueryEndpoint.java index a54120d7a..b25f3cdae 100644 --- a/application/src/main/java/run/halo/app/theme/endpoint/TagQueryEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/theme/TagQueryEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.theme.endpoint; +package run.halo.app.core.endpoint.theme; import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; import static org.springdoc.core.fn.builders.parameter.Builder.parameterBuilder; diff --git a/application/src/main/java/run/halo/app/theme/endpoint/ThumbnailEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/theme/ThumbnailEndpoint.java similarity index 99% rename from application/src/main/java/run/halo/app/theme/endpoint/ThumbnailEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/theme/ThumbnailEndpoint.java index aeb332b0d..012bdd249 100644 --- a/application/src/main/java/run/halo/app/theme/endpoint/ThumbnailEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/theme/ThumbnailEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.theme.endpoint; +package run.halo.app.core.endpoint.theme; import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED; import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; diff --git a/application/src/main/java/run/halo/app/endpoint/uc/content/UcPostAttachmentEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/uc/UcPostAttachmentEndpoint.java similarity index 99% rename from application/src/main/java/run/halo/app/endpoint/uc/content/UcPostAttachmentEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/uc/UcPostAttachmentEndpoint.java index 47063a455..0e04701a7 100644 --- a/application/src/main/java/run/halo/app/endpoint/uc/content/UcPostAttachmentEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/uc/UcPostAttachmentEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.endpoint.uc.content; +package run.halo.app.core.endpoint.uc; import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.NOT_REQUIRED; import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED; diff --git a/application/src/main/java/run/halo/app/endpoint/uc/content/UcPostEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/uc/UcPostEndpoint.java similarity index 99% rename from application/src/main/java/run/halo/app/endpoint/uc/content/UcPostEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/uc/UcPostEndpoint.java index 0b30aec49..a969e64e8 100644 --- a/application/src/main/java/run/halo/app/endpoint/uc/content/UcPostEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/uc/UcPostEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.endpoint.uc.content; +package run.halo.app.core.endpoint.uc; import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; import static org.springdoc.core.fn.builders.parameter.Builder.parameterBuilder; diff --git a/application/src/main/java/run/halo/app/endpoint/uc/content/UcSnapshotEndpoint.java b/application/src/main/java/run/halo/app/core/endpoint/uc/UcSnapshotEndpoint.java similarity index 99% rename from application/src/main/java/run/halo/app/endpoint/uc/content/UcSnapshotEndpoint.java rename to application/src/main/java/run/halo/app/core/endpoint/uc/UcSnapshotEndpoint.java index 1f196bc66..f674d84cc 100644 --- a/application/src/main/java/run/halo/app/endpoint/uc/content/UcSnapshotEndpoint.java +++ b/application/src/main/java/run/halo/app/core/endpoint/uc/UcSnapshotEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.endpoint.uc.content; +package run.halo.app.core.endpoint.uc; import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; import static org.springdoc.core.fn.builders.parameter.Builder.parameterBuilder; diff --git a/application/src/main/java/run/halo/app/core/extension/reconciler/AnnotationSettingReconciler.java b/application/src/main/java/run/halo/app/core/reconciler/AnnotationSettingReconciler.java similarity index 97% rename from application/src/main/java/run/halo/app/core/extension/reconciler/AnnotationSettingReconciler.java rename to application/src/main/java/run/halo/app/core/reconciler/AnnotationSettingReconciler.java index 8b6fce832..fb314e260 100644 --- a/application/src/main/java/run/halo/app/core/extension/reconciler/AnnotationSettingReconciler.java +++ b/application/src/main/java/run/halo/app/core/reconciler/AnnotationSettingReconciler.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import java.util.Map; import lombok.AllArgsConstructor; diff --git a/application/src/main/java/run/halo/app/core/extension/reconciler/AuthProviderReconciler.java b/application/src/main/java/run/halo/app/core/reconciler/AuthProviderReconciler.java similarity index 97% rename from application/src/main/java/run/halo/app/core/extension/reconciler/AuthProviderReconciler.java rename to application/src/main/java/run/halo/app/core/reconciler/AuthProviderReconciler.java index 5176f8a3f..b43c2fdaf 100644 --- a/application/src/main/java/run/halo/app/core/extension/reconciler/AuthProviderReconciler.java +++ b/application/src/main/java/run/halo/app/core/reconciler/AuthProviderReconciler.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.BooleanUtils; diff --git a/application/src/main/java/run/halo/app/core/extension/reconciler/CategoryReconciler.java b/application/src/main/java/run/halo/app/core/reconciler/CategoryReconciler.java similarity index 98% rename from application/src/main/java/run/halo/app/core/extension/reconciler/CategoryReconciler.java rename to application/src/main/java/run/halo/app/core/reconciler/CategoryReconciler.java index d4abf4862..a64d462fa 100644 --- a/application/src/main/java/run/halo/app/core/extension/reconciler/CategoryReconciler.java +++ b/application/src/main/java/run/halo/app/core/reconciler/CategoryReconciler.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import static run.halo.app.extension.ExtensionUtil.addFinalizers; import static run.halo.app.extension.ExtensionUtil.removeFinalizers; diff --git a/application/src/main/java/run/halo/app/core/extension/reconciler/CommentReconciler.java b/application/src/main/java/run/halo/app/core/reconciler/CommentReconciler.java similarity index 99% rename from application/src/main/java/run/halo/app/core/extension/reconciler/CommentReconciler.java rename to application/src/main/java/run/halo/app/core/reconciler/CommentReconciler.java index 4e9ce5237..abcca1947 100644 --- a/application/src/main/java/run/halo/app/core/extension/reconciler/CommentReconciler.java +++ b/application/src/main/java/run/halo/app/core/reconciler/CommentReconciler.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import static org.apache.commons.lang3.ObjectUtils.defaultIfNull; import static run.halo.app.extension.ExtensionUtil.addFinalizers; diff --git a/application/src/main/java/run/halo/app/core/extension/reconciler/MenuItemReconciler.java b/application/src/main/java/run/halo/app/core/reconciler/MenuItemReconciler.java similarity index 99% rename from application/src/main/java/run/halo/app/core/extension/reconciler/MenuItemReconciler.java rename to application/src/main/java/run/halo/app/core/reconciler/MenuItemReconciler.java index 9d2768036..ba267bb5f 100644 --- a/application/src/main/java/run/halo/app/core/extension/reconciler/MenuItemReconciler.java +++ b/application/src/main/java/run/halo/app/core/reconciler/MenuItemReconciler.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import java.time.Duration; import java.util.Objects; diff --git a/application/src/main/java/run/halo/app/core/extension/reconciler/PluginReconciler.java b/application/src/main/java/run/halo/app/core/reconciler/PluginReconciler.java similarity index 99% rename from application/src/main/java/run/halo/app/core/extension/reconciler/PluginReconciler.java rename to application/src/main/java/run/halo/app/core/reconciler/PluginReconciler.java index 145c7df77..5a5a2ecd2 100644 --- a/application/src/main/java/run/halo/app/core/extension/reconciler/PluginReconciler.java +++ b/application/src/main/java/run/halo/app/core/reconciler/PluginReconciler.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import static run.halo.app.core.extension.Plugin.PluginStatus.nullSafeConditions; import static run.halo.app.extension.ExtensionUtil.addFinalizers; @@ -44,7 +44,6 @@ import org.springframework.web.util.UriComponentsBuilder; import run.halo.app.core.extension.Plugin; import run.halo.app.core.extension.ReverseProxy; import run.halo.app.core.extension.Setting; -import run.halo.app.core.extension.theme.SettingUtils; import run.halo.app.extension.ConfigMap; import run.halo.app.extension.ExtensionClient; import run.halo.app.extension.ExtensionUtil; @@ -59,6 +58,7 @@ import run.halo.app.infra.Condition; import run.halo.app.infra.ConditionList; import run.halo.app.infra.ConditionStatus; import run.halo.app.infra.utils.PathUtils; +import run.halo.app.infra.utils.SettingUtils; import run.halo.app.infra.utils.YamlUnstructuredLoader; import run.halo.app.plugin.PluginConst; import run.halo.app.plugin.PluginProperties; diff --git a/application/src/main/java/run/halo/app/core/extension/reconciler/PostCounterReconciler.java b/application/src/main/java/run/halo/app/core/reconciler/PostCounterReconciler.java similarity index 97% rename from application/src/main/java/run/halo/app/core/extension/reconciler/PostCounterReconciler.java rename to application/src/main/java/run/halo/app/core/reconciler/PostCounterReconciler.java index a6986a54c..24f8ada28 100644 --- a/application/src/main/java/run/halo/app/core/extension/reconciler/PostCounterReconciler.java +++ b/application/src/main/java/run/halo/app/core/reconciler/PostCounterReconciler.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import static run.halo.app.extension.index.query.QueryFactory.startsWith; diff --git a/application/src/main/java/run/halo/app/core/extension/reconciler/PostReconciler.java b/application/src/main/java/run/halo/app/core/reconciler/PostReconciler.java similarity index 99% rename from application/src/main/java/run/halo/app/core/extension/reconciler/PostReconciler.java rename to application/src/main/java/run/halo/app/core/reconciler/PostReconciler.java index 29d546944..5018b89aa 100644 --- a/application/src/main/java/run/halo/app/core/extension/reconciler/PostReconciler.java +++ b/application/src/main/java/run/halo/app/core/reconciler/PostReconciler.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import static java.nio.charset.StandardCharsets.UTF_8; import static org.apache.commons.lang3.BooleanUtils.TRUE; diff --git a/application/src/main/java/run/halo/app/core/extension/reconciler/ReplyReconciler.java b/application/src/main/java/run/halo/app/core/reconciler/ReplyReconciler.java similarity index 98% rename from application/src/main/java/run/halo/app/core/extension/reconciler/ReplyReconciler.java rename to application/src/main/java/run/halo/app/core/reconciler/ReplyReconciler.java index 3dc0b89c9..9a3886dc9 100644 --- a/application/src/main/java/run/halo/app/core/extension/reconciler/ReplyReconciler.java +++ b/application/src/main/java/run/halo/app/core/reconciler/ReplyReconciler.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import static org.apache.commons.lang3.ObjectUtils.defaultIfNull; import static run.halo.app.extension.ExtensionUtil.addFinalizers; diff --git a/application/src/main/java/run/halo/app/core/extension/reconciler/ReverseProxyReconciler.java b/application/src/main/java/run/halo/app/core/reconciler/ReverseProxyReconciler.java similarity index 98% rename from application/src/main/java/run/halo/app/core/extension/reconciler/ReverseProxyReconciler.java rename to application/src/main/java/run/halo/app/core/reconciler/ReverseProxyReconciler.java index e0a34ca77..7c2620baa 100644 --- a/application/src/main/java/run/halo/app/core/extension/reconciler/ReverseProxyReconciler.java +++ b/application/src/main/java/run/halo/app/core/reconciler/ReverseProxyReconciler.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import java.util.HashSet; import java.util.Map; diff --git a/application/src/main/java/run/halo/app/core/extension/reconciler/RoleReconciler.java b/application/src/main/java/run/halo/app/core/reconciler/RoleReconciler.java similarity index 97% rename from application/src/main/java/run/halo/app/core/extension/reconciler/RoleReconciler.java rename to application/src/main/java/run/halo/app/core/reconciler/RoleReconciler.java index e3d631139..247300464 100644 --- a/application/src/main/java/run/halo/app/core/extension/reconciler/RoleReconciler.java +++ b/application/src/main/java/run/halo/app/core/reconciler/RoleReconciler.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import static java.util.Objects.deepEquals; diff --git a/application/src/main/java/run/halo/app/core/extension/reconciler/SinglePageReconciler.java b/application/src/main/java/run/halo/app/core/reconciler/SinglePageReconciler.java similarity index 99% rename from application/src/main/java/run/halo/app/core/extension/reconciler/SinglePageReconciler.java rename to application/src/main/java/run/halo/app/core/reconciler/SinglePageReconciler.java index b803b6df5..d35a3cef6 100644 --- a/application/src/main/java/run/halo/app/core/extension/reconciler/SinglePageReconciler.java +++ b/application/src/main/java/run/halo/app/core/reconciler/SinglePageReconciler.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import static java.nio.charset.StandardCharsets.UTF_8; import static org.springframework.web.util.UriUtils.encodePath; diff --git a/application/src/main/java/run/halo/app/core/extension/reconciler/SystemSettingReconciler.java b/application/src/main/java/run/halo/app/core/reconciler/SystemSettingReconciler.java similarity index 99% rename from application/src/main/java/run/halo/app/core/extension/reconciler/SystemSettingReconciler.java rename to application/src/main/java/run/halo/app/core/reconciler/SystemSettingReconciler.java index f3f7638fd..ea920d839 100644 --- a/application/src/main/java/run/halo/app/core/extension/reconciler/SystemSettingReconciler.java +++ b/application/src/main/java/run/halo/app/core/reconciler/SystemSettingReconciler.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import java.util.HashMap; import java.util.HashSet; diff --git a/application/src/main/java/run/halo/app/core/extension/reconciler/TagReconciler.java b/application/src/main/java/run/halo/app/core/reconciler/TagReconciler.java similarity index 98% rename from application/src/main/java/run/halo/app/core/extension/reconciler/TagReconciler.java rename to application/src/main/java/run/halo/app/core/reconciler/TagReconciler.java index 1318e6c28..466059790 100644 --- a/application/src/main/java/run/halo/app/core/extension/reconciler/TagReconciler.java +++ b/application/src/main/java/run/halo/app/core/reconciler/TagReconciler.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import static run.halo.app.extension.ExtensionUtil.addFinalizers; import static run.halo.app.extension.ExtensionUtil.removeFinalizers; diff --git a/application/src/main/java/run/halo/app/core/extension/reconciler/ThemeReconciler.java b/application/src/main/java/run/halo/app/core/reconciler/ThemeReconciler.java similarity index 98% rename from application/src/main/java/run/halo/app/core/extension/reconciler/ThemeReconciler.java rename to application/src/main/java/run/halo/app/core/reconciler/ThemeReconciler.java index 0899e0a5e..e0e086b9c 100644 --- a/application/src/main/java/run/halo/app/core/extension/reconciler/ThemeReconciler.java +++ b/application/src/main/java/run/halo/app/core/reconciler/ThemeReconciler.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import static org.apache.commons.lang3.ObjectUtils.defaultIfNull; @@ -17,7 +17,6 @@ import org.springframework.util.FileSystemUtils; import run.halo.app.core.extension.AnnotationSetting; import run.halo.app.core.extension.Setting; import run.halo.app.core.extension.Theme; -import run.halo.app.core.extension.theme.SettingUtils; import run.halo.app.extension.ExtensionClient; import run.halo.app.extension.MetadataUtil; import run.halo.app.extension.controller.Controller; @@ -30,6 +29,7 @@ import run.halo.app.infra.SystemVersionSupplier; import run.halo.app.infra.ThemeRootGetter; import run.halo.app.infra.exception.ThemeUninstallException; import run.halo.app.infra.utils.JsonUtils; +import run.halo.app.infra.utils.SettingUtils; import run.halo.app.infra.utils.VersionUtils; /** diff --git a/application/src/main/java/run/halo/app/core/extension/reconciler/UserReconciler.java b/application/src/main/java/run/halo/app/core/reconciler/UserReconciler.java similarity index 97% rename from application/src/main/java/run/halo/app/core/extension/reconciler/UserReconciler.java rename to application/src/main/java/run/halo/app/core/reconciler/UserReconciler.java index c74d087b1..397b89afd 100644 --- a/application/src/main/java/run/halo/app/core/extension/reconciler/UserReconciler.java +++ b/application/src/main/java/run/halo/app/core/reconciler/UserReconciler.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import static run.halo.app.extension.ExtensionUtil.addFinalizers; import static run.halo.app.extension.ExtensionUtil.defaultSort; @@ -23,8 +23,8 @@ import run.halo.app.core.extension.User; import run.halo.app.core.extension.UserConnection; import run.halo.app.core.extension.attachment.Attachment; import run.halo.app.core.extension.service.AttachmentService; -import run.halo.app.core.extension.service.RoleService; -import run.halo.app.core.extension.service.UserService; +import run.halo.app.core.user.service.RoleService; +import run.halo.app.core.user.service.UserService; import run.halo.app.extension.ExtensionClient; import run.halo.app.extension.ListOptions; import run.halo.app.extension.controller.Controller; diff --git a/application/src/main/java/run/halo/app/core/extension/service/DefaultRoleService.java b/application/src/main/java/run/halo/app/core/user/service/DefaultRoleService.java similarity index 99% rename from application/src/main/java/run/halo/app/core/extension/service/DefaultRoleService.java rename to application/src/main/java/run/halo/app/core/user/service/DefaultRoleService.java index b02954113..0ac6672d3 100644 --- a/application/src/main/java/run/halo/app/core/extension/service/DefaultRoleService.java +++ b/application/src/main/java/run/halo/app/core/user/service/DefaultRoleService.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.service; +package run.halo.app.core.user.service; import static run.halo.app.extension.ExtensionUtil.defaultSort; import static run.halo.app.extension.ExtensionUtil.notDeleting; diff --git a/application/src/main/java/run/halo/app/core/extension/service/EmailPasswordRecoveryService.java b/application/src/main/java/run/halo/app/core/user/service/EmailPasswordRecoveryService.java similarity index 96% rename from application/src/main/java/run/halo/app/core/extension/service/EmailPasswordRecoveryService.java rename to application/src/main/java/run/halo/app/core/user/service/EmailPasswordRecoveryService.java index 3e1a97723..a586589f0 100644 --- a/application/src/main/java/run/halo/app/core/extension/service/EmailPasswordRecoveryService.java +++ b/application/src/main/java/run/halo/app/core/user/service/EmailPasswordRecoveryService.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.service; +package run.halo.app.core.user.service; import reactor.core.publisher.Mono; import run.halo.app.infra.exception.AccessDeniedException; diff --git a/application/src/main/java/run/halo/app/core/extension/service/EmailVerificationService.java b/application/src/main/java/run/halo/app/core/user/service/EmailVerificationService.java similarity index 96% rename from application/src/main/java/run/halo/app/core/extension/service/EmailVerificationService.java rename to application/src/main/java/run/halo/app/core/user/service/EmailVerificationService.java index 762f92afe..f2c233688 100644 --- a/application/src/main/java/run/halo/app/core/extension/service/EmailVerificationService.java +++ b/application/src/main/java/run/halo/app/core/user/service/EmailVerificationService.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.service; +package run.halo.app.core.user.service; import reactor.core.publisher.Mono; import run.halo.app.infra.exception.EmailVerificationFailed; diff --git a/application/src/main/java/run/halo/app/core/extension/service/RoleService.java b/application/src/main/java/run/halo/app/core/user/service/RoleService.java similarity index 96% rename from application/src/main/java/run/halo/app/core/extension/service/RoleService.java rename to application/src/main/java/run/halo/app/core/user/service/RoleService.java index d22beff91..b6d108047 100644 --- a/application/src/main/java/run/halo/app/core/extension/service/RoleService.java +++ b/application/src/main/java/run/halo/app/core/user/service/RoleService.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.service; +package run.halo.app.core.user.service; import java.util.Collection; import java.util.Map; diff --git a/application/src/main/java/run/halo/app/core/extension/service/UserService.java b/application/src/main/java/run/halo/app/core/user/service/UserService.java similarity index 94% rename from application/src/main/java/run/halo/app/core/extension/service/UserService.java rename to application/src/main/java/run/halo/app/core/user/service/UserService.java index f252d1536..5a2b8135a 100644 --- a/application/src/main/java/run/halo/app/core/extension/service/UserService.java +++ b/application/src/main/java/run/halo/app/core/user/service/UserService.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.service; +package run.halo.app.core.user.service; import java.util.Set; import reactor.core.publisher.Flux; diff --git a/application/src/main/java/run/halo/app/core/extension/service/UserServiceImpl.java b/application/src/main/java/run/halo/app/core/user/service/UserServiceImpl.java similarity index 99% rename from application/src/main/java/run/halo/app/core/extension/service/UserServiceImpl.java rename to application/src/main/java/run/halo/app/core/user/service/UserServiceImpl.java index 5d9f85fcd..9290b3ec4 100644 --- a/application/src/main/java/run/halo/app/core/extension/service/UserServiceImpl.java +++ b/application/src/main/java/run/halo/app/core/user/service/UserServiceImpl.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.service; +package run.halo.app.core.user.service; import static org.springframework.data.domain.Sort.Order.asc; import static org.springframework.data.domain.Sort.Order.desc; diff --git a/application/src/main/java/run/halo/app/core/extension/service/impl/DefaultAttachmentService.java b/application/src/main/java/run/halo/app/core/user/service/impl/DefaultAttachmentService.java similarity index 99% rename from application/src/main/java/run/halo/app/core/extension/service/impl/DefaultAttachmentService.java rename to application/src/main/java/run/halo/app/core/user/service/impl/DefaultAttachmentService.java index 50486eb2c..525ed17e7 100644 --- a/application/src/main/java/run/halo/app/core/extension/service/impl/DefaultAttachmentService.java +++ b/application/src/main/java/run/halo/app/core/user/service/impl/DefaultAttachmentService.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.service.impl; +package run.halo.app.core.user.service.impl; import java.net.URI; import java.net.URL; diff --git a/application/src/main/java/run/halo/app/core/extension/service/impl/EmailPasswordRecoveryServiceImpl.java b/application/src/main/java/run/halo/app/core/user/service/impl/EmailPasswordRecoveryServiceImpl.java similarity index 97% rename from application/src/main/java/run/halo/app/core/extension/service/impl/EmailPasswordRecoveryServiceImpl.java rename to application/src/main/java/run/halo/app/core/user/service/impl/EmailPasswordRecoveryServiceImpl.java index 4fbe8c859..ac66225ee 100644 --- a/application/src/main/java/run/halo/app/core/extension/service/impl/EmailPasswordRecoveryServiceImpl.java +++ b/application/src/main/java/run/halo/app/core/user/service/impl/EmailPasswordRecoveryServiceImpl.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.service.impl; +package run.halo.app.core.user.service.impl; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; @@ -18,8 +18,8 @@ import reactor.util.retry.Retry; import run.halo.app.core.extension.User; import run.halo.app.core.extension.notification.Reason; import run.halo.app.core.extension.notification.Subscription; -import run.halo.app.core.extension.service.EmailPasswordRecoveryService; -import run.halo.app.core.extension.service.UserService; +import run.halo.app.core.user.service.EmailPasswordRecoveryService; +import run.halo.app.core.user.service.UserService; import run.halo.app.extension.GroupVersion; import run.halo.app.extension.ReactiveExtensionClient; import run.halo.app.infra.ExternalLinkProcessor; diff --git a/application/src/main/java/run/halo/app/core/extension/service/impl/EmailVerificationServiceImpl.java b/application/src/main/java/run/halo/app/core/user/service/impl/EmailVerificationServiceImpl.java similarity index 98% rename from application/src/main/java/run/halo/app/core/extension/service/impl/EmailVerificationServiceImpl.java rename to application/src/main/java/run/halo/app/core/user/service/impl/EmailVerificationServiceImpl.java index 857b4647c..b362a96c8 100644 --- a/application/src/main/java/run/halo/app/core/extension/service/impl/EmailVerificationServiceImpl.java +++ b/application/src/main/java/run/halo/app/core/user/service/impl/EmailVerificationServiceImpl.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.service.impl; +package run.halo.app.core.user.service.impl; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; @@ -19,8 +19,8 @@ import reactor.util.retry.Retry; import run.halo.app.core.extension.User; import run.halo.app.core.extension.notification.Reason; import run.halo.app.core.extension.notification.Subscription; -import run.halo.app.core.extension.service.EmailVerificationService; -import run.halo.app.core.extension.service.UserService; +import run.halo.app.core.user.service.EmailVerificationService; +import run.halo.app.core.user.service.UserService; import run.halo.app.extension.GroupVersion; import run.halo.app.extension.MetadataUtil; import run.halo.app.extension.ReactiveExtensionClient; diff --git a/application/src/main/java/run/halo/app/infra/DefaultThemeInitializer.java b/application/src/main/java/run/halo/app/infra/DefaultThemeInitializer.java index b18692366..31af2d0a0 100644 --- a/application/src/main/java/run/halo/app/infra/DefaultThemeInitializer.java +++ b/application/src/main/java/run/halo/app/infra/DefaultThemeInitializer.java @@ -10,10 +10,10 @@ import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.stereotype.Component; import org.springframework.util.ResourceUtils; import org.springframework.util.StreamUtils; -import run.halo.app.core.extension.theme.ThemeService; import run.halo.app.infra.properties.HaloProperties; import run.halo.app.infra.properties.ThemeProperties; import run.halo.app.infra.utils.FileUtils; +import run.halo.app.theme.service.ThemeService; @Slf4j @Component @@ -44,7 +44,7 @@ public class DefaultThemeInitializer implements ApplicationListener listAllThemesFromThemeDir(Path themesDir) { + public static Flux listAllThemesFromThemeDir(Path themesDir) { return walkThemesFromPath(themesDir) .filter(Files::isDirectory) .map(ThemeUtils::findThemeManifest) diff --git a/application/src/test/java/run/halo/app/config/ExtensionConfigurationTest.java b/application/src/test/java/run/halo/app/config/ExtensionConfigurationTest.java index ee0ad619e..9cc8a8140 100644 --- a/application/src/test/java/run/halo/app/config/ExtensionConfigurationTest.java +++ b/application/src/test/java/run/halo/app/config/ExtensionConfigurationTest.java @@ -26,7 +26,7 @@ import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.web.reactive.server.WebTestClient; import reactor.core.publisher.Flux; import run.halo.app.core.extension.Role; -import run.halo.app.core.extension.service.RoleService; +import run.halo.app.core.user.service.RoleService; import run.halo.app.extension.ExtensionClient; import run.halo.app.extension.FakeExtension; import run.halo.app.extension.GroupVersionKind; diff --git a/application/src/test/java/run/halo/app/config/WebFluxConfigTest.java b/application/src/test/java/run/halo/app/config/WebFluxConfigTest.java index e60e2870c..70f2db955 100644 --- a/application/src/test/java/run/halo/app/config/WebFluxConfigTest.java +++ b/application/src/test/java/run/halo/app/config/WebFluxConfigTest.java @@ -25,7 +25,7 @@ import reactor.core.publisher.Flux; import reactor.test.StepVerifier; import run.halo.app.core.endpoint.WebSocketEndpoint; import run.halo.app.core.extension.Role; -import run.halo.app.core.extension.service.RoleService; +import run.halo.app.core.user.service.RoleService; import run.halo.app.extension.GroupVersion; import run.halo.app.extension.Metadata; diff --git a/application/src/test/java/run/halo/app/console/WebSocketServerWebExchangeMatcherTest.java b/application/src/test/java/run/halo/app/console/WebSocketServerWebExchangeMatcherTest.java index cf2944bc2..11c40030c 100644 --- a/application/src/test/java/run/halo/app/console/WebSocketServerWebExchangeMatcherTest.java +++ b/application/src/test/java/run/halo/app/console/WebSocketServerWebExchangeMatcherTest.java @@ -8,6 +8,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.mock.http.server.reactive.MockServerHttpRequest; import org.springframework.mock.web.server.MockServerWebExchange; import reactor.test.StepVerifier; +import run.halo.app.infra.console.WebSocketServerWebExchangeMatcher; class WebSocketServerWebExchangeMatcherTest { diff --git a/application/src/test/java/run/halo/app/console/WebSocketUtilsTest.java b/application/src/test/java/run/halo/app/console/WebSocketUtilsTest.java index aac0fd1bc..225a6e91f 100644 --- a/application/src/test/java/run/halo/app/console/WebSocketUtilsTest.java +++ b/application/src/test/java/run/halo/app/console/WebSocketUtilsTest.java @@ -6,6 +6,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.springframework.http.HttpHeaders; +import run.halo.app.infra.console.WebSocketUtils; class WebSocketUtilsTest { diff --git a/application/src/test/java/run/halo/app/content/PostIntegrationTests.java b/application/src/test/java/run/halo/app/content/PostIntegrationTests.java index 629f3bbf9..6eb47e1c4 100644 --- a/application/src/test/java/run/halo/app/content/PostIntegrationTests.java +++ b/application/src/test/java/run/halo/app/content/PostIntegrationTests.java @@ -19,7 +19,7 @@ import org.springframework.test.web.reactive.server.WebTestClient; import reactor.core.publisher.Flux; import run.halo.app.core.extension.Role; import run.halo.app.core.extension.content.Post; -import run.halo.app.core.extension.service.RoleService; +import run.halo.app.core.user.service.RoleService; import run.halo.app.extension.Metadata; import run.halo.app.extension.MetadataOperator; import run.halo.app.infra.utils.JsonUtils; diff --git a/application/src/test/java/run/halo/app/content/comment/CommentServiceImplTest.java b/application/src/test/java/run/halo/app/content/comment/CommentServiceImplTest.java index ac23f1e13..3e706594d 100644 --- a/application/src/test/java/run/halo/app/content/comment/CommentServiceImplTest.java +++ b/application/src/test/java/run/halo/app/content/comment/CommentServiceImplTest.java @@ -35,8 +35,8 @@ import run.halo.app.core.extension.Counter; import run.halo.app.core.extension.User; import run.halo.app.core.extension.content.Comment; import run.halo.app.core.extension.content.Post; -import run.halo.app.core.extension.service.RoleService; -import run.halo.app.core.extension.service.UserService; +import run.halo.app.core.user.service.RoleService; +import run.halo.app.core.user.service.UserService; import run.halo.app.extension.ListOptions; import run.halo.app.extension.ListResult; import run.halo.app.extension.Metadata; diff --git a/application/src/test/java/run/halo/app/core/attachment/impl/LocalThumbnailServiceImplTest.java b/application/src/test/java/run/halo/app/core/attachment/impl/LocalThumbnailServiceImplTest.java index 6643d3837..54d3d2c43 100644 --- a/application/src/test/java/run/halo/app/core/attachment/impl/LocalThumbnailServiceImplTest.java +++ b/application/src/test/java/run/halo/app/core/attachment/impl/LocalThumbnailServiceImplTest.java @@ -24,7 +24,7 @@ import reactor.core.publisher.Mono; import reactor.test.StepVerifier; import run.halo.app.core.attachment.AttachmentRootGetter; import run.halo.app.core.attachment.ThumbnailSize; -import run.halo.app.core.extension.attachment.LocalThumbnail; +import run.halo.app.core.attachment.extension.LocalThumbnail; import run.halo.app.extension.ListResult; import run.halo.app.extension.PageRequest; import run.halo.app.extension.ReactiveExtensionClient; diff --git a/application/src/test/java/run/halo/app/core/attachment/impl/ThumbnailServiceImplTest.java b/application/src/test/java/run/halo/app/core/attachment/impl/ThumbnailServiceImplTest.java index 7a22f73d4..5461fc874 100644 --- a/application/src/test/java/run/halo/app/core/attachment/impl/ThumbnailServiceImplTest.java +++ b/application/src/test/java/run/halo/app/core/attachment/impl/ThumbnailServiceImplTest.java @@ -29,7 +29,7 @@ import run.halo.app.core.attachment.LocalThumbnailService; import run.halo.app.core.attachment.ThumbnailProvider; import run.halo.app.core.attachment.ThumbnailSigner; import run.halo.app.core.attachment.ThumbnailSize; -import run.halo.app.core.extension.attachment.Thumbnail; +import run.halo.app.core.attachment.extension.Thumbnail; import run.halo.app.extension.ListOptions; import run.halo.app.extension.PageRequest; import run.halo.app.extension.ReactiveExtensionClient; diff --git a/application/src/test/java/run/halo/app/core/extension/endpoint/EmailVerificationCodeTest.java b/application/src/test/java/run/halo/app/core/endpoint/console/EmailVerificationCodeTest.java similarity index 96% rename from application/src/test/java/run/halo/app/core/extension/endpoint/EmailVerificationCodeTest.java rename to application/src/test/java/run/halo/app/core/endpoint/console/EmailVerificationCodeTest.java index ee3838c10..683e6552c 100644 --- a/application/src/test/java/run/halo/app/core/extension/endpoint/EmailVerificationCodeTest.java +++ b/application/src/test/java/run/halo/app/core/endpoint/console/EmailVerificationCodeTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.endpoint; +package run.halo.app.core.endpoint.console; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; @@ -23,8 +23,8 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.web.reactive.server.WebTestClient; import reactor.core.publisher.Mono; import run.halo.app.core.extension.User; -import run.halo.app.core.extension.service.EmailVerificationService; -import run.halo.app.core.extension.service.UserService; +import run.halo.app.core.user.service.EmailVerificationService; +import run.halo.app.core.user.service.UserService; import run.halo.app.extension.Metadata; import run.halo.app.extension.ReactiveExtensionClient; diff --git a/application/src/test/java/run/halo/app/core/extension/endpoint/PluginEndpointTest.java b/application/src/test/java/run/halo/app/core/endpoint/console/PluginEndpointTest.java similarity index 99% rename from application/src/test/java/run/halo/app/core/extension/endpoint/PluginEndpointTest.java rename to application/src/test/java/run/halo/app/core/endpoint/console/PluginEndpointTest.java index 2ff443606..7d931cba6 100644 --- a/application/src/test/java/run/halo/app/core/extension/endpoint/PluginEndpointTest.java +++ b/application/src/test/java/run/halo/app/core/endpoint/console/PluginEndpointTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.endpoint; +package run.halo.app.core.endpoint.console; import static java.util.Objects.requireNonNull; import static org.mockito.ArgumentMatchers.any; @@ -44,7 +44,6 @@ import org.springframework.web.server.ServerWebInputException; import reactor.core.publisher.Mono; import run.halo.app.core.extension.Plugin; import run.halo.app.core.extension.Setting; -import run.halo.app.core.extension.service.PluginService; import run.halo.app.extension.ConfigMap; import run.halo.app.extension.ListOptions; import run.halo.app.extension.ListResult; @@ -53,6 +52,7 @@ import run.halo.app.extension.PageRequest; import run.halo.app.extension.ReactiveExtensionClient; import run.halo.app.infra.SystemVersionSupplier; import run.halo.app.infra.utils.FileUtils; +import run.halo.app.plugin.PluginService; @Slf4j @ExtendWith(MockitoExtension.class) diff --git a/application/src/test/java/run/halo/app/core/extension/endpoint/PostEndpointTest.java b/application/src/test/java/run/halo/app/core/endpoint/console/PostEndpointTest.java similarity index 99% rename from application/src/test/java/run/halo/app/core/extension/endpoint/PostEndpointTest.java rename to application/src/test/java/run/halo/app/core/endpoint/console/PostEndpointTest.java index 7933535bd..0d4754962 100644 --- a/application/src/test/java/run/halo/app/core/extension/endpoint/PostEndpointTest.java +++ b/application/src/test/java/run/halo/app/core/endpoint/console/PostEndpointTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.endpoint; +package run.halo.app.core.endpoint.console; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; diff --git a/application/src/test/java/run/halo/app/core/extension/endpoint/SinglePageEndpointTest.java b/application/src/test/java/run/halo/app/core/endpoint/console/SinglePageEndpointTest.java similarity index 98% rename from application/src/test/java/run/halo/app/core/extension/endpoint/SinglePageEndpointTest.java rename to application/src/test/java/run/halo/app/core/endpoint/console/SinglePageEndpointTest.java index 9e3fcd873..cb911c4c2 100644 --- a/application/src/test/java/run/halo/app/core/extension/endpoint/SinglePageEndpointTest.java +++ b/application/src/test/java/run/halo/app/core/endpoint/console/SinglePageEndpointTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.endpoint; +package run.halo.app.core.endpoint.console; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; diff --git a/application/src/test/java/run/halo/app/core/extension/endpoint/SystemInitializationEndpointTest.java b/application/src/test/java/run/halo/app/core/endpoint/console/SystemInitializationEndpointTest.java similarity index 95% rename from application/src/test/java/run/halo/app/core/extension/endpoint/SystemInitializationEndpointTest.java rename to application/src/test/java/run/halo/app/core/endpoint/console/SystemInitializationEndpointTest.java index 82cf8a24d..cd2238e86 100644 --- a/application/src/test/java/run/halo/app/core/extension/endpoint/SystemInitializationEndpointTest.java +++ b/application/src/test/java/run/halo/app/core/endpoint/console/SystemInitializationEndpointTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.endpoint; +package run.halo.app.core.endpoint.console; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.verify; @@ -13,7 +13,7 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.test.web.reactive.server.WebTestClient; import reactor.core.publisher.Mono; -import run.halo.app.core.extension.endpoint.SystemInitializationEndpoint.SystemInitializationRequest; +import run.halo.app.core.endpoint.console.SystemInitializationEndpoint.SystemInitializationRequest; import run.halo.app.extension.ConfigMap; import run.halo.app.extension.ReactiveExtensionClient; import run.halo.app.infra.InitializationStateGetter; diff --git a/application/src/test/java/run/halo/app/core/extension/endpoint/TagEndpointTest.java b/application/src/test/java/run/halo/app/core/endpoint/console/TagEndpointTest.java similarity index 98% rename from application/src/test/java/run/halo/app/core/extension/endpoint/TagEndpointTest.java rename to application/src/test/java/run/halo/app/core/endpoint/console/TagEndpointTest.java index 1eb32141d..c1e08dbe5 100644 --- a/application/src/test/java/run/halo/app/core/extension/endpoint/TagEndpointTest.java +++ b/application/src/test/java/run/halo/app/core/endpoint/console/TagEndpointTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.endpoint; +package run.halo.app.core.endpoint.console; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.same; diff --git a/application/src/test/java/run/halo/app/core/extension/endpoint/UserEndpointIntegrationTest.java b/application/src/test/java/run/halo/app/core/endpoint/console/UserEndpointIntegrationTest.java similarity index 97% rename from application/src/test/java/run/halo/app/core/extension/endpoint/UserEndpointIntegrationTest.java rename to application/src/test/java/run/halo/app/core/endpoint/console/UserEndpointIntegrationTest.java index b83f2f6db..29cfae324 100644 --- a/application/src/test/java/run/halo/app/core/extension/endpoint/UserEndpointIntegrationTest.java +++ b/application/src/test/java/run/halo/app/core/endpoint/console/UserEndpointIntegrationTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.endpoint; +package run.halo.app.core.endpoint.console; import static org.mockito.ArgumentMatchers.anySet; import static org.mockito.Mockito.when; @@ -22,7 +22,7 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import run.halo.app.core.extension.Role; import run.halo.app.core.extension.User; -import run.halo.app.core.extension.service.RoleService; +import run.halo.app.core.user.service.RoleService; import run.halo.app.extension.Metadata; import run.halo.app.extension.ReactiveExtensionClient; diff --git a/application/src/test/java/run/halo/app/core/extension/endpoint/UserEndpointTest.java b/application/src/test/java/run/halo/app/core/endpoint/console/UserEndpointTest.java similarity index 99% rename from application/src/test/java/run/halo/app/core/extension/endpoint/UserEndpointTest.java rename to application/src/test/java/run/halo/app/core/endpoint/console/UserEndpointTest.java index 655c9370c..b76226258 100644 --- a/application/src/test/java/run/halo/app/core/extension/endpoint/UserEndpointTest.java +++ b/application/src/test/java/run/halo/app/core/endpoint/console/UserEndpointTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.endpoint; +package run.halo.app.core.endpoint.console; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; @@ -37,8 +37,8 @@ import run.halo.app.core.extension.Role; import run.halo.app.core.extension.User; import run.halo.app.core.extension.attachment.Attachment; import run.halo.app.core.extension.service.AttachmentService; -import run.halo.app.core.extension.service.RoleService; -import run.halo.app.core.extension.service.UserService; +import run.halo.app.core.user.service.RoleService; +import run.halo.app.core.user.service.UserService; import run.halo.app.extension.ListResult; import run.halo.app.extension.Metadata; import run.halo.app.extension.PageRequest; diff --git a/application/src/test/java/run/halo/app/theme/endpoint/CategoryQueryEndpointTest.java b/application/src/test/java/run/halo/app/core/endpoint/theme/CategoryQueryEndpointTest.java similarity index 98% rename from application/src/test/java/run/halo/app/theme/endpoint/CategoryQueryEndpointTest.java rename to application/src/test/java/run/halo/app/core/endpoint/theme/CategoryQueryEndpointTest.java index 9ba60c664..2f19d170e 100644 --- a/application/src/test/java/run/halo/app/theme/endpoint/CategoryQueryEndpointTest.java +++ b/application/src/test/java/run/halo/app/core/endpoint/theme/CategoryQueryEndpointTest.java @@ -1,4 +1,4 @@ -package run.halo.app.theme.endpoint; +package run.halo.app.core.endpoint.theme; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; diff --git a/application/src/test/java/run/halo/app/theme/endpoint/CommentFinderEndpointTest.java b/application/src/test/java/run/halo/app/core/endpoint/theme/CommentFinderEndpointTest.java similarity index 99% rename from application/src/test/java/run/halo/app/theme/endpoint/CommentFinderEndpointTest.java rename to application/src/test/java/run/halo/app/core/endpoint/theme/CommentFinderEndpointTest.java index 997b4d3c8..80f1bc01d 100644 --- a/application/src/test/java/run/halo/app/theme/endpoint/CommentFinderEndpointTest.java +++ b/application/src/test/java/run/halo/app/core/endpoint/theme/CommentFinderEndpointTest.java @@ -1,4 +1,4 @@ -package run.halo.app.theme.endpoint; +package run.halo.app.core.endpoint.theme; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; diff --git a/application/src/test/java/run/halo/app/theme/endpoint/MenuQueryEndpointTest.java b/application/src/test/java/run/halo/app/core/endpoint/theme/MenuQueryEndpointTest.java similarity index 98% rename from application/src/test/java/run/halo/app/theme/endpoint/MenuQueryEndpointTest.java rename to application/src/test/java/run/halo/app/core/endpoint/theme/MenuQueryEndpointTest.java index a6dbb503a..27e1c8e5d 100644 --- a/application/src/test/java/run/halo/app/theme/endpoint/MenuQueryEndpointTest.java +++ b/application/src/test/java/run/halo/app/core/endpoint/theme/MenuQueryEndpointTest.java @@ -1,4 +1,4 @@ -package run.halo.app.theme.endpoint; +package run.halo.app.core.endpoint.theme; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.eq; diff --git a/application/src/test/java/run/halo/app/theme/endpoint/PluginQueryEndpointTest.java b/application/src/test/java/run/halo/app/core/endpoint/theme/PluginQueryEndpointTest.java similarity index 97% rename from application/src/test/java/run/halo/app/theme/endpoint/PluginQueryEndpointTest.java rename to application/src/test/java/run/halo/app/core/endpoint/theme/PluginQueryEndpointTest.java index 739b92ca9..4b60a6091 100644 --- a/application/src/test/java/run/halo/app/theme/endpoint/PluginQueryEndpointTest.java +++ b/application/src/test/java/run/halo/app/core/endpoint/theme/PluginQueryEndpointTest.java @@ -1,4 +1,4 @@ -package run.halo.app.theme.endpoint; +package run.halo.app.core.endpoint.theme; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; diff --git a/application/src/test/java/run/halo/app/theme/endpoint/PostQueryEndpointTest.java b/application/src/test/java/run/halo/app/core/endpoint/theme/PostQueryEndpointTest.java similarity index 98% rename from application/src/test/java/run/halo/app/theme/endpoint/PostQueryEndpointTest.java rename to application/src/test/java/run/halo/app/core/endpoint/theme/PostQueryEndpointTest.java index f39f1396b..94a984f46 100644 --- a/application/src/test/java/run/halo/app/theme/endpoint/PostQueryEndpointTest.java +++ b/application/src/test/java/run/halo/app/core/endpoint/theme/PostQueryEndpointTest.java @@ -1,4 +1,4 @@ -package run.halo.app.theme.endpoint; +package run.halo.app.core.endpoint.theme; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; diff --git a/application/src/test/java/run/halo/app/theme/endpoint/PublicApiUtilsTest.java b/application/src/test/java/run/halo/app/core/endpoint/theme/PublicApiUtilsTest.java similarity index 97% rename from application/src/test/java/run/halo/app/theme/endpoint/PublicApiUtilsTest.java rename to application/src/test/java/run/halo/app/core/endpoint/theme/PublicApiUtilsTest.java index 56979ed7d..f7b32b72e 100644 --- a/application/src/test/java/run/halo/app/theme/endpoint/PublicApiUtilsTest.java +++ b/application/src/test/java/run/halo/app/core/endpoint/theme/PublicApiUtilsTest.java @@ -1,4 +1,4 @@ -package run.halo.app.theme.endpoint; +package run.halo.app.core.endpoint.theme; import static org.assertj.core.api.Assertions.assertThat; diff --git a/application/src/test/java/run/halo/app/theme/endpoint/PublicUserEndpointTest.java b/application/src/test/java/run/halo/app/core/endpoint/theme/PublicUserEndpointTest.java similarity index 97% rename from application/src/test/java/run/halo/app/theme/endpoint/PublicUserEndpointTest.java rename to application/src/test/java/run/halo/app/core/endpoint/theme/PublicUserEndpointTest.java index 8acdefcc0..b37a20da9 100644 --- a/application/src/test/java/run/halo/app/theme/endpoint/PublicUserEndpointTest.java +++ b/application/src/test/java/run/halo/app/core/endpoint/theme/PublicUserEndpointTest.java @@ -1,4 +1,4 @@ -package run.halo.app.theme.endpoint; +package run.halo.app.core.endpoint.theme; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; @@ -20,7 +20,7 @@ import org.springframework.security.web.server.context.ServerSecurityContextRepo import org.springframework.test.web.reactive.server.WebTestClient; import reactor.core.publisher.Mono; import run.halo.app.core.extension.User; -import run.halo.app.core.extension.service.UserService; +import run.halo.app.core.user.service.UserService; import run.halo.app.extension.Metadata; import run.halo.app.infra.SystemConfigurableEnvironmentFetcher; import run.halo.app.infra.SystemSetting; diff --git a/application/src/test/java/run/halo/app/theme/endpoint/SinglePageQueryEndpointTest.java b/application/src/test/java/run/halo/app/core/endpoint/theme/SinglePageQueryEndpointTest.java similarity index 98% rename from application/src/test/java/run/halo/app/theme/endpoint/SinglePageQueryEndpointTest.java rename to application/src/test/java/run/halo/app/core/endpoint/theme/SinglePageQueryEndpointTest.java index 4b56b1165..83ebb9ebf 100644 --- a/application/src/test/java/run/halo/app/theme/endpoint/SinglePageQueryEndpointTest.java +++ b/application/src/test/java/run/halo/app/core/endpoint/theme/SinglePageQueryEndpointTest.java @@ -1,4 +1,4 @@ -package run.halo.app.theme.endpoint; +package run.halo.app.core.endpoint.theme; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.eq; diff --git a/application/src/test/java/run/halo/app/theme/endpoint/ThumbnailEndpointTest.java b/application/src/test/java/run/halo/app/core/endpoint/theme/ThumbnailEndpointTest.java similarity index 97% rename from application/src/test/java/run/halo/app/theme/endpoint/ThumbnailEndpointTest.java rename to application/src/test/java/run/halo/app/core/endpoint/theme/ThumbnailEndpointTest.java index 18f3414e8..6d02dac6c 100644 --- a/application/src/test/java/run/halo/app/theme/endpoint/ThumbnailEndpointTest.java +++ b/application/src/test/java/run/halo/app/core/endpoint/theme/ThumbnailEndpointTest.java @@ -1,4 +1,4 @@ -package run.halo.app.theme.endpoint; +package run.halo.app.core.endpoint.theme; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; diff --git a/application/src/test/java/run/halo/app/core/extension/attachment/endpoint/AttachmentEndpointTest.java b/application/src/test/java/run/halo/app/core/extension/attachment/endpoint/AttachmentEndpointTest.java index 6e95e5e79..fb0a1ba56 100644 --- a/application/src/test/java/run/halo/app/core/extension/attachment/endpoint/AttachmentEndpointTest.java +++ b/application/src/test/java/run/halo/app/core/extension/attachment/endpoint/AttachmentEndpointTest.java @@ -28,11 +28,12 @@ import org.springframework.test.web.reactive.server.WebTestClient; import org.springframework.web.reactive.function.BodyInserters; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; +import run.halo.app.core.attachment.endpoint.AttachmentEndpoint; import run.halo.app.core.extension.attachment.Attachment; import run.halo.app.core.extension.attachment.Group; import run.halo.app.core.extension.attachment.Policy; import run.halo.app.core.extension.attachment.Policy.PolicySpec; -import run.halo.app.core.extension.service.impl.DefaultAttachmentService; +import run.halo.app.core.user.service.impl.DefaultAttachmentService; import run.halo.app.extension.ConfigMap; import run.halo.app.extension.ListResult; import run.halo.app.extension.Metadata; diff --git a/application/src/test/java/run/halo/app/core/extension/reconciler/CommentReconcilerTest.java b/application/src/test/java/run/halo/app/core/reconciler/CommentReconcilerTest.java similarity index 97% rename from application/src/test/java/run/halo/app/core/extension/reconciler/CommentReconcilerTest.java rename to application/src/test/java/run/halo/app/core/reconciler/CommentReconcilerTest.java index 1f6af9ec0..3a1e0bd60 100644 --- a/application/src/test/java/run/halo/app/core/extension/reconciler/CommentReconcilerTest.java +++ b/application/src/test/java/run/halo/app/core/reconciler/CommentReconcilerTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; @@ -21,6 +21,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import reactor.core.publisher.Mono; import run.halo.app.content.comment.ReplyService; import run.halo.app.core.extension.content.Comment; +import run.halo.app.core.reconciler.CommentReconciler; import run.halo.app.extension.ExtensionClient; import run.halo.app.extension.ListOptions; import run.halo.app.extension.ListResult; diff --git a/application/src/test/java/run/halo/app/core/extension/reconciler/MenuItemReconcilerTest.java b/application/src/test/java/run/halo/app/core/reconciler/MenuItemReconcilerTest.java similarity index 98% rename from application/src/test/java/run/halo/app/core/extension/reconciler/MenuItemReconcilerTest.java rename to application/src/test/java/run/halo/app/core/reconciler/MenuItemReconcilerTest.java index aec199326..ece57b13a 100644 --- a/application/src/test/java/run/halo/app/core/extension/reconciler/MenuItemReconcilerTest.java +++ b/application/src/test/java/run/halo/app/core/reconciler/MenuItemReconcilerTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -24,6 +24,7 @@ import run.halo.app.core.extension.MenuItem; import run.halo.app.core.extension.MenuItem.MenuItemSpec; import run.halo.app.core.extension.content.Category; import run.halo.app.core.extension.content.SinglePage; +import run.halo.app.core.reconciler.MenuItemReconciler; import run.halo.app.extension.ExtensionClient; import run.halo.app.extension.Metadata; import run.halo.app.extension.Ref; diff --git a/application/src/test/java/run/halo/app/core/extension/reconciler/PluginReconcilerTest.java b/application/src/test/java/run/halo/app/core/reconciler/PluginReconcilerTest.java similarity index 99% rename from application/src/test/java/run/halo/app/core/extension/reconciler/PluginReconcilerTest.java rename to application/src/test/java/run/halo/app/core/reconciler/PluginReconcilerTest.java index 92652fb54..a22492cfc 100644 --- a/application/src/test/java/run/halo/app/core/extension/reconciler/PluginReconcilerTest.java +++ b/application/src/test/java/run/halo/app/core/reconciler/PluginReconcilerTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -48,6 +48,7 @@ import org.springframework.core.io.DefaultResourceLoader; import run.halo.app.core.extension.Plugin; import run.halo.app.core.extension.ReverseProxy; import run.halo.app.core.extension.Setting; +import run.halo.app.core.reconciler.PluginReconciler; import run.halo.app.extension.ConfigMap; import run.halo.app.extension.ExtensionClient; import run.halo.app.extension.Metadata; diff --git a/application/src/test/java/run/halo/app/core/extension/reconciler/PostReconcilerTest.java b/application/src/test/java/run/halo/app/core/reconciler/PostReconcilerTest.java similarity index 99% rename from application/src/test/java/run/halo/app/core/extension/reconciler/PostReconcilerTest.java rename to application/src/test/java/run/halo/app/core/reconciler/PostReconcilerTest.java index b70152353..3dd75e516 100644 --- a/application/src/test/java/run/halo/app/core/extension/reconciler/PostReconcilerTest.java +++ b/application/src/test/java/run/halo/app/core/reconciler/PostReconcilerTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; @@ -33,6 +33,7 @@ import run.halo.app.content.permalinks.PostPermalinkPolicy; import run.halo.app.core.extension.content.Post; import run.halo.app.core.extension.content.Snapshot; import run.halo.app.core.extension.notification.Subscription; +import run.halo.app.core.reconciler.PostReconciler; import run.halo.app.event.post.PostPublishedEvent; import run.halo.app.extension.ExtensionClient; import run.halo.app.extension.controller.Reconciler; diff --git a/application/src/test/java/run/halo/app/core/extension/reconciler/ReverseProxyReconcilerTest.java b/application/src/test/java/run/halo/app/core/reconciler/ReverseProxyReconcilerTest.java similarity index 95% rename from application/src/test/java/run/halo/app/core/extension/reconciler/ReverseProxyReconcilerTest.java rename to application/src/test/java/run/halo/app/core/reconciler/ReverseProxyReconcilerTest.java index 0f88e2392..30b22eca5 100644 --- a/application/src/test/java/run/halo/app/core/extension/reconciler/ReverseProxyReconcilerTest.java +++ b/application/src/test/java/run/halo/app/core/reconciler/ReverseProxyReconcilerTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; @@ -19,6 +19,7 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import run.halo.app.core.extension.ReverseProxy; +import run.halo.app.core.reconciler.ReverseProxyReconciler; import run.halo.app.extension.ExtensionClient; import run.halo.app.extension.Metadata; import run.halo.app.extension.controller.Reconciler; diff --git a/application/src/test/java/run/halo/app/core/extension/reconciler/SinglePageReconcilerTest.java b/application/src/test/java/run/halo/app/core/reconciler/SinglePageReconcilerTest.java similarity index 99% rename from application/src/test/java/run/halo/app/core/extension/reconciler/SinglePageReconcilerTest.java rename to application/src/test/java/run/halo/app/core/reconciler/SinglePageReconcilerTest.java index 486efadad..6b7ce7fbb 100644 --- a/application/src/test/java/run/halo/app/core/extension/reconciler/SinglePageReconcilerTest.java +++ b/application/src/test/java/run/halo/app/core/reconciler/SinglePageReconcilerTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; @@ -34,6 +34,7 @@ import run.halo.app.core.extension.content.Post; import run.halo.app.core.extension.content.SinglePage; import run.halo.app.core.extension.content.Snapshot; import run.halo.app.core.extension.notification.Subscription; +import run.halo.app.core.reconciler.SinglePageReconciler; import run.halo.app.extension.ExtensionClient; import run.halo.app.extension.Metadata; import run.halo.app.extension.controller.Reconciler; diff --git a/application/src/test/java/run/halo/app/core/extension/reconciler/SystemSettingReconcilerTest.java b/application/src/test/java/run/halo/app/core/reconciler/SystemSettingReconcilerTest.java similarity index 98% rename from application/src/test/java/run/halo/app/core/extension/reconciler/SystemSettingReconcilerTest.java rename to application/src/test/java/run/halo/app/core/reconciler/SystemSettingReconcilerTest.java index 61edc6aa4..24a1518bd 100644 --- a/application/src/test/java/run/halo/app/core/extension/reconciler/SystemSettingReconcilerTest.java +++ b/application/src/test/java/run/halo/app/core/reconciler/SystemSettingReconcilerTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; @@ -18,6 +18,7 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.context.ApplicationContext; +import run.halo.app.core.reconciler.SystemSettingReconciler; import run.halo.app.extension.ConfigMap; import run.halo.app.extension.ExtensionClient; import run.halo.app.extension.Metadata; diff --git a/application/src/test/java/run/halo/app/core/extension/reconciler/TagReconcilerTest.java b/application/src/test/java/run/halo/app/core/reconciler/TagReconcilerTest.java similarity index 97% rename from application/src/test/java/run/halo/app/core/extension/reconciler/TagReconcilerTest.java rename to application/src/test/java/run/halo/app/core/reconciler/TagReconcilerTest.java index d88fe3ca9..522e76c3f 100644 --- a/application/src/test/java/run/halo/app/core/extension/reconciler/TagReconcilerTest.java +++ b/application/src/test/java/run/halo/app/core/reconciler/TagReconcilerTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; @@ -18,6 +18,7 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import run.halo.app.content.permalinks.TagPermalinkPolicy; import run.halo.app.core.extension.content.Tag; +import run.halo.app.core.reconciler.TagReconciler; import run.halo.app.extension.ExtensionClient; import run.halo.app.extension.Metadata; diff --git a/application/src/test/java/run/halo/app/core/extension/reconciler/ThemeReconcilerTest.java b/application/src/test/java/run/halo/app/core/reconciler/ThemeReconcilerTest.java similarity index 99% rename from application/src/test/java/run/halo/app/core/extension/reconciler/ThemeReconcilerTest.java rename to application/src/test/java/run/halo/app/core/reconciler/ThemeReconcilerTest.java index e95044c8c..ec6eea853 100644 --- a/application/src/test/java/run/halo/app/core/extension/reconciler/ThemeReconcilerTest.java +++ b/application/src/test/java/run/halo/app/core/reconciler/ThemeReconcilerTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; @@ -35,6 +35,7 @@ import org.springframework.util.ResourceUtils; import run.halo.app.core.extension.AnnotationSetting; import run.halo.app.core.extension.Setting; import run.halo.app.core.extension.Theme; +import run.halo.app.core.reconciler.ThemeReconciler; import run.halo.app.extension.ConfigMap; import run.halo.app.extension.ExtensionClient; import run.halo.app.extension.Metadata; diff --git a/application/src/test/java/run/halo/app/core/extension/reconciler/UserReconcilerTest.java b/application/src/test/java/run/halo/app/core/reconciler/UserReconcilerTest.java similarity index 96% rename from application/src/test/java/run/halo/app/core/extension/reconciler/UserReconcilerTest.java rename to application/src/test/java/run/halo/app/core/reconciler/UserReconcilerTest.java index f54997d69..7aca878e9 100644 --- a/application/src/test/java/run/halo/app/core/extension/reconciler/UserReconcilerTest.java +++ b/application/src/test/java/run/halo/app/core/reconciler/UserReconcilerTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.reconciler; +package run.halo.app.core.reconciler; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; @@ -21,7 +21,8 @@ import org.mockito.junit.jupiter.MockitoExtension; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import run.halo.app.core.extension.User; -import run.halo.app.core.extension.service.RoleService; +import run.halo.app.core.reconciler.UserReconciler; +import run.halo.app.core.user.service.RoleService; import run.halo.app.extension.ExtensionClient; import run.halo.app.extension.Metadata; import run.halo.app.extension.controller.Reconciler; diff --git a/application/src/test/java/run/halo/app/core/extension/service/DefaultRoleServiceTest.java b/application/src/test/java/run/halo/app/core/user/service/DefaultRoleServiceTest.java similarity index 99% rename from application/src/test/java/run/halo/app/core/extension/service/DefaultRoleServiceTest.java rename to application/src/test/java/run/halo/app/core/user/service/DefaultRoleServiceTest.java index 2498b0e10..ccd13f203 100644 --- a/application/src/test/java/run/halo/app/core/extension/service/DefaultRoleServiceTest.java +++ b/application/src/test/java/run/halo/app/core/user/service/DefaultRoleServiceTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.service; +package run.halo.app.core.user.service; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.same; @@ -29,6 +29,7 @@ import reactor.core.publisher.Flux; import reactor.test.StepVerifier; import run.halo.app.core.extension.Role; import run.halo.app.core.extension.RoleBinding; +import run.halo.app.core.user.service.DefaultRoleService; import run.halo.app.extension.ListOptions; import run.halo.app.extension.Metadata; import run.halo.app.extension.ReactiveExtensionClient; diff --git a/application/src/test/java/run/halo/app/core/extension/service/UserServiceImplTest.java b/application/src/test/java/run/halo/app/core/user/service/UserServiceImplTest.java similarity index 99% rename from application/src/test/java/run/halo/app/core/extension/service/UserServiceImplTest.java rename to application/src/test/java/run/halo/app/core/user/service/UserServiceImplTest.java index 8b63e0435..08a400a7a 100644 --- a/application/src/test/java/run/halo/app/core/extension/service/UserServiceImplTest.java +++ b/application/src/test/java/run/halo/app/core/user/service/UserServiceImplTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.service; +package run.halo.app.core.user.service; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -34,6 +34,8 @@ import run.halo.app.core.extension.Role; import run.halo.app.core.extension.RoleBinding; import run.halo.app.core.extension.RoleBinding.Subject; import run.halo.app.core.extension.User; +import run.halo.app.core.user.service.RoleService; +import run.halo.app.core.user.service.UserServiceImpl; import run.halo.app.event.user.PasswordChangedEvent; import run.halo.app.extension.Metadata; import run.halo.app.extension.ReactiveExtensionClient; diff --git a/application/src/test/java/run/halo/app/core/extension/service/impl/EmailPasswordRecoveryServiceImplTest.java b/application/src/test/java/run/halo/app/core/user/service/impl/EmailPasswordRecoveryServiceImplTest.java similarity index 96% rename from application/src/test/java/run/halo/app/core/extension/service/impl/EmailPasswordRecoveryServiceImplTest.java rename to application/src/test/java/run/halo/app/core/user/service/impl/EmailPasswordRecoveryServiceImplTest.java index 1d95fced0..37804408e 100644 --- a/application/src/test/java/run/halo/app/core/extension/service/impl/EmailPasswordRecoveryServiceImplTest.java +++ b/application/src/test/java/run/halo/app/core/user/service/impl/EmailPasswordRecoveryServiceImplTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.service.impl; +package run.halo.app.core.user.service.impl; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -7,6 +7,7 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.junit.jupiter.MockitoExtension; +import run.halo.app.core.user.service.impl.EmailPasswordRecoveryServiceImpl; import run.halo.app.infra.exception.RateLimitExceededException; /** diff --git a/application/src/test/java/run/halo/app/core/extension/service/impl/EmailVerificationServiceImplTest.java b/application/src/test/java/run/halo/app/core/user/service/impl/EmailVerificationServiceImplTest.java similarity index 94% rename from application/src/test/java/run/halo/app/core/extension/service/impl/EmailVerificationServiceImplTest.java rename to application/src/test/java/run/halo/app/core/user/service/impl/EmailVerificationServiceImplTest.java index 81a99bf02..ab3f3369d 100644 --- a/application/src/test/java/run/halo/app/core/extension/service/impl/EmailVerificationServiceImplTest.java +++ b/application/src/test/java/run/halo/app/core/user/service/impl/EmailVerificationServiceImplTest.java @@ -1,13 +1,14 @@ -package run.halo.app.core.extension.service.impl; +package run.halo.app.core.user.service.impl; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static run.halo.app.core.extension.service.impl.EmailVerificationServiceImpl.MAX_ATTEMPTS; +import static run.halo.app.core.user.service.impl.EmailVerificationServiceImpl.MAX_ATTEMPTS; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.junit.jupiter.MockitoExtension; +import run.halo.app.core.user.service.impl.EmailVerificationServiceImpl; import run.halo.app.infra.exception.EmailVerificationFailed; /** diff --git a/application/src/test/java/run/halo/app/core/extension/theme/SettingUtilsTest.java b/application/src/test/java/run/halo/app/infra/utils/SettingUtilsTest.java similarity index 98% rename from application/src/test/java/run/halo/app/core/extension/theme/SettingUtilsTest.java rename to application/src/test/java/run/halo/app/infra/utils/SettingUtilsTest.java index bbed17119..32ee6b6f4 100644 --- a/application/src/test/java/run/halo/app/core/extension/theme/SettingUtilsTest.java +++ b/application/src/test/java/run/halo/app/infra/utils/SettingUtilsTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.theme; +package run.halo.app.infra.utils; import static org.assertj.core.api.Assertions.assertThat; @@ -7,7 +7,6 @@ import org.json.JSONException; import org.junit.jupiter.api.Test; import org.skyscreamer.jsonassert.JSONAssert; import run.halo.app.core.extension.Setting; -import run.halo.app.infra.utils.JsonUtils; /** * Tests for {@link SettingUtils}. diff --git a/application/src/test/java/run/halo/app/core/extension/service/impl/PluginServiceImplTest.java b/application/src/test/java/run/halo/app/plugin/PluginServiceImplTest.java similarity index 98% rename from application/src/test/java/run/halo/app/core/extension/service/impl/PluginServiceImplTest.java rename to application/src/test/java/run/halo/app/plugin/PluginServiceImplTest.java index d90303fa1..bb38bd0fd 100644 --- a/application/src/test/java/run/halo/app/core/extension/service/impl/PluginServiceImplTest.java +++ b/application/src/test/java/run/halo/app/plugin/PluginServiceImplTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.service.impl; +package run.halo.app.plugin; import static java.nio.charset.StandardCharsets.UTF_8; import static java.util.Objects.requireNonNull; @@ -57,10 +57,6 @@ import run.halo.app.extension.ReactiveExtensionClient; import run.halo.app.infra.SystemVersionSupplier; import run.halo.app.infra.exception.PluginAlreadyExistsException; import run.halo.app.infra.utils.FileUtils; -import run.halo.app.plugin.PluginConst; -import run.halo.app.plugin.PluginsRootGetter; -import run.halo.app.plugin.SpringPluginManager; -import run.halo.app.plugin.YamlPluginFinder; @ExtendWith(MockitoExtension.class) class PluginServiceImplTest { diff --git a/application/src/test/java/run/halo/app/security/DefaultUserDetailServiceTest.java b/application/src/test/java/run/halo/app/security/DefaultUserDetailServiceTest.java index 123f4362b..58cc144c2 100644 --- a/application/src/test/java/run/halo/app/security/DefaultUserDetailServiceTest.java +++ b/application/src/test/java/run/halo/app/security/DefaultUserDetailServiceTest.java @@ -23,8 +23,8 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; import run.halo.app.core.extension.Role; -import run.halo.app.core.extension.service.RoleService; -import run.halo.app.core.extension.service.UserService; +import run.halo.app.core.user.service.RoleService; +import run.halo.app.core.user.service.UserService; import run.halo.app.extension.Metadata; import run.halo.app.infra.exception.UserNotFoundException; diff --git a/application/src/test/java/run/halo/app/security/authorization/AuthorizationTest.java b/application/src/test/java/run/halo/app/security/authorization/AuthorizationTest.java index 23d2e7998..21a6758d7 100644 --- a/application/src/test/java/run/halo/app/security/authorization/AuthorizationTest.java +++ b/application/src/test/java/run/halo/app/security/authorization/AuthorizationTest.java @@ -35,7 +35,7 @@ import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import run.halo.app.core.extension.Role; import run.halo.app.core.extension.Role.PolicyRule; -import run.halo.app.core.extension.service.RoleService; +import run.halo.app.core.user.service.RoleService; import run.halo.app.extension.ExtensionClient; import run.halo.app.extension.Metadata; import run.halo.app.infra.AnonymousUserConst; diff --git a/application/src/test/java/run/halo/app/security/authorization/DefaultRuleResolverTest.java b/application/src/test/java/run/halo/app/security/authorization/DefaultRuleResolverTest.java index a311bac5d..bc91cd9d1 100644 --- a/application/src/test/java/run/halo/app/security/authorization/DefaultRuleResolverTest.java +++ b/application/src/test/java/run/halo/app/security/authorization/DefaultRuleResolverTest.java @@ -21,7 +21,7 @@ import reactor.core.publisher.Flux; import reactor.test.StepVerifier; import run.halo.app.core.extension.Role; import run.halo.app.core.extension.Role.PolicyRule; -import run.halo.app.core.extension.service.RoleService; +import run.halo.app.core.user.service.RoleService; import run.halo.app.extension.Metadata; @ExtendWith(MockitoExtension.class) diff --git a/application/src/test/java/run/halo/app/core/extension/theme/ThemeEndpointTest.java b/application/src/test/java/run/halo/app/theme/endpoint/ThemeEndpointTest.java similarity index 99% rename from application/src/test/java/run/halo/app/core/extension/theme/ThemeEndpointTest.java rename to application/src/test/java/run/halo/app/theme/endpoint/ThemeEndpointTest.java index 4fc3194bb..751966ebe 100644 --- a/application/src/test/java/run/halo/app/core/extension/theme/ThemeEndpointTest.java +++ b/application/src/test/java/run/halo/app/theme/endpoint/ThemeEndpointTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.theme; +package run.halo.app.theme.endpoint; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; @@ -41,6 +41,7 @@ import run.halo.app.infra.SystemConfigurableEnvironmentFetcher; import run.halo.app.infra.SystemSetting; import run.halo.app.infra.ThemeRootGetter; import run.halo.app.theme.TemplateEngineManager; +import run.halo.app.theme.service.ThemeService; /** * Tests for {@link ThemeEndpoint}. diff --git a/application/src/test/java/run/halo/app/theme/finders/impl/CommentPublicQueryServiceImplTest.java b/application/src/test/java/run/halo/app/theme/finders/impl/CommentPublicQueryServiceImplTest.java index f1c883340..0a4a8060d 100644 --- a/application/src/test/java/run/halo/app/theme/finders/impl/CommentPublicQueryServiceImplTest.java +++ b/application/src/test/java/run/halo/app/theme/finders/impl/CommentPublicQueryServiceImplTest.java @@ -24,7 +24,7 @@ import run.halo.app.core.extension.Counter; import run.halo.app.core.extension.User; import run.halo.app.core.extension.content.Comment; import run.halo.app.core.extension.content.Post; -import run.halo.app.core.extension.service.UserService; +import run.halo.app.core.user.service.UserService; import run.halo.app.extension.GroupVersionKind; import run.halo.app.extension.ListResult; import run.halo.app.extension.Metadata; diff --git a/application/src/test/java/run/halo/app/core/extension/theme/ThemeServiceImplTest.java b/application/src/test/java/run/halo/app/theme/service/ThemeServiceImplTest.java similarity index 99% rename from application/src/test/java/run/halo/app/core/extension/theme/ThemeServiceImplTest.java rename to application/src/test/java/run/halo/app/theme/service/ThemeServiceImplTest.java index 6ef808b8d..184e38a57 100644 --- a/application/src/test/java/run/halo/app/core/extension/theme/ThemeServiceImplTest.java +++ b/application/src/test/java/run/halo/app/theme/service/ThemeServiceImplTest.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.theme; +package run.halo.app.theme.service; import static java.nio.file.Files.createTempDirectory; import static org.assertj.core.api.Assertions.assertThat; diff --git a/application/src/test/java/run/halo/app/webfilter/LocaleChangeWebFilterTest.java b/application/src/test/java/run/halo/app/webfilter/LocaleChangeWebFilterTest.java index 0ec207fa8..417bc132e 100644 --- a/application/src/test/java/run/halo/app/webfilter/LocaleChangeWebFilterTest.java +++ b/application/src/test/java/run/halo/app/webfilter/LocaleChangeWebFilterTest.java @@ -14,6 +14,7 @@ import org.springframework.mock.http.server.reactive.MockServerHttpRequest; import org.springframework.mock.web.server.MockServerWebExchange; import org.springframework.web.server.WebFilterChain; import reactor.core.publisher.Mono; +import run.halo.app.infra.webfilter.LocaleChangeWebFilter; class LocaleChangeWebFilterTest {