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/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/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 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/actuator/DatabaseInfoContributor.java b/application/src/main/java/run/halo/app/infra/actuator/DatabaseInfoContributor.java similarity index 97% rename from application/src/main/java/run/halo/app/actuator/DatabaseInfoContributor.java rename to application/src/main/java/run/halo/app/infra/actuator/DatabaseInfoContributor.java index e0aa0b5cd..66d88d783 100644 --- a/application/src/main/java/run/halo/app/actuator/DatabaseInfoContributor.java +++ b/application/src/main/java/run/halo/app/infra/actuator/DatabaseInfoContributor.java @@ -1,4 +1,4 @@ -package run.halo.app.actuator; +package run.halo.app.infra.actuator; import io.r2dbc.spi.Connection; import io.r2dbc.spi.ConnectionFactory; diff --git a/application/src/main/java/run/halo/app/actuator/GlobalInfoEndpoint.java b/application/src/main/java/run/halo/app/infra/actuator/GlobalInfoEndpoint.java similarity index 99% rename from application/src/main/java/run/halo/app/actuator/GlobalInfoEndpoint.java rename to application/src/main/java/run/halo/app/infra/actuator/GlobalInfoEndpoint.java index 36ede07f1..9d53a2d52 100644 --- a/application/src/main/java/run/halo/app/actuator/GlobalInfoEndpoint.java +++ b/application/src/main/java/run/halo/app/infra/actuator/GlobalInfoEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.actuator; +package run.halo.app.infra.actuator; import static org.apache.commons.lang3.BooleanUtils.isTrue; diff --git a/application/src/main/java/run/halo/app/actuator/RestartEndpoint.java b/application/src/main/java/run/halo/app/infra/actuator/RestartEndpoint.java similarity index 98% rename from application/src/main/java/run/halo/app/actuator/RestartEndpoint.java rename to application/src/main/java/run/halo/app/infra/actuator/RestartEndpoint.java index 02289ee34..2155850d3 100644 --- a/application/src/main/java/run/halo/app/actuator/RestartEndpoint.java +++ b/application/src/main/java/run/halo/app/infra/actuator/RestartEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.actuator; +package run.halo.app.infra.actuator; import java.io.Closeable; import java.io.IOException; diff --git a/application/src/main/java/run/halo/app/config/ExtensionConfiguration.java b/application/src/main/java/run/halo/app/infra/config/ExtensionConfiguration.java similarity index 97% rename from application/src/main/java/run/halo/app/config/ExtensionConfiguration.java rename to application/src/main/java/run/halo/app/infra/config/ExtensionConfiguration.java index b9133cd9c..cb4d8d4e1 100644 --- a/application/src/main/java/run/halo/app/config/ExtensionConfiguration.java +++ b/application/src/main/java/run/halo/app/infra/config/ExtensionConfiguration.java @@ -1,4 +1,4 @@ -package run.halo.app.config; +package run.halo.app.infra.config; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; diff --git a/application/src/main/java/run/halo/app/config/HaloConfiguration.java b/application/src/main/java/run/halo/app/infra/config/HaloConfiguration.java similarity index 97% rename from application/src/main/java/run/halo/app/config/HaloConfiguration.java rename to application/src/main/java/run/halo/app/infra/config/HaloConfiguration.java index b3fa4a082..37c98a8d5 100644 --- a/application/src/main/java/run/halo/app/config/HaloConfiguration.java +++ b/application/src/main/java/run/halo/app/infra/config/HaloConfiguration.java @@ -1,4 +1,4 @@ -package run.halo.app.config; +package run.halo.app.infra.config; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.MapperFeature; diff --git a/application/src/main/java/run/halo/app/config/SwaggerConfig.java b/application/src/main/java/run/halo/app/infra/config/SwaggerConfig.java similarity index 99% rename from application/src/main/java/run/halo/app/config/SwaggerConfig.java rename to application/src/main/java/run/halo/app/infra/config/SwaggerConfig.java index 5cd98b346..00337a47c 100644 --- a/application/src/main/java/run/halo/app/config/SwaggerConfig.java +++ b/application/src/main/java/run/halo/app/infra/config/SwaggerConfig.java @@ -1,4 +1,4 @@ -package run.halo.app.config; +package run.halo.app.infra.config; import static org.springdoc.core.utils.Constants.SPRINGDOC_ENABLED; diff --git a/application/src/main/java/run/halo/app/config/WebFluxConfig.java b/application/src/main/java/run/halo/app/infra/config/WebFluxConfig.java similarity index 90% rename from application/src/main/java/run/halo/app/config/WebFluxConfig.java rename to application/src/main/java/run/halo/app/infra/config/WebFluxConfig.java index 1a864ca63..49109f079 100644 --- a/application/src/main/java/run/halo/app/config/WebFluxConfig.java +++ b/application/src/main/java/run/halo/app/infra/config/WebFluxConfig.java @@ -1,4 +1,4 @@ -package run.halo.app.config; +package run.halo.app.infra.config; import static org.springframework.util.ResourceUtils.FILE_URL_PREFIX; import static org.springframework.web.reactive.function.server.RequestPredicates.accept; @@ -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,18 +34,20 @@ 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; -import run.halo.app.console.ProxyFilter; -import run.halo.app.console.WebSocketRequestPredicate; import run.halo.app.core.endpoint.WebSocketHandlerMapping; +import run.halo.app.core.endpoint.console.CustomEndpointsBuilder; 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.console.ProxyFilter; +import run.halo.app.infra.console.WebSocketRequestPredicate; import run.halo.app.infra.properties.AttachmentProperties; import run.halo.app.infra.properties.HaloProperties; +import run.halo.app.infra.webfilter.AdditionalWebFilterChainProxy; import run.halo.app.plugin.extensionpoint.ExtensionGetter; -import run.halo.app.webfilter.AdditionalWebFilterChainProxy; @Configuration public class WebFluxConfig implements WebFluxConfigurer { @@ -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/config/WebServerSecurityConfig.java b/application/src/main/java/run/halo/app/infra/config/WebServerSecurityConfig.java similarity index 97% rename from application/src/main/java/run/halo/app/config/WebServerSecurityConfig.java rename to application/src/main/java/run/halo/app/infra/config/WebServerSecurityConfig.java index 06c191707..79f3c014e 100644 --- a/application/src/main/java/run/halo/app/config/WebServerSecurityConfig.java +++ b/application/src/main/java/run/halo/app/infra/config/WebServerSecurityConfig.java @@ -1,4 +1,4 @@ -package run.halo.app.config; +package run.halo.app.infra.config; import static org.springframework.security.config.Customizer.withDefaults; import static org.springframework.security.web.server.authentication.ServerWebExchangeDelegatingReactiveAuthenticationManagerResolver.builder; @@ -22,8 +22,8 @@ import org.springframework.session.MapSession; import org.springframework.session.config.annotation.web.server.EnableSpringWebSession; import org.springframework.web.reactive.function.server.RouterFunction; import org.springframework.web.reactive.function.server.ServerResponse; -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.infra.AnonymousUserConst; import run.halo.app.infra.properties.HaloProperties; diff --git a/application/src/main/java/run/halo/app/console/ProxyFilter.java b/application/src/main/java/run/halo/app/infra/console/ProxyFilter.java similarity index 98% rename from application/src/main/java/run/halo/app/console/ProxyFilter.java rename to application/src/main/java/run/halo/app/infra/console/ProxyFilter.java index 854d810ab..707be01b1 100644 --- a/application/src/main/java/run/halo/app/console/ProxyFilter.java +++ b/application/src/main/java/run/halo/app/infra/console/ProxyFilter.java @@ -1,4 +1,4 @@ -package run.halo.app.console; +package run.halo.app.infra.console; import lombok.extern.slf4j.Slf4j; import org.springframework.core.io.buffer.DataBuffer; diff --git a/application/src/main/java/run/halo/app/console/WebSocketRequestPredicate.java b/application/src/main/java/run/halo/app/infra/console/WebSocketRequestPredicate.java similarity index 78% rename from application/src/main/java/run/halo/app/console/WebSocketRequestPredicate.java rename to application/src/main/java/run/halo/app/infra/console/WebSocketRequestPredicate.java index 647f98ecb..8d3914e02 100644 --- a/application/src/main/java/run/halo/app/console/WebSocketRequestPredicate.java +++ b/application/src/main/java/run/halo/app/infra/console/WebSocketRequestPredicate.java @@ -1,6 +1,6 @@ -package run.halo.app.console; +package run.halo.app.infra.console; -import static run.halo.app.console.WebSocketUtils.isWebSocketUpgrade; +import static run.halo.app.infra.console.WebSocketUtils.isWebSocketUpgrade; import org.springframework.web.reactive.function.server.RequestPredicate; import org.springframework.web.reactive.function.server.ServerRequest; diff --git a/application/src/main/java/run/halo/app/console/WebSocketServerWebExchangeMatcher.java b/application/src/main/java/run/halo/app/infra/console/WebSocketServerWebExchangeMatcher.java similarity index 85% rename from application/src/main/java/run/halo/app/console/WebSocketServerWebExchangeMatcher.java rename to application/src/main/java/run/halo/app/infra/console/WebSocketServerWebExchangeMatcher.java index 17bdbde51..e9e9bd04e 100644 --- a/application/src/main/java/run/halo/app/console/WebSocketServerWebExchangeMatcher.java +++ b/application/src/main/java/run/halo/app/infra/console/WebSocketServerWebExchangeMatcher.java @@ -1,8 +1,8 @@ -package run.halo.app.console; +package run.halo.app.infra.console; import static org.springframework.security.web.server.util.matcher.ServerWebExchangeMatcher.MatchResult.match; import static org.springframework.security.web.server.util.matcher.ServerWebExchangeMatcher.MatchResult.notMatch; -import static run.halo.app.console.WebSocketUtils.isWebSocketUpgrade; +import static run.halo.app.infra.console.WebSocketUtils.isWebSocketUpgrade; import org.springframework.security.web.server.util.matcher.ServerWebExchangeMatcher; import org.springframework.web.server.ServerWebExchange; diff --git a/application/src/main/java/run/halo/app/console/WebSocketUtils.java b/application/src/main/java/run/halo/app/infra/console/WebSocketUtils.java similarity index 94% rename from application/src/main/java/run/halo/app/console/WebSocketUtils.java rename to application/src/main/java/run/halo/app/infra/console/WebSocketUtils.java index 29ba096ae..afec87164 100644 --- a/application/src/main/java/run/halo/app/console/WebSocketUtils.java +++ b/application/src/main/java/run/halo/app/infra/console/WebSocketUtils.java @@ -1,4 +1,4 @@ -package run.halo.app.console; +package run.halo.app.infra.console; import java.util.Objects; import org.springframework.http.HttpHeaders; 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/core/extension/theme/SettingUtils.java b/application/src/main/java/run/halo/app/infra/utils/SettingUtils.java similarity index 97% rename from application/src/main/java/run/halo/app/core/extension/theme/SettingUtils.java rename to application/src/main/java/run/halo/app/infra/utils/SettingUtils.java index 0a3b33bdf..0cd30461c 100644 --- a/application/src/main/java/run/halo/app/core/extension/theme/SettingUtils.java +++ b/application/src/main/java/run/halo/app/infra/utils/SettingUtils.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.theme; +package run.halo.app.infra.utils; import static org.apache.commons.lang3.ObjectUtils.defaultIfNull; @@ -21,8 +21,6 @@ import run.halo.app.core.extension.Setting; import run.halo.app.extension.ConfigMap; import run.halo.app.extension.ExtensionClient; import run.halo.app.extension.Metadata; -import run.halo.app.infra.utils.JsonParseException; -import run.halo.app.infra.utils.JsonUtils; @UtilityClass public class SettingUtils { 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/main/java/run/halo/app/webfilter/AdditionalWebFilterChainProxy.java b/application/src/main/java/run/halo/app/infra/webfilter/AdditionalWebFilterChainProxy.java similarity index 97% rename from application/src/main/java/run/halo/app/webfilter/AdditionalWebFilterChainProxy.java rename to application/src/main/java/run/halo/app/infra/webfilter/AdditionalWebFilterChainProxy.java index 7a8ce77ea..57fea8dca 100644 --- a/application/src/main/java/run/halo/app/webfilter/AdditionalWebFilterChainProxy.java +++ b/application/src/main/java/run/halo/app/infra/webfilter/AdditionalWebFilterChainProxy.java @@ -1,4 +1,4 @@ -package run.halo.app.webfilter; +package run.halo.app.infra.webfilter; import lombok.Setter; import org.springframework.core.annotation.AnnotationAwareOrderComparator; diff --git a/application/src/main/java/run/halo/app/webfilter/LocaleChangeWebFilter.java b/application/src/main/java/run/halo/app/infra/webfilter/LocaleChangeWebFilter.java similarity index 98% rename from application/src/main/java/run/halo/app/webfilter/LocaleChangeWebFilter.java rename to application/src/main/java/run/halo/app/infra/webfilter/LocaleChangeWebFilter.java index 3329d34f3..1da379c13 100644 --- a/application/src/main/java/run/halo/app/webfilter/LocaleChangeWebFilter.java +++ b/application/src/main/java/run/halo/app/infra/webfilter/LocaleChangeWebFilter.java @@ -1,4 +1,4 @@ -package run.halo.app.webfilter; +package run.halo.app.infra.webfilter; import static run.halo.app.theme.ThemeLocaleContextResolver.LANGUAGE_COOKIE_NAME; import static run.halo.app.theme.ThemeLocaleContextResolver.LANGUAGE_PARAMETER_NAME; 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..7c09cdd4a 100644 --- a/application/src/main/java/run/halo/app/plugin/AggregatedRouterFunction.java +++ b/application/src/main/java/run/halo/app/plugin/AggregatedRouterFunction.java @@ -7,8 +7,9 @@ import org.springframework.web.reactive.function.server.RouterFunctions; 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.endpoint.console.CustomEndpointsBuilder; 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(); } diff --git a/application/src/main/java/run/halo/app/core/extension/service/PluginService.java b/application/src/main/java/run/halo/app/plugin/PluginService.java similarity index 98% rename from application/src/main/java/run/halo/app/core/extension/service/PluginService.java rename to application/src/main/java/run/halo/app/plugin/PluginService.java index 7c8644489..193318cd6 100644 --- a/application/src/main/java/run/halo/app/core/extension/service/PluginService.java +++ b/application/src/main/java/run/halo/app/plugin/PluginService.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.service; +package run.halo.app.plugin; import java.nio.file.Path; import org.springframework.core.io.Resource; diff --git a/application/src/main/java/run/halo/app/core/extension/service/impl/PluginServiceImpl.java b/application/src/main/java/run/halo/app/plugin/PluginServiceImpl.java similarity index 98% rename from application/src/main/java/run/halo/app/core/extension/service/impl/PluginServiceImpl.java rename to application/src/main/java/run/halo/app/plugin/PluginServiceImpl.java index 991250aac..25383e89d 100644 --- a/application/src/main/java/run/halo/app/core/extension/service/impl/PluginServiceImpl.java +++ b/application/src/main/java/run/halo/app/plugin/PluginServiceImpl.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.service.impl; +package run.halo.app.plugin; import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; import static java.nio.file.StandardOpenOption.CREATE; @@ -49,7 +49,6 @@ import reactor.core.scheduler.Scheduler; import reactor.core.scheduler.Schedulers; import reactor.util.retry.Retry; import run.halo.app.core.extension.Plugin; -import run.halo.app.core.extension.service.PluginService; import run.halo.app.extension.ReactiveExtensionClient; import run.halo.app.infra.SystemVersionSupplier; import run.halo.app.infra.exception.PluginAlreadyExistsException; @@ -60,12 +59,6 @@ import run.halo.app.infra.exception.PluginInstallationException; import run.halo.app.infra.exception.UnsatisfiedAttributeValueException; import run.halo.app.infra.utils.FileUtils; import run.halo.app.infra.utils.VersionUtils; -import run.halo.app.plugin.PluginConst; -import run.halo.app.plugin.PluginUtils; -import run.halo.app.plugin.PluginsRootGetter; -import run.halo.app.plugin.SpringPluginManager; -import run.halo.app.plugin.YamlPluginDescriptorFinder; -import run.halo.app.plugin.YamlPluginFinder; import run.halo.app.plugin.resources.BundleResourceUtils; @Slf4j @@ -476,7 +469,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/security/DefaultUserDetailService.java b/application/src/main/java/run/halo/app/security/DefaultUserDetailService.java index b1bf1e564..8bea434be 100644 --- a/application/src/main/java/run/halo/app/security/DefaultUserDetailService.java +++ b/application/src/main/java/run/halo/app/security/DefaultUserDetailService.java @@ -13,8 +13,8 @@ import org.springframework.security.core.userdetails.ReactiveUserDetailsService; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import reactor.core.publisher.Mono; -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.infra.exception.UserNotFoundException; import run.halo.app.security.authentication.login.HaloUser; import run.halo.app.security.authentication.twofactor.TwoFactorUtils; diff --git a/application/src/main/java/run/halo/app/security/authentication/pat/impl/UserScopedPatHandlerImpl.java b/application/src/main/java/run/halo/app/security/authentication/pat/impl/UserScopedPatHandlerImpl.java index a7dfd8b01..108479968 100644 --- a/application/src/main/java/run/halo/app/security/authentication/pat/impl/UserScopedPatHandlerImpl.java +++ b/application/src/main/java/run/halo/app/security/authentication/pat/impl/UserScopedPatHandlerImpl.java @@ -29,7 +29,7 @@ import org.springframework.web.reactive.function.server.ServerRequest; import org.springframework.web.reactive.function.server.ServerResponse; import org.springframework.web.server.ServerWebInputException; import reactor.core.publisher.Mono; -import run.halo.app.core.extension.service.RoleService; +import run.halo.app.core.user.service.RoleService; import run.halo.app.extension.ExtensionUtil; import run.halo.app.extension.Metadata; import run.halo.app.extension.ReactiveExtensionClient; diff --git a/application/src/main/java/run/halo/app/security/authentication/twofactor/TwoFactorAuthEndpoint.java b/application/src/main/java/run/halo/app/security/authentication/twofactor/TwoFactorAuthEndpoint.java index 991faadff..f874f5eb7 100644 --- a/application/src/main/java/run/halo/app/security/authentication/twofactor/TwoFactorAuthEndpoint.java +++ b/application/src/main/java/run/halo/app/security/authentication/twofactor/TwoFactorAuthEndpoint.java @@ -25,7 +25,7 @@ import org.springframework.web.util.UriComponentsBuilder; 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.UserService; +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.ExternalUrlSupplier; diff --git a/application/src/main/java/run/halo/app/security/authorization/DefaultRuleResolver.java b/application/src/main/java/run/halo/app/security/authorization/DefaultRuleResolver.java index 00cfdc14a..0294d55de 100644 --- a/application/src/main/java/run/halo/app/security/authorization/DefaultRuleResolver.java +++ b/application/src/main/java/run/halo/app/security/authorization/DefaultRuleResolver.java @@ -7,7 +7,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.security.core.Authentication; import org.springframework.util.CollectionUtils; import reactor.core.publisher.Mono; -import run.halo.app.core.extension.service.RoleService; +import run.halo.app.core.user.service.RoleService; /** * @author guqing diff --git a/application/src/main/java/run/halo/app/security/authorization/RequestInfoAuthorizationManager.java b/application/src/main/java/run/halo/app/security/authorization/RequestInfoAuthorizationManager.java index f450af7c4..d01fef7da 100644 --- a/application/src/main/java/run/halo/app/security/authorization/RequestInfoAuthorizationManager.java +++ b/application/src/main/java/run/halo/app/security/authorization/RequestInfoAuthorizationManager.java @@ -8,7 +8,7 @@ import org.springframework.security.authorization.ReactiveAuthorizationManager; import org.springframework.security.core.Authentication; import org.springframework.security.web.server.authorization.AuthorizationContext; import reactor.core.publisher.Mono; -import run.halo.app.core.extension.service.RoleService; +import run.halo.app.core.user.service.RoleService; @Slf4j public class RequestInfoAuthorizationManager diff --git a/application/src/main/java/run/halo/app/security/authorization/RequestInfoFactory.java b/application/src/main/java/run/halo/app/security/authorization/RequestInfoFactory.java index 4f629f6a7..b908c9e8e 100644 --- a/application/src/main/java/run/halo/app/security/authorization/RequestInfoFactory.java +++ b/application/src/main/java/run/halo/app/security/authorization/RequestInfoFactory.java @@ -6,7 +6,7 @@ import java.util.Set; import org.apache.commons.lang3.StringUtils; import org.springframework.http.server.PathContainer; import org.springframework.http.server.reactive.ServerHttpRequest; -import run.halo.app.console.WebSocketUtils; +import run.halo.app.infra.console.WebSocketUtils; /** * Creates {@link RequestInfo} from {@link ServerHttpRequest}. 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/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/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/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/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/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/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/main/java/run/halo/app/core/extension/theme/ThemeEndpoint.java b/application/src/main/java/run/halo/app/theme/endpoint/ThemeEndpoint.java similarity index 99% rename from application/src/main/java/run/halo/app/core/extension/theme/ThemeEndpoint.java rename to application/src/main/java/run/halo/app/theme/endpoint/ThemeEndpoint.java index 9cc421092..8e21ae818 100644 --- a/application/src/main/java/run/halo/app/core/extension/theme/ThemeEndpoint.java +++ b/application/src/main/java/run/halo/app/theme/endpoint/ThemeEndpoint.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.theme; +package run.halo.app.theme.endpoint; import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED; import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; @@ -49,6 +49,8 @@ import run.halo.app.infra.ThemeRootGetter; import run.halo.app.infra.exception.NotFoundException; import run.halo.app.infra.utils.JsonUtils; import run.halo.app.theme.TemplateEngineManager; +import run.halo.app.theme.service.ThemeService; +import run.halo.app.theme.service.ThemeUtils; /** * Endpoint for managing themes. 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/java/run/halo/app/theme/finders/impl/CommentPublicQueryServiceImpl.java b/application/src/main/java/run/halo/app/theme/finders/impl/CommentPublicQueryServiceImpl.java index 3a39a80c2..be5f9e91f 100644 --- a/application/src/main/java/run/halo/app/theme/finders/impl/CommentPublicQueryServiceImpl.java +++ b/application/src/main/java/run/halo/app/theme/finders/impl/CommentPublicQueryServiceImpl.java @@ -27,7 +27,7 @@ import run.halo.app.content.comment.OwnerInfo; 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.UserService; +import run.halo.app.core.user.service.UserService; import run.halo.app.extension.AbstractExtension; import run.halo.app.extension.ListOptions; import run.halo.app.extension.ListResult; diff --git a/application/src/main/java/run/halo/app/theme/finders/impl/ContributorFinderImpl.java b/application/src/main/java/run/halo/app/theme/finders/impl/ContributorFinderImpl.java index 3d05eef7f..0f0649a04 100644 --- a/application/src/main/java/run/halo/app/theme/finders/impl/ContributorFinderImpl.java +++ b/application/src/main/java/run/halo/app/theme/finders/impl/ContributorFinderImpl.java @@ -4,7 +4,7 @@ import java.util.List; import lombok.RequiredArgsConstructor; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; -import run.halo.app.core.extension.service.UserService; +import run.halo.app.core.user.service.UserService; import run.halo.app.theme.finders.ContributorFinder; import run.halo.app.theme.finders.Finder; import run.halo.app.theme.finders.vo.ContributorVo; diff --git a/application/src/main/java/run/halo/app/core/extension/theme/ThemeService.java b/application/src/main/java/run/halo/app/theme/service/ThemeService.java similarity index 92% rename from application/src/main/java/run/halo/app/core/extension/theme/ThemeService.java rename to application/src/main/java/run/halo/app/theme/service/ThemeService.java index a3954a3fc..007b4d3e5 100644 --- a/application/src/main/java/run/halo/app/core/extension/theme/ThemeService.java +++ b/application/src/main/java/run/halo/app/theme/service/ThemeService.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.theme; +package run.halo.app.theme.service; import org.reactivestreams.Publisher; import org.springframework.core.io.buffer.DataBuffer; diff --git a/application/src/main/java/run/halo/app/core/extension/theme/ThemeServiceImpl.java b/application/src/main/java/run/halo/app/theme/service/ThemeServiceImpl.java similarity index 98% rename from application/src/main/java/run/halo/app/core/extension/theme/ThemeServiceImpl.java rename to application/src/main/java/run/halo/app/theme/service/ThemeServiceImpl.java index a3abfed08..c1abe453d 100644 --- a/application/src/main/java/run/halo/app/core/extension/theme/ThemeServiceImpl.java +++ b/application/src/main/java/run/halo/app/theme/service/ThemeServiceImpl.java @@ -1,12 +1,12 @@ -package run.halo.app.core.extension.theme; +package run.halo.app.theme.service; import static org.springframework.util.FileSystemUtils.copyRecursively; -import static run.halo.app.core.extension.theme.ThemeUtils.loadThemeManifest; -import static run.halo.app.core.extension.theme.ThemeUtils.locateThemeManifest; -import static run.halo.app.core.extension.theme.ThemeUtils.unzipThemeTo; import static run.halo.app.infra.utils.FileUtils.createTempDir; import static run.halo.app.infra.utils.FileUtils.deleteRecursivelyAndSilently; import static run.halo.app.infra.utils.FileUtils.unzip; +import static run.halo.app.theme.service.ThemeUtils.loadThemeManifest; +import static run.halo.app.theme.service.ThemeUtils.locateThemeManifest; +import static run.halo.app.theme.service.ThemeUtils.unzipThemeTo; import java.nio.file.Path; import java.time.Duration; @@ -41,6 +41,7 @@ import run.halo.app.infra.SystemVersionSupplier; import run.halo.app.infra.ThemeRootGetter; import run.halo.app.infra.exception.ThemeUpgradeException; import run.halo.app.infra.exception.UnsatisfiedAttributeValueException; +import run.halo.app.infra.utils.SettingUtils; import run.halo.app.infra.utils.VersionUtils; @Slf4j diff --git a/application/src/main/java/run/halo/app/core/extension/theme/ThemeUtils.java b/application/src/main/java/run/halo/app/theme/service/ThemeUtils.java similarity index 97% rename from application/src/main/java/run/halo/app/core/extension/theme/ThemeUtils.java rename to application/src/main/java/run/halo/app/theme/service/ThemeUtils.java index a0276a36e..0b6449c5d 100644 --- a/application/src/main/java/run/halo/app/core/extension/theme/ThemeUtils.java +++ b/application/src/main/java/run/halo/app/theme/service/ThemeUtils.java @@ -1,4 +1,4 @@ -package run.halo.app.core.extension.theme; +package run.halo.app.theme.service; import static org.springframework.util.FileSystemUtils.copyRecursively; import static run.halo.app.infra.utils.FileUtils.createTempDir; @@ -16,6 +16,7 @@ import java.util.Optional; import java.util.Set; import java.util.stream.BaseStream; import java.util.stream.Stream; +import lombok.experimental.UtilityClass; import lombok.extern.slf4j.Slf4j; import org.reactivestreams.Publisher; import org.springframework.core.io.FileSystemResource; @@ -38,11 +39,12 @@ import run.halo.app.infra.utils.FileUtils; import run.halo.app.infra.utils.YamlUnstructuredLoader; @Slf4j -class ThemeUtils { +@UtilityClass +public class ThemeUtils { private static final String THEME_TMP_PREFIX = "halo-theme-"; private static final String[] THEME_MANIFESTS = {"theme.yaml", "theme.yml"}; - static Flux listAllThemesFromThemeDir(Path themesDir) { + public static Flux listAllThemesFromThemeDir(Path themesDir) { return walkThemesFromPath(themesDir) .filter(Files::isDirectory) .map(ThemeUtils::findThemeManifest) 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: 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 3de56eb72..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) @@ -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/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 98% 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 b18f928a8..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; @@ -74,7 +75,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 +191,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/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/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 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 2e79ce0fe..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 { @@ -123,7 +119,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/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/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 */ 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)); 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 045b5f14e..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; @@ -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/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 {