Commit Graph

4528 Commits (767aa53a22a4f0d23bb76fcb16a9944f01388548)

Author SHA1 Message Date
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 da6a458d71
fix: output dir of console (#3591)
#### What type of PR is this?

/kind bug
/area console

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

修正 Console 构建的输出目录,此问题由 https://github.com/halo-dev/halo/pull/3552 导致。

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

```release-note
None
```
2023-03-27 08:34:11 +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
Ryan Wang 9a00a74f06
feat: add dropdown component to refactor the action buttons (#3576)
#### What type of PR is this?

/kind improvement
/area console
/milestone 2.4.x

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

在 `@halo-dev/components` 添加 Dropdown 组件用于统一 Console 端所有下拉框的样式和表现,同时方便插件使用。

<img width="1408" alt="image" src="https://user-images.githubusercontent.com/21301288/227758168-ed6f40ef-8627-4d5a-8a4a-476badf5196d.png">
<img width="992" alt="image" src="https://user-images.githubusercontent.com/21301288/227758184-01bf61a0-f778-4ba8-aaea-f6b99715b577.png">

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

Fixes #2987 

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

```release-note
Console 端添加 Dropdown 组件以统一所有下拉框的样式和表现。
```
2023-03-27 08:06:13 +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
Ryan Wang 5b3b473cb3
refactor: use tanstack query to refactor theme-related fetching (#3588)
#### What type of PR is this?

/kind improvement

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

使用 [TanStack Query](https://github.com/TanStack/query) 重构主题相关数据请求的相关逻辑。

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

Ref https://github.com/halo-dev/halo/issues/3360

#### Special notes for your reviewer:

测试方式:

1. 测试主题管理列表的数据是否加载正常。
2. 测试预览主题弹框中设置数据是否加载正常。

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

```release-note
None
```
2023-03-27 07:56:17 +00:00
Ryan Wang bd9f590c1e
perf: improve styles of bottom menu in mobile devices (#3577)
#### What type of PR is this?

/kind improvement
/area console
/milestone 2.4.x

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

优化移动端底部菜单栏的布局和样式。

before:

<img width="349" alt="image" src="https://user-images.githubusercontent.com/21301288/227410375-87e7b6bb-1528-425e-ac58-fdba809c2bf3.png">

after:

<img width="394" alt="image" src="https://user-images.githubusercontent.com/21301288/227410199-9fb04304-0ff3-4a8f-9a9f-38a5031b0c05.png">

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

Fixes #3575 

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

```release-note
优化 Console 在移动端下底部菜单栏的布局和样式。
```
2023-03-27 07:50:15 +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
Ryan Wang 1c89638f7e
fix: unable to login again after using oauth providers login (#3571)
#### What type of PR is this?

/kind bug
/area console

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

修复使用非本地认证登录之后,无法重新登录的问题。此问题来源是三方登录方式登录之后没有在 localStorage 存入 `logged_in` 的 flag。并且在引入匿名用户之后,本身也不再需要这个 flag。

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

Fixes #3569 

#### Special notes for your reviewer:

测试方式:

1. 使用 https://github.com/halo-sigs/plugin-oauth2/pull/3 插件配置 OAuth 2 的登录方式。
2. 在个人资料中绑定配置的登录方式。
3. 测试登录之后退出,再进行登录。

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

```release-note
None
```
2023-03-23 14:52:34 +00:00
Ryan Wang e759dd505f
feat(components): add disabled prop supports for switch component (#3564)
#### What type of PR is this?

/kind improvement
/area console

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

为 Switch 组件添加 disabled 属性以支持禁用。

<img width="1403" alt="image" src="https://user-images.githubusercontent.com/21301288/226829739-914eca3d-6d33-4d8c-9cc8-fe19b655ad9d.png">

#### Special notes for your reviewer:

1. `cd path/to/console/packages/components`
2. `pnpm story:dev`
3. 测试 Switch 组件的 disabled 属性是否工作正常。

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

```release-note
None
```
2023-03-23 14:16:34 +00:00
Ryan Wang 066e5e9462
perf: improve layout of comment list item (#3563)
#### What type of PR is this?

/kind improvement
/area console

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

优化评论管理列表项的布局,将被评论页面放置在评论内容上方,看起来更加直观。

before:

<img width="1399" alt="image" src="https://user-images.githubusercontent.com/21301288/226825923-6d2fec5b-c2d9-4d32-8502-255afac7d0ca.png">

after:

<img width="1396" alt="image" src="https://user-images.githubusercontent.com/21301288/226825785-db6e8696-4e99-43c2-b7a9-3e8b1edb09d9.png">

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

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

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

```release-note
优化 Console 端评论管理列表项的布局
```
2023-03-23 14:04:34 +00:00
Ryan Wang 194850bc80
fix: the issue of local cache not being cleared after saving a new post (#3551)
#### What type of PR is this?

/kind bug
/area console

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

修复新建文章或页面保存后,本地内容缓存可能不会及时清空的问题。

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

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

#### Special notes for your reviewer:

测试方式:

1. 连续创建多篇新的文章,然后反复进入新建页面,观察是否有恢复缓存的提示。

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

```release-note
修复新建文章或页面保存后,本地内容缓存可能不会及时清空的问题。
```
2023-03-23 13:52:36 +00:00
Ryan Wang 4ce5d0c2cf
refactor: use tanstack query to refactor user-related fetching (#3548)
#### What type of PR is this?

/kind improvement

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

使用 [TanStack Query](https://github.com/TanStack/query) 重构用户相关数据请求的相关逻辑。

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

Ref https://github.com/halo-dev/halo/issues/3360

#### Special notes for your reviewer:

测试方式:

1. 测试用户管理列表的数据请求 + 条件筛选是否正常。
2. 测试修改当前登录用户和其他用户的信息和密码是否正常。

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

```release-note
None
```
2023-03-23 13:44:34 +00:00
Ryan Wang 0503c5ff2e
perf: disable browser's autocomplete feature for password input field (#3550)
#### What type of PR is this?

/kind improvement
/area console

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

默认禁用 password 输入框的浏览器自动填充,实现方式为默认给 type 为 password 的 input 添加 `autocomplete="new-passwrod"` 属性。如果需要自动填充,手动为组件添加 `autocomplete` 属性即可。

此改动主要是针对非登录表单场景的密码输入框来做优化,在这些场景下,浏览器如果自动填充用户保存的用户名密码,会带来一定的干扰。

<img width="1103" alt="image" src="https://user-images.githubusercontent.com/21301288/226558568-bf617be7-0cd8-44db-a123-f230a2b88181.png">

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

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

#### Special notes for your reviewer:

1. 登录 Console,并将用户名和密码保存在浏览器的密码管理器。
2. 然后进入任意使用了密码输入框的页面,检查是否自动填充了密码。推荐使用 https://github.com/halo-sigs/plugin-s3 测试。

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

```release-note
禁用非登录场景下,密码输入框的浏览器自动填充
```
2023-03-23 13:42:35 +00:00
Ryan Wang b63d2b882c
feat: add i18n supports for console (#3506)
#### What type of PR is this?

/kind feature

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

为 Console 端添加多语言的支持,并默认提供简体中文和英文的语言包。

todolist:

- [x] 完善 Console 的文字语言包翻译。
- [ ] ~~为后端提供的部分数据支持翻译,比如系统设置的表单定义。(实现方式待讨论,这个 PR 先不支持)~~
- [x] 提供语言设置。

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

Fixes #3346 

#### Special notes for your reviewer:

测试方式:

1. 检查各个页面的文字显示是否正常。
2. 测试中英文环境中是否使用了对应的语言包。

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

```release-note
Console 端支持多语言界面
```
2023-03-23 08:54:33 +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
guqing 7ca5270238
feat: support the expansion of other authentication methods (#3520)
#### What type of PR is this?
/kind feature
/milestone 2.4.0
/area core

#### What this PR does / why we need it:
支持扩展其他登录方式:
1. 增加 AdditionalWebFilter 扩展点,插件只需要实现此扩展点完成 Filter 逻辑
2. 增加 DynamicMatcherSecurityWebFilterChain 用于将 `apiFilterChain` 的 `SecurityWebFilterChain` 委托给此类,需要认证的请求都会 DynamicMatcherSecurityWebFilterChain 的过滤器进行处理,所以 `AdditionalWebFilter` 可以通过 order 将扩展的过滤器放到这条链上的任何位置。
3. 将表单登录改为实现扩展点的实现
4. 增加 ExtensionPointDefinition 和 ExtensionDefinition 自定义模型用于对扩展点和扩展进行描述
5. 提供 AuthProvider 自定义模型用于记录支持的登录方式提供商
6. 提供 UserConnection 自定义模型用于将第三方登录账号信息与当前系统账户进行绑定

how to test it?
1. 测试表单登录功能是否正常
2. 测试插件的 plugin-oauth-github 的 PR https://github.com/halo-sigs/plugin-oauth-github/pull/3 功能是否正常

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

Fixes #3423

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

```release-note
支持扩展其他的认证方式
```
2023-03-21 03:54:28 +00:00
John Niang f7eb0cd522
Upgrade to Gradle 8.0.2 (#3543)
#### What type of PR is this?

/kind cleanup
/area core

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

Upgrade to Gradle 8.0.2 by using command `./gradlew wrapper --gradle-version 8.0.2 --distribution-type bin`.

Recently, we have a plan to restructure our project via Gradle 8, so I upgrade to Gradle 8.0.2 now.

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

```release-note
None
```
2023-03-21 02:44:27 +00:00
Ryan Wang e6d2607516
fix: search issue of post tag selection component (#3540)
#### What type of PR is this?

/kind bug
/area console

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

修复 FormKit 的文章标签搜索组件无法使用搜索功能的问题。

<img width="720" alt="image" src="https://user-images.githubusercontent.com/21301288/226311996-8f31bc6c-784e-4bf0-93da-cdc6db935822.png">

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

Fixed https://github.com/halo-dev/halo/issues/3536

#### Special notes for your reviewer:

测试方式:

1. 在文章设置中,测试标签选择输入框的搜索功能是否正常即可。

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

```release-note
修复文章设置中的标签选择组件无法正常搜索的问题。
```
2023-03-20 11:46:26 +00:00
guqing 5bc4a63e59
refactor: plugin development initializer (#3539)
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.4.x

#### What this PR does / why we need it:
去掉开发模式初始化器中加载插件的逻辑,以解决开发模式下启动插件时会遇到的问题
1. 重启插件/Halo启动时 PluginApplicationContext#hash has been closed already.
2. 卸载插件时 NullPointerException at pluginWrapper.getPlugin().stop() becuase 'pluginWrapper' is null
3. Halo 启动时 `Most likely this exception is thrown because the called constructor (xxx) cannot handle 'null' parameters. Original message was:  ...`
4. 以及启动插件后插件的 bean 没有被创建等
```shell
2023-03-20T13:28:02.811+08:00 ERROR 59170 --- [nReconciler-t-1] r.h.a.e.controller.DefaultController     : Reconciler in run.halo.app.core.extension.reconciler.PluginReconciler-worker-1 aborted with an error, re-enqueuing...

java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 10
	at java.base/java.util.ArrayList.fastRemove(ArrayList.java:642) ~[na:na]
	at java.base/java.util.ArrayList.remove(ArrayList.java:629) ~[na:na]
	at org.pf4j.AbstractPluginManager.resolvePlugins(AbstractPluginManager.java:797) ~[pf4j-3.9.0.jar:3.9.0]
	at org.pf4j.AbstractPluginManager.loadPlugin(AbstractPluginManager.java:204) ~[pf4j-3.9.0.jar:3.9.0]
	at run.halo.app.core.extension.reconciler.PluginReconciler.lambda$ensurePluginLoaded$17(PluginReconciler.java:495) ~[main/:na]
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) ~[na:na]
	at run.halo.app.core.extension.reconciler.PluginReconciler.ensurePluginLoaded(PluginReconciler.java:493) ~[main/:na]
	at run.halo.app.core.extension.reconciler.PluginReconciler.getPluginWrapper(PluginReconciler.java:322) ~[main/:na]
	at run.halo.app.core.extension.reconciler.PluginReconciler.lambda$readinessDetection$1(PluginReconciler.java:117) ~[main/:na]
	at java.base/java.util.Optional.map(Optional.java:260) ~[na:na]
	at run.halo.app.core.extension.reconciler.PluginReconciler.readinessDetection(PluginReconciler.java:107) ~[main/:na]
	at run.halo.app.core.extension.reconciler.PluginReconciler.lambda$reconcile$0(PluginReconciler.java:95) ~[main/:na]
	at java.base/java.util.Optional.map(Optional.java:260) ~[na:na]
	at run.halo.app.core.extension.reconciler.PluginReconciler.reconcile(PluginReconciler.java:87) ~[main/:na]
	at run.halo.app.core.extension.reconciler.PluginReconciler.reconcile(PluginReconciler.java:70) ~[main/:na]
	at run.halo.app.extension.controller.DefaultController$Worker.run(DefaultController.java:163) ~[main/:na]
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[na:na]
	at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264) ~[na:na]
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
	at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
```
这些异常信息都是因为原先的 PluginManager 实现不是线程安全的,在 webflux 下使用并且有 Reconciler 的情况下非常容易复现。
所以除了在 Reconciler 调用以外尽量保证 PluginManager 的调用是单线程的,以避免 PluginManager 出现线程安全问题。

how to test it?
在开发模式下配置插件的 fixedPath 来检查差价启用功能是否正常。

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

```release-note
None
```
2023-03-20 10:06:26 +00:00
guqing e5bbf48360
refactor: the acquisition method of role rules and no longer obtain aggregated by reconciler (#3425)
#### What type of PR is this?
/kind improvement
/area core
#### What this PR does / why we need it:
修复角色模板规则改动后用户权限不更新的问题
- 权限校验的地方由原来的从角色 annotations 获取聚合 rules 改为根据角色名称查询所有依赖角色再判断
- console 端获取 UI 权限的地方由获取聚合的 ui-permissions annotation 改为根据角色名称查询所有依赖角色组合后再返回

see #3325 for more detail.
问题描述:
1. 创建一个角色比如叫 test-role 将其分配给一个新用户
2. 安装插件 [plugin-links-1.1.0.jar.zip](https://github.com/halo-dev/halo/files/10856628/plugin-links-1.1.0.jar.zip),该插件提供了一个角色模板配置了 links 但没有配置 groups,当将此插件的查看权限分配给 test-role 后,test-role 会提示 groups 403无权限
3. 使用[plugin-links-1.1.0-after.jar.zip](https://github.com/halo-dev/halo/files/10856695/plugin-links-1.1.0-after.jar.zip) 升级插件后写了,插件已经修复了 gorups 的权限模板配置,期望 test-role 到链接管理菜单不会报 groups 403,但实际得到了 403 就是因为 test-role 角色依赖了一些其他角色但其他角色权限的改动没有办法通知到 test-role 去更新 test-role 中聚合的 dependency-rules annotation
4. 综上所述改为了直接查询

how to test it?
1. 根据上述问题描述中的步骤来测试,期望升级插件后能正确查看链接
2. 测试为一些角色分配权限后,拥有此角色的用户能正确访问那些资源不会出现403
3. 用户访问没有权限的资源会 403

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

#### Does this PR introduce a user-facing change?
```release-note
修复角色模板规则改动后用户权限不更新的问题
```
2023-03-20 06:26:10 +00:00
Ryan Wang 2c3f9ef7dc
chore: remove unused vars and imports to fix eslint warning (#3526)
#### What type of PR is this?

/kind improvement
/area console

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

移除 Console 未使用的变量和导入,解决 ESLint 的警告。

<img width="854" alt="image" src="https://user-images.githubusercontent.com/21301288/225866000-f9448643-064a-4d2b-b023-387f81f0ca8e.png">
<img width="877" alt="image" src="https://user-images.githubusercontent.com/21301288/225866074-ead93a6c-f37f-4711-941c-4bdbbfe0fbe7.png">

```release-note
None
```
2023-03-18 04:34:31 +00:00
Ryan Wang 69f7b18aad
chore: bump formkit version to 0.16.2 (#3527)
#### What type of PR is this?

/kind improvement
/area console

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

升级 FormKit 的版本到 0.16.2。

- https://formkit.com/changelog#0160-beta-16

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

```release-note
升级 Console 端的 FormKit 的版本到 0.16.2。
```
2023-03-18 02:38:33 +00:00
yang b7702efbed
fix: the rawType of Content was not updated when switching editors (#3516)
#### What type of PR is this?

/kind bug


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

修复在新建文章时,首次切换编辑器后没有设置内容 rawType 资源为对应编辑器类型的问题。

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

Fixes #3512 

#### Special notes for your reviewer:

测试方式:

1. 安装任意一个编辑器插件,比如:https://github.com/halo-sigs/plugin-stackedit
1. 新建文章,选择安装的编辑器。
1. 发布文章。
1. 卸载或者停止编辑器。
1. 重新编辑刚刚创建的文章,如果提示 `未找到符合 markdown 格式的编辑器,请检查是否已安装编辑器插件` 则代表正常。

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

```release-note
修复在新建文章时,首次切换编辑器后没有设置内容 rawType 资源为对应编辑器类型的问题。
```
2023-03-15 03:12:26 +00:00
longjuan f43888bc2c
fix: RSA key cannot be saved normally in the Windows environment (#3510)
<!--  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?
/kind bug
/area core
<!--
添加其中一个类别:
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
-->

#### What this PR does / why we need it:
修复Windows下开发环境不能正常保存Rsa密钥
#### 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 https://github.com/halo-dev/halo/issues/3497

#### Special notes for your reviewer:
windows不支持posix标准,也无法精细控制用户访问权限,因此在不支持posix的系统直接不设置权限。
https://stackoverflow.com/questions/21541455/how-to-check-if-the-os-is-posix-compliant
#### 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-03-14 02:58:17 +00:00
Ryan Wang 86ee91a92e
chore: remove issues triage action config files (#3503)
#### What type of PR is this?

/kind improvement

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

移除在 https://github.com/halo-dev/halo/pull/1416 中引入的通过 GitHub Actions 来实现 ChatOps 的配置文件,目前已经使用了 Prow 代替。

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

```release-note
None
```
2023-03-13 11:58:17 +00:00
Ryan Wang 684961023b
perf: add supports for force updating of post and single page settings (#3498)
#### What type of PR is this?

/kind improvement

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

支持强制保存文章和单页面的设置,绕开后端 version 锁的机制,因为目前发现在后端 Reconcile 处理文章较慢时会影响文章的保存。

需要注意的是,这是一个不太合理的处理方式,但目前别无选择。

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

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

#### Special notes for your reviewer:

测试方式:

1. 同时打开多个同文章的编辑页面的窗口。
2. 编辑任意一个窗口的文章设置。
3. 然后再去其他窗口保存,观察是否有异常。

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

```release-note
支持强制保存文章和页面的设置,避免因为 Version 锁的机制导致保存失败。
```
2023-03-12 10:42:15 +00:00
longjuan 0384ed7df5
Make login page use custom favicon (#3484)
<!--  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?
/kind improvement
/area console
/area core
<!--
添加其中一个类别:
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
-->

#### What this PR does / why we need it:
console 端登陆页使用自定义favicon
#### 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 https://github.com/halo-dev/halo/issues/3285

#### Special notes for your reviewer:
在`/actuator/globalinfo`暴露favicon信息,异步获取favicon信息,未获取到数据时浏览器短暂使用默认的`/console/favicon.ico`。
#### 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
console 端登陆页使用自定义favicon
```
2023-03-09 08:18:12 +00:00
John Niang d192b8c956
Support logging in with encrypted password (#3480)
#### What type of PR is this?

/kind feature
/kind api-change
/area core
/area console
#### What this PR does / why we need it:

This PR creates AuthenticationWebFilter by ourselves instead of using FormLoginSpec directly. Because we have no chance to customize `org.springframework.security.web.server.authentication.ServerAuthenticationConverter` currently.

Meanwhile, we provide CryptoService(RSA) to generate key pair, get public key and decrypt message encrypted by public key.

There is a new endpoint to get public key which is used by console:

```bash
❯ curl localhost:8090/login/public-key -s | jq .
{
  "base64Format": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAouDtdDS751U8NcWfAAQ53ijEtkLnIHh1Thqkq5QHGslq2hBmWnNsIZFnc/bwVp00ImKLV2NtLgOuv5RRNS5iO+oqRvfOGdXLdW2nzqU2towtaMkYTEMJrsNMZp5BUNCGI7Z2xpPBZzvys0d1BvcpNFobX/LkOtcTyfB1DRp9ZAhxRYOZkTkCzaKo+6X11lnMexTsB3exzaXk9rRZ8XoJ+dWT5G0URs/PF2cDkgxuMdOFJzqDsb9HQYGI/etajdCcKs7mZsjmDgse9Cw9/3mgoTNnEGx9Wl89S0P+FJ7T5DALGt3/nSAlzmKdXJNBLf6Q44ogFpTWdq27JpJD3SKicQIDAQAB"
}
```

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

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

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

```release-note
支持登录时密码加密传输
```
2023-03-08 09:52:12 +00:00
John Niang df2300144e
Fix the problem of failure to create and publish post (#3441)
#### What type of PR is this?

/kind bug
/area core
/milestone 2.3.x

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

Refactor retry logic of publishing, unpublishing and recycling post. Because the logic was misused before.

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

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

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

```release-note
解决文章创建和发布经常失败的问题
```
2023-03-08 09:42:11 +00:00
Ryan Wang 4ba3cfb64d
feat: add support for refreshing search engine indexes (#3475)
#### What type of PR is this?

/kind feature

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

在 Console 端仪表盘的快捷访问中添加刷新搜索引擎索引的入口。

![2023-03-07 13 48 52](https://user-images.githubusercontent.com/21301288/223332020-6d4e143e-e024-46ce-a84c-96ea3813cec0.gif)

#### Special notes for your reviewer:

1. 测试仪表盘快捷访问中的刷新搜索引擎操作是否可以正常调用接口即可。
2. 分配一个不包含文章管理权限的角色给某个用户,检查是否可以看到这个刷新的入口。

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

```release-note
Console 端仪表盘的快捷访问中添加刷新搜索引擎索引的入口。
```
2023-03-08 09:32:11 +00:00
Ryan Wang 80a3fa803f
chore: bump uppy version to fix crash on chrome browser (#3481)
#### What type of PR is this?

/kind bug

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

修复在非安全情况下(非 HTTPS 环境或本地环境),在 [Chromium](https://www.chromium.org/) 内核的浏览器下拖拽文件上传出现浏览器崩溃的问题。

修复来源:

- https://github.com/transloadit/uppy/releases/tag/uppy%403.6.0
- https://github.com/transloadit/uppy/pull/4310

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

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

#### Screenshots:

before:

![2023-03-08 10 59 02](https://user-images.githubusercontent.com/21301288/223609341-222f62d2-630a-4ee8-ba8f-2fb3c78fcca7.gif)

after:

![2023-03-08 11 00 06](https://user-images.githubusercontent.com/21301288/223609353-857f6559-cc9c-482f-9b46-713430621bb6.gif)

#### Special notes for your reviewer:

测试方式:

1. 需要先执行 `make -C console install` 以更新 Console 的依赖。
2. 使用非 localhost 或者 127.0.0.1 访问 Halo 后台,本地环境可以使用 192.168.x.x 访问。
3. 在 Console 的附件管理测试拖拽文件上传,观察浏览器是否崩溃。

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

```release-note
修复非 HTTPS 环境下,在 Chromium 内核浏览器拖拽上传文件时出现浏览器崩溃的问题。
```
2023-03-08 09:30:13 +00:00
guqing ce9c33c816
fix: posts and pages cannot be counted for visits (#3471)
#### What type of PR is this?
/kind bug
/area core
/milestone 2.3.x

#### What this PR does / why we need it:
修复文章和自定义页面缺失 name 模型属性导致的访问量无法计数问题
此为 2.3.0 引入的问题 see #3300

how to test it?
1. 切换文章的路由为不带 name 的规则
2. 访问文章看 `/apis/api.halo.run/v1alpha1/trackers/counter` API 是否有如下参数,且 name 值正确
```json
{
    "group": "content.halo.run",
    "plural": "posts",
    "name": "335",
    "hostname": "localhost",
    "screen": "1920x1080",
    "language": "zh-CN",
    "url": "/?p=halo-150-released",
    "referrer": "http://localhost:8090/?p=how-to-development-a-halo-plugin"
}
```
3. 观察文章访问量是否有增加
4. 重复上述 2、3 步骤检查自定义页面的访问量功能是否正确

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

Fixes #3448

#### Does this PR introduce a user-facing change?
```release-note
修复文章和自定义页面缺失属性导致的访问量无法计数问题
```
2023-03-08 09:22:11 +00:00
guqing 633c489503
fix: sorting problem using email comments (#3458)
#### What type of PR is this?
/kind bug
/area core
/milestone 2.3.x

#### What this PR does / why we need it:
修复使用邮箱评论时 `spec.creationTime` 没有填充导致排序不正确

how to test it?
1. 迁移数据,看是否 `spec.creationTime` 与 `spec.approvedTime` 相等
2. 使用邮箱评论看是否在 Console 评论列表排在第一位

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

#### Does this PR introduce a user-facing change?
```release-note
修复使用邮箱评论时的排序问题
```
2023-03-08 09:04:12 +00:00
wzrove 6ace36289b
fix: the issue of blank content when opening a saved post in StackEdit editor plugin for editing (#3468)
#### What type of PR is this?
/kind bug

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

在编辑器初始化前赋值,可以保证缓存的历史数据附在StackEdit的url上。

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

Fixes (https://github.com/halo-dev/halo/issues/3105)

#### Screenshots:
![test](https://user-images.githubusercontent.com/88016243/222957520-b7980ff9-aeeb-4e98-9dde-50eb307f02eb.gif)

#### Special notes for your reviewer:

+ 新建文章,切换为 StackEdit 编辑器
+ 输入一些内容保存/发布文章
+ 回到文章列表,重新点进刚才的文章
+ 重复步骤3,输入的内容还在

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


```release-note
修复 Console 端在使用三方编辑器插件编辑文章时可能出现无法加载内容的问题。
```
2023-03-08 02:50:11 +00:00
Ryan Wang bc186a4225
chore: solving the issue of generating API client causing unnecessary diffs (#3465)
#### What type of PR is this?

/kind improvement

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

为 springdoc 添加 `writer-with-order-by-keys` 参数以固定 OpenAPI 中接口的参数顺序,防止重新生成 `api-client` 时因为参数顺序不同而造成不必要的 diff。

#### Special notes for your reviewer:

测试方式:

1. 反复执行 `make -C console api-client-gen`
2. 观察是否有产生 diff

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

```release-note
None
```
2023-03-07 14:14:14 +00:00
John Niang 16a83b9e0e
Improve the quality of full-text searching result (#3457)
#### What type of PR is this?

/kind improvement
/area core

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

This PR uses QueryParser to build Query instead of FuzzyQuery to improve the searching result quality.

<img width="930" alt="image" src="https://user-images.githubusercontent.com/16865714/223012862-1decfde8-be81-48d1-a3a9-6601b5fd299a.png">

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

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

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

```release-note
优化搜索查询结果
```
2023-03-07 03:48:13 +00:00
John Niang 062af6fcad
Update Spring Boot to 3.0.4 (#3451)
#### What type of PR is this?

/kind improvement
/area core

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

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

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

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

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

```release-note
升级 Spring Boot 至 3.0.4
```
2023-03-06 03:44:11 +00:00
John Niang c43a81058a
Refactor workflow for new console project (#3445)
Signed-off-by: johnniang <johnniang@fastmail.com>
2023-03-02 18:07:23 +08:00
johnniang 5956931e41 Move console repository into halo with histories 2023-03-02 16:23:09 +08:00
johnniang 64919f9a1b Move root to console
Signed-off-by: johnniang <johnniang@fastmail.com>
2023-03-02 15:49:22 +08:00
John Niang df70de671f
Update Halo version to 2.4.0-SNAPSHOT (#3434)
#### What type of PR is this?

/kind cleanup
/area core

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

Update Halo version to 2.4.0-SNAPSHOT for next development.

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

```release-note
None
```
2023-03-01 11:06:19 +00:00
Ryan Wang ff9081cccc perf: mute the start plugin request in setup page (halo-dev/console#897)
#### What type of PR is this?

/kind improvement

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

隐藏在初始化页面启用插件时的错误提示,因为会重试三次,所以不需要提示。

```release-note
None
```
2023-03-01 04:08:18 +00:00
John Niang 01306b0b5a
Add downloadPluginPresets task (#3427)
#### What type of PR is this?

/kind feature
/area core

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

Add downloadPluginPresets task to download plugin presets from GitHub release.

```bash
> Task :downloadPluginPresets
Download https://github.com/halo-sigs/plugin-comment-widget/releases/download/v1.2.0/plugin-comment-widget-1.2.0.jar
Download https://github.com/halo-sigs/plugin-sitemap/releases/download/v1.0.1/plugin-sitemap-1.0.1.jar
Download https://github.com/halo-sigs/plugin-feed/releases/download/v1.1.0-beta.1/plugin-feed-1.1.0-beta.1.jar
Download https://github.com/halo-sigs/plugin-search-widget/releases/download/v1.0.0/plugin-search-widget-1.0.0.jar

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

See https://docs.gradle.org/7.4/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 1s
1 actionable task: 1 executed
10:47:59 AM: Execution finished 'downloadPluginPresets'.
```

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

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

#### Special notes for your reviewer:

Try to download plugin presets and check theme by using following commands:

```bash
./gradlew downloadPluginPresets

ls -lah src/main/resources/presets/plugins 
```

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

```release-note
None
```
2023-03-01 03:48:18 +00:00
guqing af07b42b42
feat: add indexer implementation to solve the slow tag stats (#3420)
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.3.x

#### What this PR does / why we need it:
修复标签关联文章数量统计不正确的问题
1. 实现简要的 Indexer 可以通过 IndexFunc 来提取需要构建 indacates 的信息,比如对文章的标签和 labels 建立 indacates
2. Indexer 通过 Watch 文章数据来维护 Indicates 使其与数据库一致
3. TagReconciler 一分钟 requeue 一次,但直接通过 Indexer 获取文章名称来统计数量,无需 list 文章数据

how to test it?
1. 创建文章并绑定标签
2. 测试文章关联标签,关联多个标签、解除旧标签绑定等操作是否会在一分钟后在标签处正确显示文章数量
4. 查看主题端标签下文章数量统计是否正确
5. 重复上述操作多次

#### Which issue(s) this PR fixes:
Fixes #3311, #3312

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

```release-note
修复标签关联文章数量统计不正确的问题,优化标签数量多时耗时长的问题
```
2023-03-01 03:44:25 +00:00
Ryan Wang bd9c4dabf7 refactor: use tanstack query to refactor comment-related fetching (halo-dev/console#892)
#### What type of PR is this?

/kind improvement

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

使用 [TanStack Query](https://github.com/TanStack/query) 重构评论管理相关数据请求的相关逻辑。

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

Ref https://github.com/halo-dev/halo/issues/3360

#### Special notes for your reviewer:

测试方式:

1. 测试评论管理列表的数据请求 + 条件筛选无异常即可。

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

```release-note
None
```
2023-02-28 15:46:18 +00:00
guqing aba151f54c
refactor: add retry operation to single page publishing (#3422)
#### What type of PR is this?
/kind improvement
/area core
/milestone 2.3.x
#### What this PR does / why we need it:
修复初始化时自定义页面会发布失败的问题

#### Which issue(s) this PR fixes:
Fixes #3279
#### Does this PR introduce a user-facing change?
```release-note
None
```
2023-02-28 15:30:18 +00:00
Ryan Wang 9646d411da chore: release 2.3.0 (halo-dev/console#896)
#### What type of PR is this?

/kind improvement
/milestone 2.3.0

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

发布 2.3.0。

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


```release-note
None
```
2023-02-28 15:28:18 +00:00