Commit Graph

323 Commits (e446054813b9e5712d229f2f18448a53b9b62492)

Author SHA1 Message Date
contour a56d4f2a92
Fix the meta description with special characters causing the page to display abnormally (#4031)
<!--  Thanks for sending a pull request!  Here are some tips for you:
1. 如果这是你的第一次,请阅读我们的贡献指南:<https://github.com/halo-dev/halo/blob/master/CONTRIBUTING.md>。
1. If this is your first time, please read our contributor guidelines: <https://github.com/halo-dev/halo/blob/master/CONTRIBUTING.md>.
2. 请根据你解决问题的类型为 Pull Request 添加合适的标签。
2. Please label this pull request according to what type of issue you are addressing, especially if this is a release targeted pull request.
3. 请确保你已经添加并运行了适当的测试。
3. Ensure you have added or ran the appropriate tests for your PR.
-->

#### What type of PR is this?

<!--
添加其中一个类别:
Add one of the following kinds:

/kind bug
/kind cleanup
/kind documentation
/kind feature
/kind improvement

适当添加其中一个或多个类别(可选):
Optionally add one or more of the following kinds if applicable:

/kind api-change
/kind deprecation
/kind failing-test
/kind flake
/kind regression
-->
/kind bug
/area core

#### What this PR does / why we need it:
Fix the problem that the meta description with special characters causes the page to display abnormally.
Use htmlEscape in org.springframework.web.util.HtmlUtils to escape the special characters contained in the original description.

see #4000 
#### Which issue(s) this PR fixes:

<!--
PR 合并时自动关闭 issue。
Automatically closes linked issue when PR is merged.

用法:`Fixes #<issue 号>`,或者 `Fixes (粘贴 issue 完整链接)`
Usage: `Fixes #<issue number>`, or `Fixes (paste link of issue)`.
-->
Fixes #4000

#### Special notes for your reviewer:

#### Does this PR introduce a user-facing change?

<!--
如果当前 Pull Request 的修改不会造成用户侧的任何变更,在 `release-note` 代码块儿中填写 `NONE`。
否则请填写用户侧能够理解的 Release Note。如果当前 Pull Request 包含破坏性更新(Break Change),
Release Note 需要以 `action required` 开头。
If no, just write "NONE" in the release-note block below.
If yes, a release note is required:
Enter your extended release note in the block below. If the PR requires additional action from users switching to the new release, include the string "action required".
-->

```release-note
NONE
```
2023-06-04 02:15:21 +00:00
John Niang ede1f2098d
Set open mode of indices to CREATE_OR_APPEND (#4020)
#### What type of PR is this?

/kind bug
/area core
/milestone 2.6.x

#### What this PR does / why we need it:

On first start, we will receive an exception about post indices, please see the logs below:

```java
2023-06-01T10:49:57.191+08:00  INFO 7 --- [         task-1] run.halo.app.search.IndicesInitializer   : Initialize post indices...
2023-06-01T10:49:57.352+08:00 ERROR 7 --- [-controller-t-1] reactor.core.publisher.Operators         : Operator called default onErrorDropped

reactor.core.Exceptions$ErrorCallbackNotImplemented: org.apache.lucene.index.IndexNotFoundException: no segments* file found in LockValidatingDirectoryWrapper(MMapDirectory@/root/.halo2/indices/posts lockFactory=org.apache.lucene.store.NativeFSLockFactory@3de15f4f): files: [write.lock]
Caused by: org.apache.lucene.index.IndexNotFoundException: no segments* file found in LockValidatingDirectoryWrapper(MMapDirectory@/root/.halo2/indices/posts lockFactory=org.apache.lucene.store.NativeFSLockFactory@3de15f4f): files: [write.lock]
	at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:1075) ~[lucene-core-9.5.0.jar:9.5.0 13803aa6ea7fee91f798cfeded4296182ac43a21 - 2023-01-25 16:44:59]
	at run.halo.app.search.post.LucenePostSearchService.removeAllDocuments(LucenePostSearchService.java:133) ~[classes/:2.6.0-SNAPSHOT]
	at run.halo.app.search.IndicesServiceImpl.lambda$rebuildPostIndices$0(IndicesServiceImpl.java:31) ~[classes/:2.6.0-SNAPSHOT]
	at reactor.core.publisher.MonoRunnable.call(MonoRunnable.java:73) ~[reactor-core-3.5.6.jar:3.5.6]
	at reactor.core.publisher.MonoRunnable.call(MonoRunnable.java:32) ~[reactor-core-3.5.6.jar:3.5.6]
```

The problem is caused by <https://github.com/halo-dev/halo/pull/3877>.

This PR sets open mode of indices to `CREATE_OR_APPEND`, which should resolve the problem.

#### Special notes for your reviewer:

1. Try to delete indices folder, such as `~/halo2-dev/indices`
2. Start Halo and check the log

#### Does this PR introduce a user-facing change?

```release-note
None
```
2023-06-01 03:04:11 +00:00
Ryan Wang 51816776ba
chore: update default theme to 1.4.0 (#4019)
#### What type of PR is this?

/kind improvement
/area core
/milestone 2.6.x

#### What this PR does / why we need it:

更新默认主题至 1.4.0

#### Does this PR introduce a user-facing change?

```release-note
None
```
2023-06-01 03:02:15 +00:00
John Niang ede8ea4827
Adapt HTML5 history mode of console in non-proxy mode (#4018)
#### What type of PR is this?

/kind bug
/area core

#### What this PR does / why we need it:

This PR adapts HTML5 history mode of console in non-proxy mode. In PR <https://github.com/halo-dev/halo/pull/4005>, history mode of console has changed from hash mode into HTML5 mode, so that we cannot access console project when refreshing pages.

#### Special notes for your reviewer:

1. Build console project by executing command `make -C console build`
1. Change value of property `halo.console.proxy.enabled` into `false`.
2. Start Halo and check console pages.

#### Does this PR introduce a user-facing change?

```release-note
None
```
2023-05-31 14:09:03 +00:00
John Niang 4c2e8410b9
Fix the problem of crashing requests when slug names of single page contains special chars (#4013)
#### What type of PR is this?

/kind bug
/area core
/milestone 2.6.x

#### What this PR does / why we need it:

This PR refactors request predicate of path when building router functions for single page. I only compare the exact slug name instead of treating it as a URI template.

See <https://github.com/halo-dev/halo/issues/3931> for more.

#### Which issue(s) this PR fixes:

Fixes <https://github.com/halo-dev/halo/issues/3931>

#### Special notes for your reviewer:

1. Try to create a single page with slug name like `{}[]{[]}[{}]`.
2. Publish the single page.
3. Try to request the page.
4. See the result.

#### Does this PR introduce a user-facing change?

```release-note
修复页面别名包含特殊字符导致无法访问的问题
```
2023-05-31 04:21:00 +00:00
guqing c8cc9f2710
refactor: exception prompts during plugin installation (#3993)
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.6.x

#### What this PR does / why we need it:
优化插件安装失败的提示信息

插件安装和升级时由于包格式不正确改为如下提示(Localization)
<img width="449" alt="image" src="https://github.com/halo-dev/halo/assets/38999863/37da0d42-88fa-40c5-a2b9-b8e2698a5930">

how to test it?
使用下面的插件安装和升级会提示 plugin.yaml 缺失
[failed-plugins.zip](https://github.com/halo-dev/halo/files/11560921/failed-plugins.zip)

see #3843 for more details

#### Which issue(s) this PR fixes:

Fixes #3843

#### Does this PR introduce a user-facing change?

```release-note
优化插件安装失败的提示信息
```
2023-05-26 14:56:12 +00:00
guqing 710261b035
feat: add the ability to install plugins remotely via URI (#3963)
#### What type of PR is this?
/kind feature
/area core
/area console
/milestone 2.6.x
/kind api-change

#### What this PR does / why we need it:
支持通过 URI 远程安装和升级插件

how to test it?
1. 测试插件安装
```shell
curl -u admin:admin -X POST http://localhost:8090/apis/api.console.halo.run/v1alpha1/plugins/-/install-from-uri --data '{
  "uri": "https://halo.run/apis/api.store.halo.run/v1alpha1/applications/app-KhIVw/releases/app-release-canxF/download/app-release-canxF-znFre"
}'
```
2. 测试插件升级
```shell
curl -u admin:admin -X POST http://localhost:8090/apis/api.console.halo.run/v1alpha1/plugins/PluginFeed/upgrade-from-uri --data '{
  "uri": "https://halo.run/apis/api.store.halo.run/v1alpha1/applications/app-KhIVw/releases/app-release-canxF/download/app-release-canxF-znFre"
}'
```
#### Which issue(s) this PR fixes:
Fixes #2292

#### Does this PR introduce a user-facing change?
```release-note
支持通过 URI 远程安装和升级插件
```
2023-05-26 14:54:16 +00:00
Li f5493a6d86
perf: data desensitization for comments and replies (#3936)
#### What type of PR is this?

/kind improvement
/area core
/milestone 2.6.x

#### What this PR does / why we need it:

对客户端评论接口进行脱敏处理,移除 `ipAddress` 属性以及 owner 下的 `email` 及 `name` 属性。 UA 由于主题端有使用的可能以及敏感性不强,因此未移除。

对于 #3915 中提到的评论时间为排序时间,需要在 [`https://github.com/halo-sigs/plugin-comment-widget`](https://github.com/halo-sigs/plugin-comment-widget) 插件中做处理。

#### Which issue(s) this PR fixes:

#3915 

#### Special notes for your reviewer:

查看评论接口 `/apis/api.halo.run/v1alpha1/comments` 及回复接口 `/apis/api.halo.run/v1alpha1/comments/{commentName}/reply` 返回字段是否存在 
`spec.ipAddress` 、`owner.email`与 `owner.name` 字段。

#### Does this PR introduce a user-facing change?
```release-note
对客户端评论及回复列表接口进行脱敏处理
```
2023-05-26 14:52:21 +00:00
guqing da5fb1a252
feat: implement a feature for previewing posts and single pages (#3983)
#### What type of PR is this?
/kind feature
/area core
/area console
/milestone 2.6.x

#### What this PR does / why we need it:
新增文章和自定义页面预览功能

提供了以下两个路由用于预览,必须登录且是对应文章或自定义页面的 contributors 才能访问,如果不是 contributor 则先得到没有权限访问异常,如果有权限访问但预览文章不存在则得到 404
- 文章预览 `GET /preview/posts/{name}`
- 自定义页面预览 `GET /preview/singlepages/{name}`

两个路由都可以通过查询参数 snapshotName 来指定需要预览的内容快照,它是可选的,默认为当前正在编辑的内容

#### Which issue(s) this PR fixes:

Fixes #2349

#### Does this PR introduce a user-facing change?

```release-note
新增文章和自定义页面预览功能
```
2023-05-25 14:54:18 +00:00
John Niang 4abe16f20a
Upgrade to Spring Boot 3.1.0 (#3996)
#### What type of PR is this?

/kind cleanup
/area core
/milestone 2.6.x

#### What this PR does / why we need it:

Upgrade to Spring Boot 3.1.0, please refer to <https://github.com/spring-projects/spring-boot/releases/tag/v3.1.0>.

#### Does this PR introduce a user-facing change?

```release-note
升级 Spring Boot 至 3.1.0
```
2023-05-25 13:22:18 +00:00
guqing d5f6dc2207
refactor: sorting parameters to maintain a unified API style (#3956)
#### What type of PR is this?
/kind improvement
/area core
/area console
/kind api-change
/milestone 2.6.x

#### What this PR does / why we need it:
重构排序参数以统一自定义 APIs 的风格
- 文章的排序参数字段名改为 `creationTimestamp`、`publishTime` 查询参数示例为 sort=creationTimestamp,desc
- 自定义页面排序参数字段名同文章
- 评论排序参数字段名为 `creationTimestamp`,`replyCount`,`lastReplyTime` 查询参数示例为 sort=creationTimestamp,desc

需要 Console 适配
#### Which issue(s) this PR fixes:

Fixes #3464

#### Does this PR introduce a user-facing change?

```release-note
重构排序参数以统一自定义 APIs 的风格
```
2023-05-25 12:42:17 +00:00
guqing 170cf4e412
feat: add the ability to install themes remotely via URI (#3939)
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.6.x
/kind api-change

#### What this PR does / why we need it:
支持通过 URI 远程安装和升级主题

how to test it?
1. 测试主题安装
```shell
curl -u admin:admin -X POST http://localhost:8090/apis/api.console.halo.run/v1alpha1/themes/-/install-from-uri --data '{
  "uri": "https://halo.run/apis/api.store.halo.run/v1alpha1/applications/app-eiTyL/releases/app-release-QSyjc/download/app-release-QSyjc-JOSOB"
}'
```
2. 测试主题升级
```shell
curl -u admin:admin -X POST http://localhost:8090/apis/api.console.halo.run/v1alpha1/themes/guqing-higan/upgrade-from-uri --data '{
  "uri": "https://halo.run/apis/api.store.halo.run/v1alpha1/applications/app-eiTyL/releases/app-release-QSyjc/download/app-release-QSyjc-JOSOB"
}'
```
#### Which issue(s) this PR fixes:

Fixes #2291

#### Does this PR introduce a user-facing change?
```release-note
支持通过 URI 远程安装和升级主题
```

---------
Co-authored-by: Ryan Wang <i@ryanc.cc>
2023-05-19 02:10:24 +00:00
guqing 90723f5382
fix: plugin startup failed issue on Windows system (#3925)
#### What type of PR is this?
/kind bug
/area core
/milestone 2.6.x

#### What this PR does / why we need it:
修复在 Windows 系统无法启动插件的问题

how to test it?
1. 使用 windows 系统环境测试插件开发模式和生产模式是否正常工作
2. 测试从 2.0.0 版本安装插件然后切换到此 PR 后插件不会出现找不到文件的错误
3. 测试插件安装和升级是否正常

#### Which issue(s) this PR fixes:
Fixes #3906

#### Does this PR introduce a user-facing change?
```release-note
修复在 Windows 系统无法启动插件的问题
```
2023-05-15 03:44:47 +00:00
John Niang c0c1806476
Upgrade to Spring Boot 3.1.0-RC2 (#3917)
#### What type of PR is this?

/kind cleanup
/area core

#### What this PR does / why we need it:

Upgrade to Spring Boot 3.1.0-RC2.

See https://github.com/spring-projects/spring-boot/releases/tag/v3.1.0-RC2 and https://github.com/spring-projects/spring-boot/releases/tag/v3.1.0-RC1 for more.

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/3816

#### Does this PR introduce a user-facing change?

```release-note
升级 Spring Boot 至 3.1.0-RC2
```
2023-05-09 04:31:43 +00:00
John Niang 3b61807e8b
Fix the problem of being able to search deleted posts (#3877)
#### What type of PR is this?

/kind bug
/kind improvement
/area core

#### What this PR does / why we need it:

This PR refactors post reconciler to reduce post updates and refines post events.

Previously, we need 3 - 4 updates per reconciliation, but now we only need 1. And all events collected in reconciler will be fired after updating post.

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/3121

#### Special notes for your reviewer:

0. Install search plugin
1. Create a public post and publish it
2. Search posts
3. Try to make the post private
4. Search posts
5. Try to make the post public
6. Search posts
7. Try to delete the post
8. Search posts
9. Try to recover the post
10. Search posts

#### Does this PR introduce a user-facing change?

```release-note
修复依然能搜索到已删除文章的问题
```
2023-05-09 02:49:43 +00:00
John Niang 7d27cc9712
Change the type of site.url to URL instead of URI (#3910)
#### What type of PR is this?

/kind bug
/area core
/milestone 2.6.x

#### What this PR does / why we need it:

This PR make the type of `site.url` to URL instead of URI. If we don't configure `halo.external-url`, the request URI will be used.

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/3908

#### Special notes for your reviewer:

Add the line below into any templates:

```html
<b th:text="${site.url}"></b>
```

And check if the output is correct by accessing `http://localhost:8090` or `http://127.0.0.1:8090` or `http://192.168.xxx.xxx:8090` when `halo.external-url` is not set.

Check if the output is correct by accessing `http://localhost:8090` or `http://127.0.0.1:8090` or `http://192.168.xxx.xxx:8090` when `halo.external-url` is set to `https://halo.run/`.

#### Does this PR introduce a user-facing change?

```release-note
修复 site.url 解析有误的问题
```
2023-05-08 10:21:41 +00:00
John Niang 8ffdb5ed1b
Fix the problem of resolving authentication in template when using curl or ab command (#3909)
#### What type of PR is this?

/kind bug
/area core
/milestone 2.6.x

#### What this PR does / why we need it:

When we use curl or ab command to access any pages rendered by thymeleaf at first up, we will get the error described in <https://github.com/halo-dev/halo/issues/3861>.

This PR will resolve the problem by checking null value.

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/3861

#### Does this PR introduce a user-facing change?

```release-note
解决访问页面无法渲染的问题
```
2023-05-08 08:47:41 +00:00
guqing a8250500fc
refactor: add system initialization check and redirect to console if not initialized (#3892)
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.5.2
#### What this PR does / why we need it:
添加系统初始化检查,如果未初始化则重定向到控制台。

此检查只针对首页,当用户访问首页时检查到未初始化则跳转到 Console 让用户初始化以优化没有数据时的访问体验。

SetupStateCache 用于缓存系统初始化状态,当数据库状态改变时会更新缓存以优化性能,避免每次访问首页都查询数据。

#### Which issue(s) this PR fixes:

A part of #3230

#### Does this PR introduce a user-facing change?

```release-note
添加系统初始化检查,如果未初始化则重定向到控制台
```
2023-05-04 07:40:38 +00:00
guqing 6789d4c90f
refactor: compatibility issues with plugins lacking loadLocation after upgrading (#3873)
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.5.x

#### What this PR does / why we need it:
修复插件缺失路径信息升级后无法使用的兼容性问题

how to test it?
1. 生产模式安装插件
2. 更新插件将插件中的 status.loadLocation 和 metadata.annotations["plugin.halo.run/plugin-path"] 删除
3. 查看插件功能是否正常
#### Does this PR introduce a user-facing change?

```release-note
修复插件缺失路径信息升级后无法使用的兼容性问题
```
2023-04-28 07:40:19 +00:00
Ryan Wang 6209afb912
chore: update default theme to 1.3.0 (#3868)
#### What type of PR is this?

/kind improvement

#### What this PR does / why we need it:

升级默认主题的版本为 1.3.0:https://github.com/halo-dev/theme-earth/releases/tag/v1.3.0

#### Does this PR introduce a user-facing change?

```release-note
None
```
2023-04-28 02:36:17 +00:00
Ryan Wang a0265d2e6b
fix: permalink of singlePage cannot contain special characters (#3867)
#### What type of PR is this?

/kind bug
/area core
/milestone 2.5.x

#### What this PR does / why we need it:

修复页面的链接不能包含特殊字符的问题。

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/3808

#### Special notes for your reviewer:

测试方式:

1. 创建一个页面。
2. 尝试设置别名为中文或者其他字符。
3. 尝试包含多个 `/` 分隔符。
4. 尝试访问页面,检查是否能够正常访问。

#### Does this PR introduce a user-facing change?

```release-note
修复页面链接包含中文等字符后无法访问的问题。
```
2023-04-28 02:24:17 +00:00
Li d9f2f77bc2
feat: add filtering conditions to the list of comment components (#3842)
#### What type of PR is this?

/kind improvement
/area core
/milestone 2.5.x

#### What this PR does / why we need it:

为评论接口增加排序条件。当前只增加了根据创建时间进行正/倒序排列,后续持续进行补充。

#### Which issue(s) this PR fixes:

Fixes #3364 

#### Special notes for your reviewer:
调用评论列表接口。增加排序条件 `sort=creationTimestamp,desc` ,查看列表是否正确排序。

#### Does this PR introduce a user-facing change?

```release-note
为评论列表接口增加按照创建时间进行最新/最早排序
```
2023-04-27 08:02:23 +00:00
guqing 8619d96f6a
refactor: optimizing plugin upgrade steps (#3838)
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.5.x

#### What this PR does / why we need it:
优化插件的升级流程

how to test it?
1. 测试正常的插件升级是否正常
2. 测试插件升级失败后插件是否会被卸载的问题
3. 测试没有 version 的插件安装是否能成功
4. 在插件目录不会多出一个名为 `{升级插件名称}-null.jar` 的文件

#### Which issue(s) this PR fixes:

Fixes #3839

#### Does this PR introduce a user-facing 
```release-note
优化插件的升级流程
```
2023-04-27 03:50:15 +00:00
John Niang 4cd6c2f67c
Fix the problem of being able to search private posts after making post private (#3859)
#### What type of PR is this?

/kind bug
/area core
/milestone 2.5.x

#### What this PR does / why we need it:

This PR adds PostVisibleChangedEvent to synchronizing post indices when post visible is changed, whether from public to private or from private to public.

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/3438

#### Special notes for your reviewer:

1. Install Search plugin
2. Create a post
3. Try to search the post
4. Make post private
5. Try to search the post
6. Make post public
7. Try to search the post

#### Does this PR introduce a user-facing change?

```release-note
修复隐藏的文章已然能够被搜索到问题
```
2023-04-26 10:50:14 +00:00
John Niang 814dc8921a
Upgrade plugin presets (#3854)
#### What type of PR is this?

/kind cleanup
/area core

#### What this PR does / why we need it:

Upgrade to plugin-sitemap 1.0.2 and plugin-feed 1.1.1.

```bash
❯ ./gradlew :application:downloadPluginPresets  
Starting a Gradle Daemon, 1 incompatible Daemon could not be reused, use --status for details

> Task :application:downloadPluginPresets
Download https://github.com/halo-sigs/plugin-search-widget/releases/download/v1.0.0/plugin-search-widget-1.0.0.jar
Download https://github.com/halo-sigs/plugin-comment-widget/releases/download/v1.5.0/plugin-comment-widget-1.5.0.jar
Download https://github.com/halo-sigs/plugin-sitemap/releases/download/v1.0.2/plugin-sitemap-1.0.2.jar
Download https://github.com/halo-sigs/plugin-feed/releases/download/v1.1.1/plugin-feed-1.1.1.jar

BUILD SUCCESSFUL in 4s
8 actionable tasks: 1 executed, 7 up-to-date
```

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/3850

#### Does this PR introduce a user-facing change?

```release-note
升级预设插件
```
2023-04-26 07:06:12 +00:00
guqing ed3a618ed4
fix: NPE when navigation post not exists (#3847)
#### What type of PR is this?
/kind bug
/area core
/milestone 2.5.x

#### What this PR does / why we need it:
修复文章上下篇数据查询 NPE 问题

#### Does this PR introduce a user-facing change?

```release-note
None
```
2023-04-24 13:20:14 +00:00
guqing e412866749
feat: add public APIs for client side (#3787)
#### What type of PR is this?
/kind feature
/area core
/milestone 2.5.x
/kind api-change

#### What this PR does / why we need it:
为客户端提供一套 APIs

#### Which issue(s) this PR fixes:
Fixes #3661

#### Does this PR introduce a user-facing change?
```release-note
为访客端提供一套完整的 API
```
2023-04-24 12:16:15 +00:00
guqing d589ce56cc
fix: different jar file with the same name appears in the plugins directory after a failed installation (#3841)
#### What type of PR is this?
/kind bug
/area core
/milestone 2.5.x

#### What this PR does / why we need it:
修复插件安装后无法启动会导致卸载后插件 JAR 文件残留的问题

how to test it?
1. 安装一个无法启动的插件,比如在插件声明周期方法中抛一个异常
2. 启动插件,然后卸载插件看插件 JAR 是否被正确删除
3. 如果是插件开发模式则不会删除文件

#### Which issue(s) this PR fixes:

Fixes #3840

#### Does this PR introduce a user-facing change?

```release-note
修复插件安装后无法启动会导致卸载后插件 JAR 文件残留的问题
```
2023-04-24 10:20:06 +00:00
guqing ce60aab9d3
refactor: exception message when theme installation failed (#3826)
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.5.x

#### What this PR does / why we need it:
优化由于缺少资源文件而安装失败时的异常提示信息
<img width="689" alt="image" src="https://user-images.githubusercontent.com/38999863/233826417-355a6899-578f-4d0b-a9ab-7664e4cd1bf7.png">
#### Which issue(s) this PR fixes:
Fixes #3825

#### Does this PR introduce a user-facing change?
```release-note
None
```
2023-04-24 09:19:33 +00:00
guqing fc77d51c48
refactor: add custom API for create user (#3803)
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.5.x
/kind api-change

#### What this PR does / why we need it:
提供自定义 API 用于创建用户账号
简化了创建用户账号需要先创建账号,再分配角色再重置密码的复杂流程。
需要 Console 端适配此 PR

#### Which issue(s) this PR fixes:
Fixes #2852

#### Does this PR introduce a user-facing change?
```release-note
优化用户账号创建流程
```
2023-04-24 08:19:42 +00:00
John Niang 6ca2cabffb
Upgrade to Spring Boot 3.0.6 (#3832)
#### What type of PR is this?

/kind cleanup
/area core

#### What this PR does / why we need it:

Upgrade to Spring Boot 3.0.6.

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/3829

#### Does this PR introduce a user-facing change?

```release-note
升级 Spring Boot 至 3.0.6
```
2023-04-24 07:47:43 +00:00
Ryan Wang d441e4731e
feat: add accepts and min,max props for attachment selector modal component (#3827)
#### What type of PR is this?

/kind feature
/area console
/milestone 2.5.x

#### What this PR does / why we need it:

附件选择组件(AttachmentSelectorModal)支持 accepts、min、max 参数用来限定文件格式和数量。同时也为 FormKit 的 attachment 类型添加同样的参数。

另外,Console 的部分表单也跟着做了修改,包括:文章/页面设置中的封面图、系统设置中的 Favicon 和 Logo、分类/标签编辑表单中的封面图、用户资料的头像。

FormKit 中使用:

1. Component

    ```vue
    <FormKit
      name="cover"
      type="attachment"
      :accepts="['image/*']"
    ></FormKit>
    ```

2. Schema
    
    ```yaml
    - $formkit: attachment
      name: cover
      accepts:
        - 'image/*'
    ```

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/3800

#### Special notes for your reviewer:

测试方式:

1. 按照上述 FormKit 中的使用方式,自行在主题或者插件配置文件中测试。
2. 测试 Console 中修改的表单:文章/页面设置中的封面图、系统设置中的 Favicon 和 Logo、分类/标签编辑表单中的封面图、用户资料的头像。(均设置为仅允许选择图片(image/*)和最多选择一个(max=1))。

#### Does this PR introduce a user-facing change?

```release-note
Console 端的附件选择组件支持 accepts、min、max 参数用来限定文件格式和数量。
```
2023-04-24 07:45:44 +00:00
John Niang 60040ae428
Fix the problem of upgrading plugins with same version (#3836)
#### What type of PR is this?

/kind bug
/area plugin
/area core

#### What this PR does / why we need it:

Close file system after reading plugin descriptor.

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/3720

#### How to test?

1. Build a plugin and install it
2. Update plugin.yaml of the plugin, rebuild and upgrade it
3. Check the change you modified

#### Does this PR introduce a user-facing change?

```release-note
修复无法正常升级插件的问题
```
2023-04-24 07:43:43 +00:00
guqing f076fc5740
refactor: add validation for initializing super admin username (#3744)
#### What type of PR is this?
/kind improvement
/area core

#### What this PR does / why we need it:
对初始超级管理员用户名增加合法性校验

#### Which issue(s) this PR fixes:
Fixes #3482

#### Does this PR introduce a user-facing change?

```release-note
对初始超级管理员用户名增加合法性校验
```
2023-04-21 03:20:12 +00:00
John Niang 11a5807682
Enable defining Reconciler in plugin (#3789)
#### What type of PR is this?

/kind feature
/area core
/area plugin

#### What this PR does / why we need it:

This PR adds reconciliation mechanism for plugin. After that, we could define a `Reconciler<Request>` like the following when developing plugin:

```java
@Slf4j
@Component
public class ApplicationReconciler implements Reconciler<Reconciler.Request> {

    @Override
    public Result reconcile(Request request) {
        log.info("Application {} changed.", request);
        return Result.doNotRetry();
    }

    @Override
    public Controller setupWith(ControllerBuilder builder) {
        return builder
            .extension(new Application())
            .workerCount(1)
            .build();
    }
}
```

You can reconcile any extensions as needed.

Meanwhile, all plugins will be stopped when Halo is shutting down.

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/3783

#### Does this PR introduce a user-facing change?

```release-note
支持在插件中定义 Reconciler
```
2023-04-19 10:42:25 +00:00
guqing 5477e30781
refactor: optimize the exception information (#3747)
#### What type of PR is this?
/kind improvement
/area core

#### What this PR does / why we need it:
优化异常信息
- 5xx 服务器内部错误不显示异常详情到页面,如主题模板表达式错误
- 访问 `GET /apis/api.halo.run/v1alpha1/comments` 提示 400 且不会打印异常堆栈
- 访问不存在的主题静态资源提示 404 且不会打印异常堆栈,如 `GET /themes/guqing-higan/assets/dist/style1.css`

#### Which issue(s) this PR fixes:
Fixes #3483

#### Does this PR introduce a user-facing change?
```release-note
None
```
2023-04-19 10:26:24 +00:00
John Niang a94c0c7f85
Add property halo.use-absolute-permalink to control permalink generation (#3772)
#### What type of PR is this?

/kind improvement
/kind api-change
/area core
/milestone 2.5.x

#### What this PR does / why we need it:

Add property `halo.use-absolute-permalink`(default is `false`) to control permalink generation. Leave `halo.external-url` as `null` by default.

Meanwhile, I enhanced `ExternalUrlSupplier#getURL` to get URL from not only properties but only http request.

#### How to use it?

```yaml
halo:
  use-absolute-permalink: false
```

Or:

```yaml
halo:
  external-url: https://halo.run/
  use-absolute-permalink: false
```

Or:

```yaml
halo:
  external-url: https://halo.run/
  use-absolute-permalink: true
```

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/3762

#### Special notes for your reviewer:

#### Does this PR introduce a user-facing change?

```release-note
新增是否生成相对地址的配置
```
2023-04-19 07:54:24 +00:00
guqing 602b783506
refactor: allow users to modify their own annotations in metadata (#3739)
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.5.x

#### What this PR does / why we need it:
允许用户修改自己的元数据信息

how to test it
使用 API 修改元数据 `PUT localhost:8090/apis/api.console.halo.run/v1alpha1/users/-`
1. 修改 annotations 中的 `"rbac.authorization.halo.run/role-names": "[\"super-role\",\"fake-role\"]"` 会被复原
2. 修改其他的 annotations 能正确修改,也能增加新的 annotation

#### Which issue(s) this PR fixes:

Fixes #3544

#### Does this PR introduce a user-facing change?

```release-note
允许用户修改自己的元数据信息
```
2023-04-17 13:46:38 +00:00
guqing 8755c24b11
feat: add an API for reloading plugin (#3749)
#### What type of PR is this?
/kind feature
/area core
/area plugin
/kind api-change
#### What this PR does / why we need it:
新增 reload 插件的 API

how to test it?
通过以下 API 测试是否可以在不重启 Halo 的情况下使新改动的插件代码生效
```shell
./gradlew clean build && curl -u your-name:your-password -X PUT http://127.0.0.1:8090/apis/api.console.halo.run/v1alpha1/plugins/{plugin-name}/reload
```
#### Which issue(s) this PR fixes:

Fixes #3748

#### Does this PR introduce a user-facing change?

```release-note
None
```
2023-04-14 09:36:49 +00:00
John Niang d760d4d362
Expose attachment service to plugin (#3740)
#### What type of PR is this?

/kind feature
/area core
/area plugin

#### What this PR does / why we need it:

This PR refactor AttachmentEndpoint by extracting `upload`, `delete`, `getPremalink` and `getSharedURL` logic in the endpoint into AttachmentService. Meanwhile, I expose the service to plugin, so that we can use the service in plugin conveniently.

#### Special notes for your reviewer:

Please confirm that those changes won't influence existing attachment features.

#### Does this PR introduce a user-facing change?

```release-note
None
```
2023-04-14 09:26:49 +00:00
guqing d1651aa671
fix: user page not found (#3736)
#### What type of PR is this?
/kind bug
/area core

#### What this PR does / why we need it:
修复作者页无法访问的问题

#### Which issue(s) this PR fixes:
Fixes #3718

#### Does this PR introduce a user-facing change?
```release-note
修复作者页无法访问的问题
```
2023-04-14 08:12:47 +00:00
guqing d7bfbef149
refactor: excerpt as the meta description on the page of post and single page (#3745)
#### What type of PR is this?
/kind improvement
/area core
#### What this PR does / why we need it:
将文章摘要作为 meta description 以优化文章页的 SEO

how to test it?
查看文章页和自定义页面的 head 中是否具有 `<meta name="description" content="文章摘要"/>` 标签

#### Which issue(s) this PR fixes:
Fixes #2682

#### Does this PR introduce a user-facing change?

```release-note
将文章摘要作为 meta description 以优化文章页的 SEO
```
2023-04-12 12:50:31 +00:00
guqing e4338c111e
fix: only users with an authenticated role are allowed to modify their profile (#3742)
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.5.x

#### What this PR does / why we need it:
仅允许拥有 authenticated 角色的用户修改个人资料

how to test it?
用户在未登录时访问 `PUT /apis/api.console.halo.run/v1alpha1/users/-` 出现 401 状态码则符合预期,登录后则可以正常调用

#### Which issue(s) this PR fixes:
Fixes #3737
#### Does this PR introduce a user-facing change?
```release-note
None
```
2023-04-12 12:46:31 +00:00
John Niang 45313a529e
Enable mapper feature: accept case-insensitive enums (#3707)
#### What type of PR is this?

/kind improvement
/area core

#### What this PR does / why we need it:

After enabling this mapper feature, we could pass a enum value with any case in request body(JSON format).

See 39fdb63607/src/test/java/com/fasterxml/jackson/databind/deser/enums/EnumDeserializationTest.java (L22) for more.

#### Does this PR introduce a user-facing change?

```release-note
None
```
2023-04-09 13:44:15 +00:00
John Niang bfe8b3ba58
Set property server.forward-header-strategy to framework by default (#3709)
#### What type of PR is this?

/kind bug
/area core

#### What this PR does / why we need it:

Set property `server.forward-header-strategy` to `framework` to enable handling `X-Forwarded*` headers correctly.

By default, Spring won't handle `X-Forwarded*` headers. It doesn't work correctly if Halo is running back reverse proxy server.

Supported headers: <310344cf61/spring-web/src/main/java/org/springframework/web/server/adapter/ForwardedHeaderTransformer.java (L63-L69)>.

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/3670

#### Does this PR introduce a user-facing change?

```release-note
解决反向代理后无法正确获取当前请求 URI 的问题
```
2023-04-07 09:30:21 +00:00
John Niang dea87b200f
Add support defining custom endpoint in plugin (#3703)
#### What type of PR is this?

/kind feature
/area core
/area plugin

#### What this PR does / why we need it:

Including CustomEndpoint beans while building plugin router functions.

After that, we can define a CustomEndpoint in plugin like this:

```java
@Component
public class ApplicationEndpoint implements CustomEndpoint {

    @Override
    public RouterFunction<ServerResponse> endpoint() {
        return SpringdocRouteBuilder.route()
            .GET("/applications", request -> ServerResponse.ok().build(), builder -> {
                builder.operationId("ListV1Alpha1Applications");
            })
            .build();
    }

    @Override
    public GroupVersion groupVersion() {
        return CustomEndpoint.super.groupVersion();
    }
}
```

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/3700

#### Does this PR introduce a user-facing change?

```release-note
None
```
2023-04-07 03:42:10 +00:00
John Niang 0973c64ad2
Move common classes related to theme into api module (#3686)
#### What type of PR is this?

/kind cleanup
/area core

#### What this PR does / why we need it:

Move common classes related to theme into api module.

#### Does this PR introduce a user-facing change?

```release-note
None
```
2023-04-03 08:06:13 +00:00
John Niang 36d50e75d3
Configure default external-url as slash (#3655)
#### What type of PR is this?

/kind improvement
/area core

#### What this PR does / why we need it:

Configure default external-url as slash. So that system will generate relative links for all permalinks.

See https://github.com/halo-dev/halo/issues/3654 for more.

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/3654

#### Does this PR introduce a user-facing change?

```release-note
None
```
2023-04-03 03:50:13 +00:00
John Niang 14d7175443
Fix the problem of ServerHttpResponse already committed after logging in (#3658)
#### What type of PR is this?

/kind bug
/area core

#### What this PR does / why we need it:

Move `defaultHandler#onAuthenticationSuccess` up to response write, or it will be executed always.

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/3553

#### Special notes for your reviewer:

Try to login and see the log detail.

#### Does this PR introduce a user-facing change?

```release-note
修复登录成功或失败后报错的问题
```
2023-04-03 03:20:15 +00:00
John Niang a215c3faeb
Upgrade to plugin-comment-widget 1.5.0 (#3649)
#### What type of PR is this?

/kind cleanup

#### What this PR does / why we need it:

Upgrade to plugin-comment-widget 1.5.0.

#### Does this PR introduce a user-facing change?

```release-note
None
```
2023-03-31 03:20:18 +00:00
guqing a2d2d5443f
refactor: do not disable when auth provider deleted (#3644)
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.4.0

#### What this PR does / why we need it:
移除 AuthProviderReconciler 中关于 authProvier 数据被删除时禁用它提供的登录方式的逻辑
当第三方登录插件如 plugin-oauth2 被停止时不应该从已启用的登录配置中移除 auth provider name,这会导致插件被停用在启用后需要重新启用登录方式。
之前之所以如此是想着去掉 system configmap 中的配置残余,虽然现在去掉了 Reconciler 但为了确保数据干净或许还得想其他办法来解决它,但目前不是重点也没有一个很好的办法,或许可以在插件中去做,比如当插件被卸载的生命周期方法中去更新 ConfigMap 中关于此项的配置。

#### Does this PR introduce a user-facing change?
```release-note
None
```
2023-03-31 02:12:15 +00:00
Ryan Wang bb2b1bcae2
perf: change the default role in user settings to select input type (#3643)
#### What type of PR is this?

/area core
/kind improvement
/milestone 2.4.0

#### What this PR does / why we need it:

将系统设置中的用户注册的默认角色输入框改为选择框。

<img width="575" alt="image" src="https://user-images.githubusercontent.com/21301288/228888394-8355b71e-7d18-46bf-b177-569fa7b311d6.png">

#### Special notes for your reviewer:

测试 `系统设置 -> 用户设置` 中的默认角色是否可以正常设置即可。

#### Does this PR introduce a user-facing change?

```release-note
None
```
2023-03-30 15:42:15 +00:00
guqing 7b43d21866
refactor: delete dependent userconnection resources when an user is deleted (#3640)
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.4.0

#### What this PR does / why we need it:
当用户被删除时关联删除用户的绑定账号信息

how to test it?
1. 创建用户
2. 绑定账号
3. 使用管理员删除此用户并查看关联的 UserConnection 是否被删除
```shell
curl -u 'your-username:your-password' http://127.0.0.1:8090/apis/auth.halo.run/v1alpha1/userconnections | jq  -r '.'
```
#### Which issue(s) this PR fixes:
Fixes #3639

#### Does this PR introduce a user-facing change?
```release-note
None
```
2023-03-30 15:40:19 +00:00
guqing ddca7731dd
feat: support user registration (#3631)
#### What type of PR is this?
/kind feature
/area core
/area console
/milestone 2.4.0

#### What this PR does / why we need it:
新增用户注册功能

#### Which issue(s) this PR fixes:
Fixes #2813

#### Special notes for your reviewer:

#### Does this PR introduce a user-facing change?
```release-note
新增用户注册功能
```
2023-03-30 09:44:15 +00:00
guqing 520074bd9c
fix: initialization status of the privileged auth provider is OFF (#3627)
#### What type of PR is this?
/kind feature
/area core
/milestone 2.4.x

#### What this PR does / why we need it:
修复 Local 认证方式的开关初始化状态为关闭

#### Which issue(s) this PR fixes:
Fixes #3602

#### Does this PR introduce a user-facing change?
```release-note
None
```
2023-03-30 08:42:14 +00:00
guqing d355e797bd
feat: add reactive setting fetcher for plugin (#3625)
#### What type of PR is this?
/kind feature
/milestone 2.4.x
/area core

#### What this PR does / why we need it:
提供 ReactiveSettingFetcher 供插件获取配置

此 PR 基于原有的阻塞的 SettingFetcher 逻辑挪到 DefaultReactiveSettingFetcher 中并将阻塞的实现用 Reactive 得代理,不需要测试,单元测试过了即可。
可以尝试在插件中依赖注入 ReactiveSettingFetcher 看是否能正确注入

#### Which issue(s) this PR fixes:
Fixes #3620

#### Does this PR introduce a user-facing change?

```release-note
提供 ReactiveSettingFetcher 供插件获取配置
```
2023-03-30 08:38:13 +00:00
guqing 31e5014dec
refactor: merge patch default values to the existing config for theme and plugin setting (#3616)
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.4.x

#### What this PR does / why we need it:
修复升级主题或插件时新增加的配置默认值没有更新的问题

how to test it?
1. 安装包含设置的主题后获取主题的 ConfigMap 并记下
2. 修改(增加/更新)主题的设置(Setting)的默认值,模拟更新主题
3. 期望默认值改变不会影响到之前已有的配置,对于新增加的配置的默认值会被合并到已有的 ConfigMap 中

#### Which issue(s) this PR fixes:
Fixes #3446

#### Does this PR introduce a user-facing change?
```release-note
修复升级主题或插件时新增加的配置默认值没有更新的问题
```
2023-03-30 08:34:14 +00:00
John Niang 1d9c7343fc
Fix typo: snaphosts -> snapshots (#3618)
#### What type of PR is this?

/kind cleanup
/area core
/area console

#### What this PR does / why we need it:

See https://github.com/halo-dev/halo/issues/3529 for more.

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/3529

#### Does this PR introduce a user-facing change?

```release-note
None
```
2023-03-30 08:28:16 +00:00
John Niang 29f3c25a44
Fix the problem of listing users with unstable result (#3635)
#### What type of PR is this?

/kind bug
/area core

#### What this PR does / why we need it:

Use concatMap instead of flatMap to ensure stable result. 

Please see the differences between flatMap and concatMap from links below:

- https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Flux.html#flatMap-java.util.function.Function-
- https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Flux.html#concatMap-java.util.function.Function-

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/3555

#### Special notes for your reviewer:

#### Does this PR introduce a user-facing change?

```release-note
修复用户列表排序不稳定问题
```
2023-03-30 03:00:18 +00:00
John Niang ad6ac87d73
Make referrer-policy configurable (#3614)
#### What type of PR is this?

/kind feature
/area core

#### What this PR does / why we need it:

This PR provides a configuration item to control referrer-policy header. Default is `strict-origin-when-cross-origin`.

```yaml
halo:
  security:
    referrer-options:
      policy: no-referrer
```

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/3064

#### Does this PR introduce a user-facing change?

```release-note
提供配置以控制站点引用策略(Referrer-Policy)
```
2023-03-29 09:18:13 +00:00
John Niang b846a05276
Make frame options header configurable (#3612)
#### What type of PR is this?

/kind feature
/area core

#### What this PR does / why we need it:

See https://github.com/halo-dev/halo/issues/3605#issuecomment-1486509473 for more.

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/3605

#### Special notes for your reviewer:

#### Does this PR introduce a user-facing change?

```release-note
提供配置以控制能否被 iframe 引用
```
2023-03-29 06:56:13 +00:00
John Niang 79f1393395
Fix the problem not allowing logging in after upgrading Halo (#3603)
#### What type of PR is this?

/kind bug
/area core

#### What this PR does / why we need it:

This PR makes extension initialization before starting reconcilers to prevent modification conflicts.

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/3601

#### Special notes for your reviewer:

1. Try to run Halo 2.3.2 with command `docker run --rm -it -v ~/halo2-dev:/root/.halo2 -p 8090:8090 halohub/halo:2.3.2`
2. Then run Halo 2.4.0-SNAPSHOT with dev profile.

    ```bash
    ./gradlew bootRun --args="--spring.profiles.active=dev"
    ```
4. Check logs and logging functionality
5. Repeat steps above

#### Does this PR introduce a user-facing change?

```release-note
None
```
2023-03-29 05:46:14 +00:00
John Niang a0b4a0eb0b
Upgrade to Spring Boot 3.0.5 (#3609)
#### What type of PR is this?

/kind cleanup
/area core

#### What this PR does / why we need it:

See https://github.com/halo-dev/halo/issues/3599 for more.

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/3599

#### Does this PR introduce a user-facing change?

```release-note
升级至 Spring Boot 3.0.5
```
2023-03-28 15:42:12 +00:00
Ryan Wang e5253cf6eb
chore: bump default theme version to 1.2.1 (#3607)
#### What type of PR is this?

/kind improvement

#### What this PR does / why we need it:

升级默认主题的版本为 1.2.1:https://github.com/halo-dev/theme-earth/releases/tag/v1.2.1

#### Does this PR introduce a user-facing change?

```release-note
None
```
2023-03-28 14:52:12 +00:00
guqing bd4cc0c72d
feat: support aggregate several roles into one combined role (#3568)
#### What type of PR is this?
/kind feature
/milestone 2.4.x
/area core

#### What this PR does / why we need it:
支持聚合多个角色到一个角色

see #3560 for more details.

how to test it?
创建一个测试角色和和一个 RoleBinding 将此角色的绑定到其他角色,在不修改用户权限的情况下,用户将拥有新创建的测试角色的权限。

#### Which issue(s) this PR fixes:

Fixes #3560

#### Does this PR introduce a user-facing change?

```release-note
支持聚合多个角色到一个角色
```
2023-03-27 09:48:01 +00:00
guqing 3339b381c8
feat: provide a secret extension to store sensitive data (#3594)
#### What type of PR is this?
/kind feature
/milestone 2.4.x
/area core

#### What this PR does / why we need it:
提供 Secret 自定义模型用于存储敏感数据
例如:密码、token 等
参考自: https://kubernetes.io/docs/concepts/configuration/secret

#### Which issue(s) this PR fixes:

Fixes #3267

#### Does this PR introduce a user-facing change?
```release-note
提供 Secret 自定义模型用于存储敏感数据
```
2023-03-27 09:25:59 +00:00
guqing 2b73a56b6c
fix: unapproved replies are included in the reply count of comments (#3578)
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.4.x
/kind api-change

#### What this PR does / why we need it:
修复未审核过的回复包含在了评论的回复数量中的问题

此改动需要评论组件修改回复数量取值为 `status.visibleReplyCount`

how to test it?
1. 创建评论,并在评论下回复
2. 评论的所有回复被计数在 `status.replyCount` 中
3. 而 `status.visibleReplyCount` 数量不包含 `spec.hiden=true` 或 `spec.approved = false` 的

#### Which issue(s) this PR fixes:
Fixes #3165

#### Does this PR introduce a user-facing change?

```release-note
修复未审核过的回复包含在了评论的回复数量中的问题
```
2023-03-27 09:08:04 +00:00
Ryan Wang 8ce0913c0e
perf: hide disabled auth providers in user profile (#3561)
#### What type of PR is this?

/kind improvement
/area console

#### What this PR does / why we need it:

隐藏个人资料中未启用的认证方式。

#### Which issue(s) this PR fixes:

Fixes #3556 

#### Special notes for your reviewer:

测试方式:

1. 安装 OAuth 2 插件:https://github.com/halo-sigs/plugin-oauth2/pull/3
2. 再不做任何配置的情况下,访问已登录用户的个人资料页面,检查是否列出了认证方式。
3. 配置某个认证方式并开启,再检查是否列出了已启用的认证方式。

#### Does this PR introduce a user-facing change?

```release-note
None
```
2023-03-27 08:32:12 +00:00
guqing 6bc712d263
fix: NPE when stopping the plugin after the plugin startup fails (#3580)
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.4.x

#### What this PR does / why we need it:
修复插件启动失败后停止插件时出现的 NPE 问题

how to test it?
见 #3579,先使用 issue 描述步骤复现问题,在切换到此 PR 尝试相同步骤

#### Which issue(s) this PR fixes:

Fixes #3579

#### Does this PR introduce a user-facing change?
```release-note
修复插件启动失败后停止插件时出现的 NPE 问题
```
2023-03-27 08:12:12 +00:00
guqing fb2bc4252d
refactor: add parameter verification to the visit counter API (#3546)
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.4.x

#### What this PR does / why we need it:
对访问量统计的 API 增加数据合法性校验
点赞同理

see #3530 for more details

how to test it?
1. 访问文章和页面可以统计访问量
2. 使用访问以下 API 添加模拟使用错误数据不会在 Counter 模型添加记录
```shell
curl 'http://localhost:8090/apis/api.halo.run/v1alpha1/trackers/counter' -u 'your-username:your-password'  \
--header 'Content-Type: application/json' \
--data '{
    "group": "fake.halo.run",
    "plural": "posts",
    "name": "fake-name",
    "hostname": "localhost",
    "screen": "1920x1080",
    "language": "zh-CN",
    "url": "/archives/hello-halo",
    "referrer": "http://localhost:8090/"
}'
```
期望出现日志:
```
2023-03-21T12:37:08.391+08:00 DEBUG 7036 --- [task-4] r.h.app.metrics.VisitedEventReconciler   : Skip visit event for: GroupPluralName[group=fake.halo.run, plural=posts, name=fake-name]
```
并且
```
curl 'http://localhost:8090/apis/metrics.halo.run/v1alpha1/counters' -u 'your-username:your-password'
```
不会出现上述错误数据的记录
#### Which issue(s) this PR fixes:

Fixes #3530

#### Does this PR introduce a user-facing change?

```release-note
对访问量统计的 API 增加数据合法性校验
```
2023-03-27 08:04:17 +00:00
Ryan Wang fbe8e627e8
perf: hide the switch of local identity authentication (#3562)
#### What type of PR is this?

/kind improvement
/area console 

#### What this PR does / why we need it:

在身份认证的列表中隐藏本地身份认证的启用/禁用开关。

<img width="1402" alt="image" src="https://user-images.githubusercontent.com/21301288/226804384-e12ea447-d7ad-4429-82bc-2621fcca84dc.png">

#### Which issue(s) this PR fixes:

Fixes #3557 

#### Does this PR introduce a user-facing change?

```release-note
None 
```
2023-03-27 08:02:20 +00:00
John Niang fa7f3c119a
Change type of SettingFetcher from interface into abstract class (#3593)
#### What type of PR is this?

/kind bug
/area core

#### What this PR does / why we need it:

Change type of SettingFetcher from interface into abstract class for backward compatibility. See https://github.com/halo-dev/halo/issues/3592 for more.

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/3592

#### Special notes for your reviewer:

Please use [plugin-search-widget](https://github.com/halo-sigs/plugin-search-widget) to test.

#### Does this PR introduce a user-facing change?

```release-note
None
```
2023-03-27 04:22:10 +00:00
John Niang c400c85922
Refactor project structure for a better development (#3552)
#### What type of PR is this?

/kind cleanup
/area core

#### What this PR does / why we need it:

This PR totally refactor project structure for a better plugin development. Now we can maintain and publish api and platform modules at Halo application side, which will be references by plugins.

Currently, we can execute command `./gradlew clean publish` to publish api and platform modules into **local** Maven repository, so that we can refer these dependencies (`run.halo.tools.platform:plugin:2.4.0-SNAPSHOT` and `run.halo.app:api:2.4.0-SNAPSHOT`) in plugin projects. 

I will make another pull request to publish api library and platforms into Maven central repository.

**Modules explanation**:
- API module contains common classes which might be used by plugins.
- Plugin Platform module contains dependency declarations of other plugin API modules.
- Application Platform module contains dependency declarations application module might uses.

If we want to build application only(exclude check and jar), we have to execute the command below:

```bash
./gradlew clean :application:build -x :application:check -x :application:jar
```

The executable Jar will be generated at folder `application/build/libs/`.

If we want to build a Docker image, we could execute the command below:

```bash
docker build -t johnniang/halo:project-structure .

# Test the Docker image
docker run -it --rm -p8090:8090 johnniang/halo:project-structure
```

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/2730

#### Special notes for your reviewer:

#### Does this PR introduce a user-facing change?

```release-note
重构项目结构
```
2023-03-23 08:02:33 +00:00