【例子介绍】Halo 开源建站工具 v2.0.0源码
Halo 作为一款好用又强大的开源建站工具,配合上不同的模板与插件,可以很好地帮助你构建你心中的理想站点。它可以是你公司的官方网站,可以是你的个人博客,也可以是团队共享的知识库。
【相关图片】
【源码结构】
.
├── Halo 开源建站工具 v2.0.0源码_halo-v2.0.0.zip
├── halo-2.0.0
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── Dockerfile
│ ├── LICENSE
│ ├── OWNERS
│ ├── README.md
│ ├── SECURITY.md
│ ├── build.gradle
│ ├── config
│ │ └── checkstyle
│ │ └── checkstyle.xml
│ ├── docs
│ │ ├── authentication
│ │ │ └── README.md
│ │ ├── developer-guide
│ │ │ └── custom-endpoint.md
│ │ └── full-text-search
│ │ ├── README.md
│ │ ├── algolia.png
│ │ └── meilisearch.jpg
│ ├── gradle
│ │ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
│ ├── gradle.properties
│ ├── gradlew
│ ├── gradlew.bat
│ ├── hack
│ │ └── cherry_pick_pull.sh
│ ├── settings.gradle
│ └── src
│ ├── main
│ │ ├── java
│ │ │ └── run
│ │ │ └── halo
│ │ │ └── app
│ │ │ ├── Application.java
│ │ │ ├── config
│ │ │ │ ├── ExtensionConfiguration.java
│ │ │ │ ├── HaloConfiguration.java
│ │ │ │ ├── SwaggerConfig.java
│ │ │ │ ├── WebFluxConfig.java
│ │ │ │ └── WebServerSecurityConfig.java
│ │ │ ├── console
│ │ │ │ ├── ConsoleProxyFilter.java
│ │ │ │ └── WebSocketServerWebExchangeMatcher.java
│ │ │ ├── content
│ │ │ │ ├── ContentRequest.java
│ │ │ │ ├── ContentService.java
│ │ │ │ ├── ContentWrapper.java
│ │ │ │ ├── Contributor.java
│ │ │ │ ├── ListedPost.java
│ │ │ │ ├── ListedSinglePage.java
│ │ │ │ ├── PatchUtils.java
│ │ │ │ ├── PostQuery.java
│ │ │ │ ├── PostRequest.java
│ │ │ │ ├── PostService.java
│ │ │ │ ├── PostSorter.java
│ │ │ │ ├── SinglePageQuery.java
│ │ │ │ ├── SinglePageRequest.java
│ │ │ │ ├── SinglePageService.java
│ │ │ │ ├── SinglePageSorter.java
│ │ │ │ ├── Stats.java
│ │ │ │ ├── comment
│ │ │ │ │ ├── CommentEmailOwner.java
│ │ │ │ │ ├── CommentQuery.java
│ │ │ │ │ ├── CommentRequest.java
│ │ │ │ │ ├── CommentService.java
│ │ │ │ │ ├── CommentServiceImpl.java
│ │ │ │ │ ├── CommentSorter.java
│ │ │ │ │ ├── CommentSubject.java
│ │ │ │ │ ├── ListedComment.java
│ │ │ │ │ ├── ListedReply.java
│ │ │ │ │ ├── OwnerInfo.java
│ │ │ │ │ ├── PostCommentSubject.java
│ │ │ │ │ ├── ReplyQuery.java
│ │ │ │ │ ├── ReplyRequest.java
│ │ │ │ │ ├── ReplyService.java
│ │ │ │ │ ├── ReplyServiceImpl.java
│ │ │ │ │ └── SinglePageCommentSubject.java
│ │ │ │ ├── impl
│ │ │ │ │ ├── ContentServiceImpl.java
│ │ │ │ │ ├── PostServiceImpl.java
│ │ │ │ │ └── SinglePageServiceImpl.java
│ │ │ │ └── permalinks
│ │ │ │ ├── CategoryPermalinkPolicy.java
│ │ │ │ ├── ExtensionLocator.java
│ │ │ │ ├── PermalinkPolicy.java
│ │ │ │ ├── PostPermalinkPolicy.java
│ │ │ │ └── TagPermalinkPolicy.java
│ │ │ ├── core
│ │ │ │ └── extension
│ │ │ │ ├── Counter.java
│ │ │ │ ├── Menu.java
│ │ │ │ ├── MenuItem.java
│ │ │ │ ├── Plugin.java
│ │ │ │ ├── ReverseProxy.java
│ │ │ │ ├── Role.java
│ │ │ │ ├── RoleBinding.java
│ │ │ │ ├── Setting.java
│ │ │ │ ├── Theme.java
│ │ │ │ ├── User.java
│ │ │ │ ├── attachment
│ │ │ │ │ ├── Attachment.java
│ │ │ │ │ ├── Constant.java
│ │ │ │ │ ├── Group.java
│ │ │ │ │ ├── Policy.java
│ │ │ │ │ ├── PolicyTemplate.java
│ │ │ │ │ └── endpoint
│ │ │ │ │ ├── AttachmentEndpoint.java
│ │ │ │ │ ├── AttachmentHandler.java
│ │ │ │ │ └── LocalAttachmentUploadHandler.java
│ │ │ │ ├── content
│ │ │ │ │ ├── Category.java
│ │ │ │ │ ├── Comment.java
│ │ │ │ │ ├── Constant.java
│ │ │ │ │ ├── Post.java
│ │ │ │ │ ├── Reply.java
│ │ │ │ │ ├── SinglePage.java
│ │ │ │ │ ├── Snapshot.java
│ │ │ │ │ └── Tag.java
│ │ │ │ ├── endpoint
│ │ │ │ │ ├── CommentEndpoint.java
│ │ │ │ │ ├── ContentEndpoint.java
│ │ │ │ │ ├── CustomEndpoint.java
│ │ │ │ │ ├── CustomEndpointsBuilder.java
│ │ │ │ │ ├── PluginEndpoint.java
│ │ │ │ │ ├── PostEndpoint.java
│ │ │ │ │ ├── ReplyEndpoint.java
│ │ │ │ │ ├── SinglePageEndpoint.java
│ │ │ │ │ ├── SortResolver.java
│ │ │ │ │ ├── StatsEndpoint.java
│ │ │ │ │ ├── TrackerEndpoint.java
│ │ │ │ │ └── UserEndpoint.java
│ │ │ │ ├── reconciler
│ │ │ │ │ ├── CategoryReconciler.java
│ │ │ │ │ ├── CommentReconciler.java
│ │ │ │ │ ├── MenuItemReconciler.java
│ │ │ │ │ ├── PluginReconciler.java
│ │ │ │ │ ├── PostReconciler.java
│ │ │ │ │ ├── ReverseProxyReconciler.java
│ │ │ │ │ ├── RoleBindingReconciler.java
│ │ │ │ │ ├── RoleReconciler.java
│ │ │ │ │ ├── SinglePageReconciler.java
│ │ │ │ │ ├── SystemSettingReconciler.java
│ │ │ │ │ ├── TagReconciler.java
│ │ │ │ │ ├── ThemeReconciler.java
│ │ │ │ │ ├── UserReconciler.java
│ │ │ │ │ └── attachment
│ │ │ │ │ └── AttachmentReconciler.java
│ │ │ │ ├── service
│ │ │ │ │ ├── DefaultRoleBindingService.java
│ │ │ │ │ ├── DefaultRoleService.java
│ │ │ │ │ ├── RoleBindingService.java
│ │ │ │ │ ├── RoleService.java
│ │ │ │ │ ├── UserService.java
│ │ │ │ │ └── UserServiceImpl.java
│ │ │ │ └── theme
│ │ │ │ ├── ThemeEndpoint.java
│ │ │ │ ├── ThemeService.java
│ │ │ │ ├── ThemeServiceImpl.java
│ │ │ │ └── ThemeUtils.java
│ │ │ ├── event
│ │ │ │ └── post
│ │ │ │ ├── PostEvent.java
│ │ │ │ ├── PostPublishedEvent.java
│ │ │ │ ├── PostRecycledEvent.java
│ │ │ │ └── PostUnpublishedEvent.java
│ │ │ ├── extension
│ │ │ │ ├── AbstractExtension.java
│ │ │ │ ├── Comparators.java
│ │ │ │ ├── ConfigMap.java
│ │ │ │ ├── DefaultSchemeManager.java
│ │ │ │ ├── DefaultSchemeWatcherManager.java
│ │ │ │ ├── DelegateExtensionClient.java
│ │ │ │ ├── Extension.java
│ │ │ │ ├── ExtensionClient.java
│ │ │ │ ├── ExtensionConverter.java
│ │ │ │ ├── ExtensionOperator.java
│ │ │ │ ├── ExtensionUtil.java
│ │ │ │ ├── GVK.java
│ │ │ │ ├── GroupKind.java
│ │ │ │ ├── GroupVersion.java
│ │ │ │ ├── GroupVersionKind.java
│ │ │ │ ├── JSONExtensionConverter.java
│ │ │ │ ├── ListResult.java
│ │ │ │ ├── Metadata.java
│ │ │ │ ├── MetadataOperator.java
│ │ │ │ ├── ReactiveExtensionClient.java
│ │ │ │ ├── ReactiveExtensionClientImpl.java
│ │ │ │ ├── Ref.java
│ │ │ │ ├── Scheme.java
│ │ │ │ ├── SchemeManager.java
│ │ │ │ ├── SchemeWatcherManager.java
│ │ │ │ ├── Unstructured.java
│ │ │ │ ├── Watcher.java
│ │ │ │ ├── WatcherPredicates.java
│ │ │ │ ├── controller
│ │ │ │ │ ├── Controller.java
│ │ │ │ │ ├── ControllerBuilder.java
│ │ │ │ │ ├── ControllerManager.java
│ │ │ │ │ ├── DefaultController.java
│ │ │ │ │ ├── DefaultControllerManager.java
│ │ │ │ │ ├── DefaultDelayQueue.java
│ │ │ │ │ ├── ExtensionWatcher.java
│ │ │ │ │ ├── Reconciler.java
│ │ │ │ │ ├── RequestQueue.java
│ │ │ │ │ ├── RequestSynchronizer.java
│ │ │ │ │ └── Synchronizer.java
│ │ │ │ ├── exception
│ │ │ │ │ ├── ExtensionConvertException.java
│ │ │ │ │ ├── ExtensionException.java
│ │ │ │ │ ├── ExtensionNotFoundException.java
│ │ │ │ │ ├── SchemaViolationException.java
│ │ │ │ │ └── SchemeNotFoundException.java
│ │ │ │ ├── gc
│ │ │ │ │ ├── GcControllerInitializer.java
│ │ │ │ │ ├── GcReconciler.java
│ │ │ │ │ ├── GcRequest.java
│ │ │ │ │ ├── GcSynchronizer.java
│ │ │ │ │ └── GcWatcher.java
│ │ │ │ ├── router
│ │ │ │ │ ├── ExtensionCompositeRouterFunction.java
│ │ │ │ │ ├── ExtensionCreateHandler.java
│ │ │ │ │ ├── ExtensionDeleteHandler.java
│ │ │ │ │ ├── ExtensionGetHandler.java
│ │ │ │ │ ├── ExtensionListHandler.java
│ │ │ │ │ ├── ExtensionRouterFunctionFactory.java
│ │ │ │ │ ├── ExtensionUpdateHandler.java
│ │ │ │ │ ├── IListRequest.java
│ │ │ │ │ ├── ListRequest.java
│ │ │ │ │ ├── QueryParamBuildUtil.java
│ │ │ │ │ └── selector
│ │ │ │ │ ├── FieldCriteriaPredicateConverter.java
│ │ │ │ │ ├── LabelCriteriaPredicateConverter.java
│ │ │ │ │ ├── Operator.java
│ │ │ │ │ ├── SelectorConverter.java
│ │ │ │ │ ├── SelectorCriteria.java
│ │ │ │ │ └── SelectorUtil.java
│ │ │ │ └── store
│ │ │ │ ├── ExtensionStore.java
│ │ │ │ ├── ExtensionStoreClient.java
│ │ │ │ ├── ExtensionStoreClientJPAImpl.java
│ │ │ │ ├── ExtensionStoreRepository.java
│ │ │ │ ├── ReactiveExtensionStoreClient.java
│ │ │ │ └── ReactiveExtensionStoreClientImpl.java
│ │ │ ├── infra
│ │ │ │ ├── AnonymousUserConst.java
│ │ │ │ ├── Condition.java
│ │ │ │ ├── ConditionList.java
│ │ │ │ ├── ConditionStatus.java
│ │ │ │ ├── DefaultThemeInitializer.java
│ │ │ │ ├── DefaultThemeRootGetter.java
│ │ │ │ ├── ExtensionResourceInitializer.java
│ │ │ │ ├── ExternalUrlSupplier.java
│ │ │ │ ├── HaloPropertiesExternalUrlSupplier.java
│ │ │ │ ├── SchemeInitializedEvent.java
│ │ │ │ ├── SchemeInitializer.java
│ │ │ │ ├── SystemConfigurableEnvironmentFetcher.java
│ │ │ │ ├── SystemSetting.java
│ │ │ │ ├── ThemeRootGetter.java
│ │ │ │ ├── exception
│ │ │ │ │ ├── AccessDeniedException.java
│ │ │ │ │ ├── AsyncRequestTimeoutException.java
│ │ │ │ │ ├── HaloException.java
│ │ │ │ │ ├── NotFoundException.java
│ │ │ │ │ ├── ThemeInstallationException.java
│ │ │ │ │ ├── ThemeUninstallException.java
│ │ │ │ │ └── handlers
│ │ │ │ │ ├── ExceptionHandlingProblemDetailsHandler.java
│ │ │ │ │ ├── GlobalErrorWebExceptionHandler.java
│ │ │ │ │ └── HaloErrorWebFluxAutoConfiguration.java
│ │ │ │ ├── properties
│ │ │ │ │ ├── AttachmentProperties.java
│ │ │ │ │ ├── ConsoleProperties.java
│ │ │ │ │ ├── ExtensionProperties.java
│ │ │ │ │ ├── HaloProperties.java
│ │ │ │ │ ├── JwtProperties.java
│ │ │ │ │ ├── SecurityProperties.java
│ │ │ │ │ └── ThemeProperties.java
│ │ │ │ └── utils
│ │ │ │ ├── Base62Utils.java
│ │ │ │ ├── DataBufferUtils.java
│ │ │ │ ├── FileNameUtils.java
│ │ │ │ ├── FilePathUtils.java
│ │ │ │ ├── FileUtils.java
│ │ │ │ ├── GenericClassUtils.java
│ │ │ │ ├── HaloUtils.java
│ │ │ │ ├── IpAddressUtils.java
│ │ │ │ ├── JsonParseException.java
│ │ │ │ ├── JsonUtils.java
│ │ │ │ ├── PathUtils.java
│ │ │ │ └── YamlUnstructuredLoader.java
│ │ │ ├── metrics
│ │ │ │ ├── CounterMeterHandler.java
│ │ │ │ ├── CounterService.java
│ │ │ │ ├── CounterServiceImpl.java
│ │ │ │ ├── MeterUtils.java
│ │ │ │ └── VisitLogWriter.java
│ │ │ ├── plugin
│ │ │ │ ├── ApiVersion.java
│ │ │ │ ├── BasePlugin.java
│ │ │ │ ├── BasePluginFactory.java
│ │ │ │ ├── DefaultDevelopmentPluginRepository.java
│ │ │ │ ├── ExtensionComponentsFinder.java
│ │ │ │ ├── ExtensionContextRegistry.java
│ │ │ │ ├── HaloPluginManager.java
│ │ │ │ ├── PluginApplicationContext.java
│ │ │ │ ├── PluginApplicationEventBridgeDispatcher.java
│ │ │ │ ├── PluginApplicationInitializer.java
│ │ │ │ ├── PluginAutoConfiguration.java
│ │ │ │ ├── PluginBeforeStopSyncListener.java
│ │ │ │ ├── PluginCompositeRouterFunction.java
│ │ │ │ ├── PluginConst.java
│ │ │ │ ├── PluginDevelopmentInitializer.java
│ │ │ │ ├── PluginNotFoundException.java
│ │ │ │ ├── PluginProperties.java
│ │ │ │ ├── PluginRequestMappingHandlerMapping.java
│ │ │ │ ├── PluginRequestMappingManager.java
│ │ │ │ ├── PluginStartedListener.java
│ │ │ │ ├── PluginStartingError.java
│ │ │ │ ├── PropertyPluginStatusProvider.java
│ │ │ │ ├── SettingFetcher.java
│ │ │ │ ├── SharedApplicationContext.java
│ │ │ │ ├── SharedApplicationContextHolder.java
│ │ │ │ ├── SharedEvent.java
│ │ │ │ ├── SpringComponentsFinder.java
│ │ │ │ ├── SpringExtensionFactory.java
│ │ │ │ ├── YamlPluginDescriptorFinder.java
│ │ │ │ ├── YamlPluginFinder.java
│ │ │ │ ├── event
│ │ │ │ │ ├── HaloPluginBeforeStopEvent.java
│ │ │ │ │ ├── HaloPluginLoadedEvent.java
│ │ │ │ │ ├── HaloPluginStartedEvent.java
│ │ │ │ │ ├── HaloPluginStateChangedEvent.java
│ │ │ │ │ └── HaloPluginStoppedEvent.java
│ │ │ │ ├── extensionpoint
│ │ │ │ │ ├── DefaultExtensionGetter.java
│ │ │ │ │ └── ExtensionGetter.java
│ │ │ │ └── resources
│ │ │ │ ├── BundleResourceUtils.java
│ │ │ │ ├── ReverseProxyRouterFunctionFactory.java
│ │ │ │ └── ReverseProxyRouterFunctionRegistry.java
│ │ │ ├── search
│ │ │ │ ├── IndicesEndpoint.java
│ │ │ │ ├── IndicesInitializer.java
│ │ │ │ ├── IndicesService.java
│ │ │ │ ├── IndicesServiceImpl.java
│ │ │ │ ├── SearchParam.java
│ │ │ │ ├── SearchResult.java
│ │ │ │ ├── extension
│ │ │ │ │ └── SearchEngine.java
│ │ │ │ └── post
│ │ │ │ ├── LucenePostSearchService.java
│ │ │ │ ├── PostDoc.java
│ │ │ │ ├── PostEventReconciler.java
│ │ │ │ ├── PostHit.java
│ │ │ │ ├── PostSearchEndpoint.java
│ │ │ │ └── PostSearchService.java
│ │ │ ├── security
│ │ │ │ ├── CorsConfigurer.java
│ │ │ │ ├── CsrfConfigurer.java
│ │ │ │ ├── DefaultUserDetailService.java
│ │ │ │ ├── SuperAdminInitializer.java
│ │ │ │ ├── authentication
│ │ │ │ │ ├── SecurityConfigurer.java
│ │ │ │ │ ├── WebExchangeMatchers.java
│ │ │ │ │ ├── formlogin
│ │ │ │ │ │ └── FormLoginConfigurer.java
│ │ │ │ │ ├── jwt
│ │ │ │ │ │ ├── JwtAuthenticationConfigurer.java
│ │ │ │ │ │ ├── LoginAuthenticationConverter.java
│ │ │ │ │ │ ├── LoginAuthenticationFailureHandler.java
│ │ │ │ │ │ ├── LoginAuthenticationManager.java
│ │ │ │ │ │ └── LoginAuthenticationSuccessHandler.java
│ │ │ │ │ ├── logout
│ │ │ │ │ │ └── LogoutConfigurer.java
│ │ │ │ │ └── pat
│ │ │ │ │ ├── PatAuthenticationConverter.java
│ │ │ │ │ ├── PatAuthenticationManager.java
│ │ │ │ │ └── PersonalAccessToken.java
│ │ │ │ └── authorization
│ │ │ │ ├── Attributes.java
│ │ │ │ ├── AttributesRecord.java
│ │ │ │ ├── AuthorizationRuleResolver.java
│ │ │ │ ├── AuthorizingVisitor.java
│ │ │ │ ├── DefaultRuleResolver.java
│ │ │ │ ├── PolicyRuleList.java
│ │ │ │ ├── RbacRequestEvaluation.java
│ │ │ │ ├── RequestInfo.java
│ │ │ │ ├── RequestInfoAuthorizationManager.java
│ │ │ │ ├── RequestInfoFactory.java
│ │ │ │ └── RuleAccumulator.java
│ │ │ └── theme
│ │ │ ├── DefaultTemplateEnum.java
│ │ │ ├── HaloViewResolver.java
│ │ │ ├── ReactivePropertyAccessor.java
│ │ │ ├── ReactiveSpelVariableExpressionEvaluator.java
│ │ │ ├── SiteSettingVariablesAcquirer.java
│ │ │ ├── TemplateEngineManager.java
│ │ │ ├── ThemeConfiguration.java
│ │ │ ├── ThemeContext.java
│ │ │ ├── ThemeContextBasedVariablesAcquirer.java
│ │ │ ├── ThemeLinkBuilder.java
│ │ │ ├── ThemeLocaleContextResolver.java
│ │ │ ├── ThemePathPolicy.java
│ │ │ ├── ThemeResolver.java
│ │ │ ├── ViewContextBasedVariablesAcquirer.java
│ │ │ ├── dialect
│ │ │ │ ├── CommentElementTagProcessor.java
│ │ │ │ ├── CommentWidget.java
│ │ │ │ ├── ContentTemplateHeadProcessor.java
│ │ │ │ ├── DefaultFaviconHeadProcessor.java
│ │ │ │ ├── DefaultLinkExpressionFactory.java
│ │ │ │ ├── GlobalHeadInjectionProcessor.java
│ │ │ │ ├── GlobalSeoProcessor.java
│ │ │ │ ├── HaloProcessorDialect.java
│ │ │ │ ├── HaloTrackerProcessor.java
│ │ │ │ ├── JsonNodePropertyAccessorBoundariesProcessor.java
│ │ │ │ ├── LinkExpressionObjectDialect.java
│ │ │ │ ├── TemplateFooterElementTagProcessor.java
│ │ │ │ ├── TemplateGlobalHeadProcessor.java
│ │ │ │ └── TemplateHeadProcessor.java
│ │ │ ├── endpoint
│ │ │ │ └── CommentFinderEndpoint.java
│ │ │ ├── engine
│ │ │ │ ├── SpringTemplateEngine.java
│ │ │ │ └── SpringWebFluxTemplateEngine.java
│ │ │ ├── finders
│ │ │ │ ├── CategoryFinder.java
│ │ │ │ ├── CommentFinder.java
│ │ │ │ ├── ContributorFinder.java
│ │ │ │ ├── Finder.java
│ │ │ │ ├── FinderRegistry.java
│ │ │ │ ├── MenuFinder.java
│ │ │ │ ├── PluginFinder.java
│ │ │ │ ├── PostFinder.java
│ │ │ │ ├── SinglePageFinder.java
│ │ │ │ ├── SiteStatsFinder.java
│ │ │ │ ├── TagFinder.java
│ │ │ │ ├── ThemeFinder.java
│ │ │ │ ├── impl
│ │ │ │ │ ├── CategoryFinderImpl.java
│ │ │ │ │ ├── CommentFinderImpl.java
│ │ │ │ │ ├── ContributorFinderImpl.java
│ │ │ │ │ ├── MenuFinderImpl.java
│ │ │ │ │ ├── PluginFinderImpl.java
│ │ │ │ │ ├── PostFinderImpl.java
│ │ │ │ │ ├── SinglePageFinderImpl.java
│ │ │ │ │ ├── SiteStatsFinderImpl.java
│ │ │ │ │ ├── TagFinderImpl.java
│ │ │ │ │ └── ThemeFinderImpl.java
│ │ │ │ └── vo
│ │ │ │ ├── CategoryTreeVo.java
│ │ │ │ ├── CategoryVo.java
│ │ │ │ ├── CommentVo.java
│ │ │ │ ├── ContentVo.java
│ │ │ │ ├── Contributor.java
│ │ │ │ ├── ListedPostVo.java
│ │ │ │ ├── ListedSinglePageVo.java
│ │ │ │ ├── MenuItemVo.java
│ │ │ │ ├── MenuVo.java
│ │ │ │ ├── NavigationPostVo.java
│ │ │ │ ├── PostArchiveVo.java
│ │ │ │ ├── PostArchiveYearMonthVo.java
│ │ │ │ ├── PostVo.java
│ │ │ │ ├── ReplyVo.java
│ │ │ │ ├── SinglePageVo.java
│ │ │ │ ├── SiteSettingVo.java
│ │ │ │ ├── SiteStatsVo.java
│ │ │ │ ├── StatsVo.java
│ │ │ │ ├── TagVo.java
│ │ │ │ ├── ThemeVo.java
│ │ │ │ └── VisualizableTreeNode.java
│ │ │ ├── message
│ │ │ │ ├── ThemeMessageResolutionUtils.java
│ │ │ │ └── ThemeMessageResolver.java
│ │ │ └── router
│ │ │ ├── GvkName.java
│ │ │ ├── PageUrlUtils.java
│ │ │ ├── PermalinkHttpGetRouter.java
│ │ │ ├── PermalinkIndexAddCommand.java
│ │ │ ├── PermalinkIndexChangedEvent.java
│ │ │ ├── PermalinkIndexDeleteCommand.java
│ │ │ ├── PermalinkIndexUpdateCommand.java
│ │ │ ├── PermalinkIndexer.java
│ │ │ ├── PermalinkPatternProvider.java
│ │ │ ├── PermalinkRefreshHandler.java
│ │ │ ├── PermalinkRuleChangedEvent.java
│ │ │ ├── PermalinkWatch.java
│ │ │ ├── RadixRouterTree.java
│ │ │ ├── RadixTree.java
│ │ │ ├── RadixTreeNode.java
│ │ │ ├── ThemeCompositeRouterFunction.java
│ │ │ ├── UrlContextListResult.java
│ │ │ ├── ViewNameResolver.java
│ │ │ └── strategy
│ │ │ ├── ArchivesRouteStrategy.java
│ │ │ ├── CategoriesRouteStrategy.java
│ │ │ ├── CategoryRouteStrategy.java
│ │ │ ├── DetailsPageRouteHandlerStrategy.java
│ │ │ ├── IndexRouteStrategy.java
│ │ │ ├── ListPageRouteHandlerStrategy.java
│ │ │ ├── ModelConst.java
│ │ │ ├── PostRouteStrategy.java
│ │ │ ├── SinglePageRouteStrategy.java
│ │ │ ├── TagRouteStrategy.java
│ │ │ └── TagsRouteStrategy.java
│ │ └── resources
│ │ ├── application-dev.yaml
│ │ ├── application-mysql.yaml
│ │ ├── application-postgresql.yaml
│ │ ├── application-win.yaml
│ │ ├── application.yaml
│ │ ├── banner.txt
│ │ ├── extensions
│ │ │ ├── attachment-local-policy.yaml
│ │ │ ├── role-template-anonymous.yaml
│ │ │ ├── role-template-attachment.yaml
│ │ │ ├── role-template-authenticated.yaml
│ │ │ ├── role-template-category.yaml
│ │ │ ├── role-template-comment.yaml
│ │ │ ├── role-template-configmap.yaml
│ │ │ ├── role-template-menu.yaml
│ │ │ ├── role-template-permissions.yaml
│ │ │ ├── role-template-plugin.yaml
│ │ │ ├── role-template-post.yaml
│ │ │ ├── role-template-role.yaml
│ │ │ ├── role-template-setting.yaml
│ │ │ ├── role-template-singlepage.yaml
│ │ │ ├── role-template-snaphost.yaml
│ │ │ ├── role-template-tag.yaml
│ │ │ ├── role-template-theme.yaml
│ │ │ ├── role-template-user.yaml
│ │ │ ├── searchengine-lucene.yaml
│ │ │ ├── system-configurable-configmap.yaml
│ │ │ ├── system-default-role.yaml
│ │ │ ├── system-setting.yaml
│ │ │ └── user.yaml
│ │ ├── schema-h2.sql
│ │ ├── schema-mysql.sql
│ │ ├── schema-postgresql.sql
│ │ ├── static
│ │ │ └── halo-tracker.js
│ │ └── themes
│ │ └── theme-earth.zip
│ └── test
│ ├── java
│ │ └── run
│ │ └── halo
│ │ └── app
│ │ ├── ApplicationTests.java
│ │ ├── PathPrefixPredicateTest.java
│ │ ├── config
│ │ │ ├── CorsTest.java
│ │ │ ├── ExtensionConfigurationTest.java
│ │ │ ├── ServerCodecTest.java
│ │ │ └── WebFluxConfigTest.java
│ │ ├── console
│ │ │ └── WebSocketServerWebExchangeMatcherTest.java
│ │ ├── content
│ │ │ ├── ContentRequestTest.java
│ │ │ ├── ContentServiceTest.java
│ │ │ ├── PostIntegrationTests.java
│ │ │ ├── TestPost.java
│ │ │ ├── comment
│ │ │ │ ├── CommentEmailOwnerTest.java
│ │ │ │ ├── CommentQueryTest.java
│ │ │ │ ├── CommentRequestTest.java
│ │ │ │ ├── CommentServiceImplTest.java
│ │ │ │ ├── CommentSorterTest.java
│ │ │ │ ├── PostCommentSubjectTest.java
│ │ │ │ └── SinglePageCommentSubjectTest.java
│ │ │ ├── impl
│ │ │ │ ├── ContentServiceImplTest.java
│ │ │ │ └── PostServiceImplTest.java
│ │ │ └── permalinks
│ │ │ ├── CategoryPermalinkPolicyTest.java
│ │ │ ├── PostPermalinkPolicyTest.java
│ │ │ └── TagPermalinkPolicyTest.java
│ │ ├── core
│ │ │ └── extension
│ │ │ ├── PostTest.java
│ │ │ ├── RoleBindingTest.java
│ │ │ ├── SettingTest.java
│ │ │ ├── TestRole.java
│ │ │ ├── ThemeTest.java
│ │ │ ├── attachment
│ │ │ │ └── endpoint
│ │ │ │ └── AttachmentEndpointTest.java
│ │ │ ├── endpoint
│ │ │ │ ├── PluginEndpointTest.java
│ │ │ │ ├── PostEndpointTest.java
│ │ │ │ └── UserEndpointTest.java
│ │ │ ├── reconciler
│ │ │ │ ├── CategoryReconcilerTest.java
│ │ │ │ ├── CommentReconcilerTest.java
│ │ │ │ ├── MenuItemReconcilerTest.java
│ │ │ │ ├── PluginReconcilerTest.java
│ │ │ │ ├── PostReconcilerTest.java
│ │ │ │ ├── RoleBindingReconcilerTest.java
│ │ │ │ ├── RoleReconcilerTest.java
│ │ │ │ ├── SinglePageReconcilerTest.java
│ │ │ │ ├── SystemSettingReconcilerTest.java
│ │ │ │ ├── TagReconcilerTest.java
│ │ │ │ └── ThemeReconcilerTest.java
│ │ │ ├── service
│ │ │ │ ├── DefaultRoleServiceTest.java
│ │ │ │ └── UserServiceImplTest.java
│ │ │ └── theme
│ │ │ ├── ThemeEndpointTest.java
│ │ │ └── ThemeServiceImplTest.java
│ │ ├── extension
│ │ │ ├── AbstractExtensionTest.java
│ │ │ ├── ComparatorsTest.java
│ │ │ ├── ConfigMapTest.java
│ │ │ ├── DefaultSchemeManagerTest.java
│ │ │ ├── DefaultSchemeWatcherManagerTest.java
│ │ │ ├── ExtensionOperatorTest.java
│ │ │ ├── ExtensionUtilTest.java
│ │ │ ├── FakeExtension.java
│ │ │ ├── GroupVersionKindTest.java
│ │ │ ├── GroupVersionTest.java
│ │ │ ├── JsonExtensionConverterTest.java
│ │ │ ├── ListResultTest.java
│ │ │ ├── MetadataOperatorTest.java
│ │ │ ├── ReactiveExtensionClientTest.java
│ │ │ ├── RefTest.java
│ │ │ ├── SchemeTest.java
│ │ │ ├── UnstructuredTest.java
│ │ │ ├── controller
│ │ │ │ ├── ControllerBuilderTest.java
│ │ │ │ ├── DefaultControllerTest.java
│ │ │ │ ├── DefaultDelayQueueTest.java
│ │ │ │ ├── DelayedEntryTest.java
│ │ │ │ ├── ExtensionWatcherTest.java
│ │ │ │ └── RequestSynchronizerTest.java
│ │ │ ├── gc
│ │ │ │ ├── GcReconcilerTest.java
│ │ │ │ └── GcWatcherTest.java
│ │ │ ├── router
│ │ │ │ ├── ExtensionCompositeRouterFunctionTest.java
│ │ │ │ ├── ExtensionCreateHandlerTest.java
│ │ │ │ ├── ExtensionDeleteHandlerTest.java
│ │ │ │ ├── ExtensionGetHandlerTest.java
│ │ │ │ ├── ExtensionListHandlerTest.java
│ │ │ │ ├── ExtensionRouterFunctionFactoryTest.java
│ │ │ │ ├── ExtensionUpdateHandlerTest.java
│ │ │ │ ├── PathPatternGeneratorTest.java
│ │ │ │ └── selector
│ │ │ │ ├── FieldCriteriaPredicateConverterTest.java
│ │ │ │ ├── LabelCriteriaPredicateConverterTest.java
│ │ │ │ ├── OperatorTest.java
│ │ │ │ ├── SelectorConverterTest.java
│ │ │ │ └── SelectorUtilTest.java
│ │ │ └── store
│ │ │ └── ExtensionStoreClientJPAImplTest.java
│ │ ├── infra
│ │ │ ├── ConditionListTest.java
│ │ │ ├── ExtensionResourceInitializerTest.java
│ │ │ ├── HaloPropertiesExternalUrlSupplierTest.java
│ │ │ ├── SystemConfigurableEnvironmentFetcherTest.java
│ │ │ ├── SystemSettingTest.java
│ │ │ ├── exception
│ │ │ │ └── handlers
│ │ │ │ └── GlobalErrorWebExceptionHandlerTest.java
│ │ │ └── utils
│ │ │ ├── Base62UtilsTest.java
│ │ │ ├── FileNameUtilsTest.java
│ │ │ ├── FileUtilsTest.java
│ │ │ ├── JsonUtilsTest.java
│ │ │ ├── PathUtilsTest.java
│ │ │ └── YamlUnstructuredLoaderTest.java
│ │ ├── metrics
│ │ │ ├── CounterMeterHandlerTest.java
│ │ │ ├── CounterServiceImplTest.java
│ │ │ ├── MeterUtilsTest.java
│ │ │ └── VisitLogWriterTest.java
│ │ ├── plugin
│ │ │ ├── PluginCompositeRouterFunctionTest.java
│ │ │ ├── PluginRequestMappingHandlerMappingTest.java
│ │ │ ├── PluginStartedListenerTest.java
│ │ │ ├── SettingFetcherTest.java
│ │ │ ├── SharedApplicationContextHolderTest.java
│ │ │ ├── SpringComponentsFinderTest.java
│ │ │ ├── YamlPluginDescriptorFinderTest.java
│ │ │ ├── YamlPluginFinderTest.java
│ │ │ └── resources
│ │ │ ├── BundleResourceUtilsTest.java
│ │ │ ├── ReverseProxyRouterFunctionFactoryTest.java
│ │ │ └── ReverseProxyRouterFunctionRegistryTest.java
│ │ ├── security
│ │ │ ├── DefaultUserDetailServiceTest.java
│ │ │ ├── LoginUtils.java
│ │ │ ├── ResponseMap.java
│ │ │ ├── SuperAdminInitializerTest.java
│ │ │ ├── authentication
│ │ │ │ ├── WebExchangeMatchersTest.java
│ │ │ │ └── jwt
│ │ │ │ ├── JwtAuthenticationTest.java
│ │ │ │ └── LoginTest.java
│ │ │ └── authorization
│ │ │ ├── AuthorizationTest.java
│ │ │ ├── DefaultRoleBindingServiceTest.java
│ │ │ ├── PolicyRuleTest.java
│ │ │ └── RequestInfoResolverTest.java
│ │ └── theme
│ │ ├── ReactiveFinderExpressionParserTests.java
│ │ ├── SiteSettingVariablesAcquirerTest.java
│ │ ├── ThemeContextTest.java
│ │ ├── ThemeLinkBuilderTest.java
│ │ ├── ThemeLocaleContextResolverTest.java
│ │ ├── dialect
│ │ │ ├── CommentElementTagProcessorTest.java
│ │ │ ├── HaloProcessorDialectTest.java
│ │ │ └── LinkExpressionObjectDialectTest.java
│ │ ├── endpoint
│ │ │ └── CommentFinderEndpointTest.java
│ │ ├── finders
│ │ │ ├── FinderRegistryTest.java
│ │ │ └── impl
│ │ │ ├── CategoryFinderImplTest.java
│ │ │ ├── MenuFinderImplTest.java
│ │ │ ├── PluginFinderImplTest.java
│ │ │ ├── PostFinderImplTest.java
│ │ │ └── TagFinderImplTest.java
│ │ ├── message
│ │ │ ├── ThemeMessageResolutionUtilsTest.java
│ │ │ └── ThemeMessageResolverIntegrationTest.java
│ │ └── router
│ │ ├── PageUrlUtilsTest.java
│ │ ├── PermalinkIndexerTest.java
│ │ ├── PermalinkPatternProviderTest.java
│ │ ├── RadixRouterTreeTest.java
│ │ ├── RadixTreeTest.java
│ │ ├── ViewNameResolverTest.java
│ │ └── strategy
│ │ ├── ArchivesRouteStrategyTest.java
│ │ ├── CategoriesRouteStrategyTest.java
│ │ ├── CategoryRouteStrategyTest.java
│ │ ├── EmptyView.java
│ │ ├── IndexRouteStrategyTest.java
│ │ ├── PostRouteStrategyTest.java
│ │ ├── RouterStrategyTestSuite.java
│ │ ├── SinglePageRouteStrategyTest.java
│ │ ├── TagRouteStrategyTest.java
│ │ └── TagsRouteStrategyTest.java
│ └── resources
│ ├── apiToken.salt
│ ├── app.key
│ ├── app.pub
│ ├── application.yaml
│ ├── console
│ │ └── index.html
│ ├── folder-to-zip
│ │ └── examplefile
│ ├── plugin
│ │ ├── plugin-0.0.1
│ │ │ ├── extensions
│ │ │ │ ├── reverseProxy.yaml
│ │ │ │ ├── roles.yaml
│ │ │ │ └── test.yml
│ │ │ └── plugin.yaml
│ │ ├── plugin-0.0.2
│ │ │ └── plugin.yaml
│ │ ├── plugin.yaml
│ │ └── test-plugin-components.idx
│ └── themes
│ ├── default
│ │ ├── i18n
│ │ │ ├── default.properties
│ │ │ └── en.properties
│ │ ├── templates
│ │ │ ├── index.html
│ │ │ └── timezone.html
│ │ └── theme.yaml
│ ├── invalid-missing-manifest
│ │ ├── i18n
│ │ │ ├── default.properties
│ │ │ └── en.properties
│ │ └── templates
│ │ ├── index.html
│ │ └── timezone.html
│ ├── other
│ │ ├── i18n
│ │ │ ├── default.properties
│ │ │ └── en.properties
│ │ ├── templates
│ │ │ └── index.html
│ │ └── theme.yaml
│ └── test-theme.zip
└── 说明.htm
136 directories, 658 files
评论