Commit Graph

4299 Commits (1b6d0817507907a29b7dff2265433e67d28992b3)

Author SHA1 Message Date
Ryan Wang 1b6d081750
feat: add mouse hover style to the default type of button (#4108)
#### What type of PR is this?

/area console
/kind improvement
/milestone 2.7.x

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

为默认类型的按钮添加鼠标悬浮的样式。

<img width="333" alt="image" src="https://github.com/halo-dev/halo/assets/21301288/922dd681-a2f1-4875-adef-9d1c5a075467">

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

Fixes #4067 

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

```release-note
Console 端默认类型的按钮添加鼠标悬浮的样式。
```
2023-06-25 06:28:14 +00:00
Ryan Wang e658097b99
fix: modal height issue in ios devices (#4106)
#### What type of PR is this?

/area console
/kind improvement
/milestone 2.7.x

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

优化 VModal 组件在 iOS 设备上底部和顶部被遮挡的问题,解决方案来自于:https://github.com/Faisal-Manzer/postcss-viewport-height-correction

| before                                                       | After                                                        |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| ![IMG_0319](https://github.com/halo-dev/halo/assets/21301288/71d15e51-5cf9-402e-b6ce-fff4e1014f72) | ![IMG_0315](https://github.com/halo-dev/halo/assets/21301288/6c3b4b75-2029-4b32-8dcc-eead3e479ab1) |
| ![IMG_0318](https://github.com/halo-dev/halo/assets/21301288/b4f586b4-34e1-48ea-97ed-7f1f70184346) | ![IMG_0316](https://github.com/halo-dev/halo/assets/21301288/7dee64bb-2328-44ef-a9f6-534ea4c005fe) |

<!--fuck apple, fuck safari-->

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

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


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

```release-note
优化 Console 端弹框组件(VModal)在 iOS 设备的高度问题。
```
2023-06-25 02:06:14 +00:00
Ryan Wang f6a6b25dd6
chore: bump formkit version to 0.17.3 (#4103)
#### What type of PR is this?

/area console
/kind improvement
/milestone 2.7.x

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

升级 FormKit 的版本至 0.17.3

- https://formkit.com/changelog
- https://github.com/formkit/formkit/releases/tag/0.17.0
- https://github.com/formkit/formkit/releases/tag/0.17.3

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

Fixes #3951 

#### Special notes for your reviewer:

测试 Console 端各个表单功能是否正常即可。

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

```release-note
升级 Console 端 FormKit 的依赖版本至 0.17.3
```
2023-06-21 08:28:13 +00:00
John Niang 5e9e87582e
Refactor setting of problem detail type (#4099)
#### What type of PR is this?

/kind improvement
/area core

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

Define a global map to mapping exception to problem detail type.

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

```release-note
None
```
2023-06-21 04:40:12 +00:00
John Niang 12a426c9ae
Exclude WebSocket request when serving console index (#4096)
#### What type of PR is this?

/kind bug
/area core

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

This PR excludes WebSocket request when serving console index and remove request predicate accept in ConsoleProxyFilter.

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

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

#### Special notes for your reviewer:

1. Start Console with dev environment
2. Start Halo with dev profile
3. Try to browse <http://localhost:8090/console> and check the log

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

```release-note
修复开发环境下访问 Console 出现错误的问题
```
2023-06-21 03:42:12 +00:00
John Niang a19f342b47
Fix the problem of logging in successfully even if request not permitted (#4101)
#### What type of PR is this?

/kind bug
/area core

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

This is a bug introduced from https://github.com/halo-dev/halo/pull/4062. I have overridden onAuthenticationSuccess to create rate limiter in advance instead of invoking `securityContextRepository#save` before.

See https://github.com/halo-dev/halo/pull/4099#issuecomment-1598074131 for more.

#### Special notes for your reviewer:

1. Try to log in with incorrect password three times
2. Log in with correct password and check if the response headers contain `Set-Cookie`

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

```release-note
None
```
2023-06-21 03:26:12 +00:00
Ryan Wang 2fd9cbde33
feat: add support for selecting the parent category when creating a new category (#4056)
#### What type of PR is this?

/area console
/kind feature
/milestone 2.7.x

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

支持在创建分类的时候选择上级分类。

<img width="805" alt="image" src="https://github.com/halo-dev/halo/assets/21301288/02912f70-4de4-4b8e-bbbe-f973fbd3e684">

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

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

#### Special notes for your reviewer:

测试方式:

1. 测试新建的时候指定上级分类的功能是否正常。
2. 点击某个分类的操作按钮,选择添加子分类的菜单项,检查在新建分类的表单中上级分类是否选中了此分类。

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

```release-note
Console 端的文章分类支持在新建时指定上级分类。
```
2023-06-19 02:54:11 +00:00
Ryan Wang 4a1fe8dd1e
perf: disallow repeated clicks when third-party login (#4066)
#### What type of PR is this?

/area console
/kind improvement
/milestone 2.7.x

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

在使用某个三方登录的时候,禁用其他三方登录,防止重复点击。

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

Fixes #4064 

#### Special notes for your reviewer:

测试方式:

1. 可安装 https://github.com/halo-sigs/plugin-oauth2 进行测试,可以不用配置各个登录方式,只需开启即可。
2. 在登录页面点击某个三方登录方式,观察所有三方登录方式的按钮是否被禁用。

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

```release-note
优化 Console 端登录页面的三方登录方式按钮,禁用重复点击。
```
2023-06-19 02:36:10 +00:00
longjuan 1b581d5d6f
perf: remove html lang attribute in console (#4085)
#### What type of PR is this?
/kind improvement
/area console

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

去除`index.html`的`lang`属性以避免console端出现翻译提示

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

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

#### Special notes for your reviewer:

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


```release-note
避免 Console 端出现翻译提示
```
2023-06-19 01:30:10 +00:00
John Niang 02369fbd3c
Add rate limiter for login endpoint (#4062)
#### What type of PR is this?

/kind feature
/area core

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

This PR introduces https://github.com/resilience4j/resilience4j to archive the feature. The login endpoint has limited login failures at a rate of 3 per minute.

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

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

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

#### Special notes for your reviewer:

1. Start Halo.
2. Try to login with incorrect credential 4 times
3. Check the response.

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

```release-note
增加登录失败次数限制功能
```
2023-06-16 04:50:12 +00:00
guqing 350e54d42a
chore: bump google guava version to 32.0.1-jre (#4081)
#### What type of PR is this?
/milestone 2.7.x
/area core

#### What this PR does / why we need it:
升级 Google Guava 版本至 32.0.1-jre

Guava [31.1](https://github.com/google/guava/releases/tag/v31.1) 至 [32.0.1](https://github.com/google/guava/releases/tag/v32.0.1) 的变化:
1. 移除了部分 API 的 `@Beta` 注解进入稳定版
2. 关于 `Files.createTempDir` 方法的安全性修复 https://github.com/advisories/GHSA-7g45-4rm6-3mm3 (https://github.com/google/guava/issues/2575)

详情参考:https://github.com/google/guava/releases/tag/v32.0.0

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

```release-note
升级 Google Guava 版本至 32.0.1-jre
```
2023-06-15 14:30:12 +00:00
guqing 6d251a7f58
refactor: refresh the plugin wrapper when starting the plugin (#4023)
#### What type of PR is this?
/kind improvement
/kind bug
/area core
/area plugin
/milestone 2.6.x

#### What this PR does / why we need it:
修复插件重启后 MainClass 对象缓存未清除的问题

how to test it?
下载此插件:
[plugin-starter-1.0.0-SNAPSHOT.jar.zip](https://github.com/halo-dev/halo/files/11620847/plugin-starter-1.0.0-SNAPSHOT.jar.zip)

安装并启动插件,会看到类似如下日志:
```
测试从 [/var/folders/1z/3hlt62691tx63dxx6y0mryw00000gn/T/halo-plugin3709893537121269748.txt] 文件读取内容
插件启动成功!
```
修改日志中给出的文件的内容后 reload 插件会看到`插件启动成功!` 后会跟随最新的文件内容则表示 MainClass 是最新的状态没有缓存。

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

Fixes #4016

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

```release-note
修复插件重启后 MainClass 对象缓存未清除的问题
```
2023-06-14 10:08:14 +00:00
guqing 997a73d81b
fix: file path traversal vulnerability in theme and plugin resource APIs (#4072)
#### What type of PR is this?
/kind bug
/area core
/milestone 2.7.x

#### What this PR does / why we need it:
修复主题和插件静态资源的文件遍历漏洞

漏洞描述:
攻击者可以通过`/plugins/{name}/assets/console/{*resource}` 和 `/themes/{themeName}/assets/{*resource}` 的 resource 参数部分添加特殊字符(如 ../ 或 ..\)来绕过应用程序的访问控制,访问他们没有权限访问的文件或目录。

修复方法:
访问文件之前检查文件路径是否在被限制的目录下,如:
resource = /themes/default/templates/../../test
简化路径为 /themes/test
想限制路径在 `/themes/default/templates` 则已经越权拒绝访问

how to test it?
1. 访问例如 `localhost:8090/themes/theme-earth/assets/dist/../../../../../keys/id_rsa` 来检查获取上级目录,上上级目录是否可以访问到,必须只能访问到 themes/assets下的文件即为合理
2. 类似步骤 1 可以尝试`../`, `..\` 来访问 `localhost:8090/plugins/{name}/assets/console/{*resource}`,必须只能访问到插件的 `classpath:console/` 下的文件即为合理

#### Does this PR introduce a user-facing change?
```release-note
修复主题和插件静态资源的路径遍历漏洞
```
2023-06-14 08:36:13 +00:00
contour 636ec6329a
Fix AttachmentReconciler repeated execution (#4052)
<!--  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
<!--
添加其中一个类别:
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:
Fix AttachmentReconciler repeated execution.

#### 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 #3746

#### Special notes for your reviewer:
The reconile method in run.halo.app.core.extension.reconciler.attachment.AttachmentReconciler will be executed repeatedly, uploading an attachment will be executed twice, because updating the finalizers property will be in onUpdate of run.halo.app.extension.controller.ExtensionWatcher Will request duplicate addition, I provide a fix for you to review
#### 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
修复 AttachmentReconciler 重复执行
```
2023-06-10 14:48:14 +00:00
John Niang 31740e732f
Support configuration properties mechanism for plugin in Halo core (#4043)
#### What type of PR is this?

/kind feature
/area core
/area plugin

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

This PR adds property sources into PluginApplicationContext environment to support configuration properties mechanism.

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

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

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

#### Special notes for your reviewer:

You can verify the mechanism in [plugin-starter](https://github.com/halo-dev/plugin-starter) according to documentation `docs/developer-guide/plugin-configuration-properties.md`.

I've only tested it on macOS, looking forward to feedback on Windows.

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

```release-note
支持在插件中定义 @ConfigurationProperties 注解
```
2023-06-07 09:55:23 +00:00
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 430b5fb270
Bump Halo to 2.7.0-SNAPSHOT (#4026)
#### What type of PR is this?

/kind cleanup
/area core

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

Bump Halo to 2.7.0-SNAPSHOT for next development iteration.

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

```release-note
None
```
2023-06-01 08:13:15 +00:00
Ryan Wang 65b27eed6c
chore: release 2.6.0 (#4021)
#### What type of PR is this?

/area core

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

修改版本号,准备发布 2.6.0。

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

```release-note
None
```
2023-06-01 03:08:12 +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
Ryan Wang b37ec04c87
perf: improve the experience of redirection after login (#4014)
#### What type of PR is this?

/area console
/kind improvement
/milestone 2.6.x

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

优化 Console 端登录之后重定向的体验,解决在重定向时会重新显示登录页面的问题。

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

Fixes #4010 

#### Special notes for your reviewer:

测试方式与 https://github.com/halo-dev/halo/pull/3989 相同。

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

```release-note
None
```
2023-05-31 06:55:01 +00:00
John Niang ebcafe6117
Replace R2DBC MySQL driver to io.asyncer:r2dbc-mysql (#3918)
#### What type of PR is this?

/kind improvement
/area core

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

Replace R2DBC MySQL driver to io.asyncer:r2dbc-mysql. See https://github.com/halo-dev/halo/issues/3804 for more.

Please note that there will be an error like below when starting up Halo on MacOS:

```java
2023-05-09T14:24:45.161+08:00 ERROR 4668 --- [  restartedMain] i.n.r.d.DnsServerAddressStreamProviders  : Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library
```

After manual test, I haven't found any problems caused by the error. And this only occurs on MacOS when developing.

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

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

#### Special notes for your reviewer:

Steps to test:

1. Start up a MySQL server, e.g.:
    ```bash
    docker run -it --rm --name halodb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=openmysql -e MYSQL_DATABASE=halo mysql:8
    ```
3. Start Halo with mysql profile active
    ```bash
    make -C console dev
    ./gradlew bootRun --args="--spring.profiles.active=dev,mysql --halo.plugin.runtime-mode=deployment"
    ```
5. Check the functionality of Halo

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

```release-note
替换 R2DBC MySQL 驱动为:io.asyncer:r2dbc-mysql
```
2023-05-31 06:41: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
Ryan Wang ee1ea06171
fix: text content overflowing the container in the dialog component (#4007)
#### What type of PR is this?

/kind improvement
/area console
/milestone 2.6.x

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

修复 Console 端 Dialog 对话框组件中的文字内容可能会溢出容器的问题。

before:

<img width="623" alt="image" src="https://github.com/halo-dev/halo/assets/21301288/ca9817c6-66e4-41f0-8112-4308913efcf2">

after:

<img width="666" alt="image" src="https://github.com/halo-dev/halo/assets/21301288/9d64ee23-124c-434a-b8da-669cfd727dd0">


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

Fixes #4006 

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

```release-note
修复 Console 端 Dialog 对话框组件中的文字内容可能会溢出容器的问题。
```
2023-05-29 11:38:56 +00:00
John Niang 937d48b839
Fix the problem of deleting failed plugins for a long time (#4002)
#### What type of PR is this?

/kind bug
/area core
/milestone 2.6.x

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

This PR fixes the problem of deleting failed plugins for a long time by replacing older delayed entry in reconciler queue.

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

```release-note
修复长时间删除失败的插件问题
```
2023-05-29 09:10:56 +00:00
Ryan Wang e95caa2c21
refactor: use createWebHistory instead of createWebHashHistory (#4005)
#### What type of PR is this?

/kind improvement
/area console
/milestone 2.6.x

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

将 Console 的 Router 模式从 Hash History 改为 Web History。可以让路由看起来更加简洁,也方便在后端或者页面上构建路由。

文档:https://router.vuejs.org/zh/guide/essentials/history-mode.html

#### Special notes for your reviewer:

测试 Console 的各个页面是否正常访问即可。

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

```release-note
修改 Console 的路由模式为 HTML5 模式。
```
2023-05-29 08:48:55 +00:00
Ryan Wang 67e13546ae
chore: bump up version to 2.6.0-rc.1 (#3998)
#### What this PR does / why we need it:

修改版本号,准备发布 2.6.0-rc.1。

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

```release-note
None
```
2023-05-26 15:06:13 +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
Ryan Wang 533f0cfa66
feat: prompt to upgrade theme when installing existing theme (#3970)
#### What type of PR is this?

/kind feature
/area console
/milestone 2.6.x

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

支持在安装已存在主题时提示是否升级主题。

<img width="611" alt="image" src="https://github.com/halo-dev/halo/assets/21301288/2e99c781-96b6-4900-9a37-2d472ad65411">
<img width="604" alt="image" src="https://github.com/halo-dev/halo/assets/21301288/a7bfa9d8-1522-417f-91b4-6ea3f75f693e">


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

Fixes #3969 

#### Special notes for your reviewer:

测试方式:

1. 通过本地上传和远程下载的方式重复安装某个主题,观察是否可以正常提示升级以及测试升级是否正常。

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

```release-note
Console 端支持安装已存在主题时提示升级主题。
```
2023-05-25 14:40:18 +00:00
Ryan Wang 6dd98d2c0c
feat: add min and max props for repeater input (#3965)
#### What type of PR is this?

/area console
/kind feature
/milestone 2.6.x

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

Console 端的 FormKit Repeater 输入框支持 min 和 max 参数用于限制项目数量。

<img width="630" alt="image" src="https://github.com/halo-dev/halo/assets/21301288/541da770-0439-4731-a796-a58277c33e05">

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

Fixes #3449 

#### Special notes for your reviewer:

定义方式:

```yaml
- $formkit: repeater
  name: test_repeater
  label: 测试 Repeater
  min: 2
  max: 3
  children:
    - $formkit: text
      name: test_text
      label: 测试 Text
    - $formkit: select
      name: test_select
      label: 测试 Select
      options:
        - value: prose-gray
          label: prose-gray
        - value: prose-slate
          label: prose-slate
        - value: prose-zinc
          label: prose-zinc
        - value: prose-neutral
          label: prose-neutral
        - value: prose-stone
          label: prose-stone
```

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

```release-note
Console 端的 FormKit Repeater 输入框支持 min 和 max 参数用于限制项目数量。
```
2023-05-25 14:38:19 +00:00
Ryan Wang 537d511cc0
feat: login page supports redirect_uri parameter (#3989)
#### What type of PR is this?

/area console
/kind feature
/milestone 2.6.x

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

Console 端的登录页面支持登录之后重定向到某个链接(通过 redirect_uri 参数)。

支持一下链接形式:

1. 相对地址,比如 `/console#/plugins`、`/apps/app-links`
2. 绝对地址,仅限于同源地址,不支持非同源地址的重定向。

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

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

#### Special notes for your reviewer:

测试方式:

1. 在未登录的情况下访问如 `http://127.0.0.1:8090/console#/theme` 地址,观察登录之后是否会返回到这个页面。
2. 手动在登录页面构造如 `https://127.0.0.1:8090/console#/login?redirect_uri=/` 的地址,观察登录之后是否会跳转。

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

```release-note
Console 端的登录页面支持登录之后重定向到某个站内链接。
```
2023-05-25 14:30:18 +00:00
Ryan Wang 846138fe8c
chore: bump uppy packages (#3980)
#### What type of PR is this?

/kind improvement
/area console
/milestone 2.6.x

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

升级 Uppy 的所有 packages。

#### Special notes for your reviewer:

测试所有上传弹框是否可以正常使用即可。

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

```release-note
None
```
2023-05-25 13:38: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
Ryan Wang a6c923d83d
chore: bump eslint and prettier related packages version (#3981)
#### What type of PR is this?

/kind improvement
/area console
/milestone 2.6.x

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

升级 ESLint 和 Prettier 相关的包。

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

```release-note
None
```
2023-05-22 08:56:05 +00:00
翟佳宇 c22f158fa3
fix: fix plugin detail page protocol name duplication issue (#3977)
<!--  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
<!--
添加其中一个类别:
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:

修复插件详情页面协议名字重复出现的问题

#### 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/3971

#### 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-05-22 03:01:47 +00:00
翟佳宇 c3d01dd7c4
perf: improve the logic of input selection for category and tag (#3978)
<!--  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
<!--
添加其中一个类别:
Add one of the following kinds:
/kind improvement
/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:

改善分类和标签选择性输入框的输入逻辑

![Kapture 2023-05-22 at 01 20 41](https://github.com/halo-dev/halo/assets/106857035/cf2d60f5-9ec5-4e5c-99e2-e3cd7a97d692)


#### 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 #3959

#### 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-05-22 02:46:45 +00:00
b1d95fe06d
fix: add keyword search functionality to AuthProvider list (#3974)
#### What type of PR is this?

/kind bug

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

添加关键字搜索功能到认证方式列表

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

Fixes #3948

#### Special notes for your reviewer:

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


```release-note
修复 Console 端认证方式列表无法使用搜索的问题。
```
2023-05-19 16:29:50 +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
Ryan Wang 8deea08231
refactor: abnormal status display of plugin management (#3945)
#### What type of PR is this?

/kind improvement
/area console
/milestone 2.6.x

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

重构 Console 端插件异常状态的判断和显示,改动如下:

1. 移除插件名称旁边的启用状态。
2. 切换按钮的状态是期望值,意思就是不与插件实际状态一致。
3. 小红点出现的时机为:插件的实际状态与期望状态不一致以及插件本身出了异常。
4. 插件详情页面支持横幅显示插件异常状态。

<img width="1358" alt="image" src="https://github.com/halo-dev/halo/assets/21301288/42408d1f-7975-4aef-9373-d828994501b3">
<img width="1383" alt="image" src="https://github.com/halo-dev/halo/assets/21301288/033efdef-470b-4570-94c1-da64d9ea0db9">

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

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

#### Special notes for your reviewer:

测试方式:

1. 想办法将插件状态变成异常,比如在开发环境将 runtime-mode 改为 deployment。
2. 检查 Console 端插件管理中的 UI 表现是否和上面的描述一致。

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

```release-note
重构 Console 插件管理的异常状态显示。
```
2023-05-17 03:54:15 +00:00
Ryan Wang 017d5b8d8f
chore: async api client (#3941)
#### What type of PR is this?

/kind improvement
/area console

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

同步 api client。

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

```release-note
None
```
2023-05-16 10:18:51 +00:00
Ryan Wang 0ff11db111
refactor: improve the accessibility of action items in some data list (#3919)
#### What type of PR is this?

/kind improvement
/area console
/milestone 2.6.x

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

1. 移除 Entity 组件最外层容器的手型样式,避免出现可点击性的误导。
2. 为部分数据列表项操作提供更多的访问选项。
    1. 文章 / 页面列表添加编辑按钮。
    2. 插件列表项添加详情按钮。
    3. 附件列表项添加详情按钮。

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

Fixes #3914 

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

```release-note
优化 Console 端部分数据列表的可访问性
```
2023-05-16 10:16:55 +00:00
John Niang 88597ac137
Fix the problem of inconsistent OpenAPI generation (#3954)
#### What type of PR is this?

/kind bug
/area core
/milestone 2.6.x

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

Sort properties before building.

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

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

#### Special notes for your reviewer:

Try to generate api client several times.

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

```release-note
None
```
2023-05-16 07:04:18 +00:00
Li 136bd4e91f
fix: theme page displays error without management permissions. (#3938)
#### What type of PR is this?
/kind bug
/area console
/milestone 2.6.x

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

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

Fixes #3933 

#### Special notes for your reviewer:

1. 创建一个拥有主题查看而没有主题管理权限的角色,并为某个用户分配这个角色。
2. 使用该用户登录 console,点击主题选项卡查看控制台是否报错。

#### Does this PR introduce a user-facing change?
```release-note
修复没有主题管理权限时,进入主题功能页面报错的问题。
```
2023-05-15 06:43:55 +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
Ryan Wang 017bb55521
chore: bump pnpm version to 8 (#3935)
#### What type of PR is this?

/kind improvement
/area console
/milestone 2.6.x

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

升级 pnpm 的版本为 pnpm 8,更新 pnpm-lock.yaml 文件。

GitHub Actions 的改动将在 https://github.com/halo-sigs/actions

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

Fixes #3934 

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

```release-note
None 
```
2023-05-11 08:50:21 +00:00