diff --git a/Dockerfile b/Dockerfile
index 8cb50cdc5..f4d1f31af 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -2,14 +2,15 @@ FROM openjdk:8-jre-alpine
VOLUME /tmp
-ARG JAR_FILE=build/libs/halo.jar
+ARG JAR_FILE=build/libs/halo-1.1.0-beta.2.jar
ARG PORT=8090
ARG TIME_ZONE=Asia/Shanghai
ENV TZ=${TIME_ZONE}
+ENV JAVA_OPTS="-Xms256m -Xmx256m"
COPY ${JAR_FILE} halo.jar
EXPOSE ${PORT}
-ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","halo.jar"]
\ No newline at end of file
+ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -server -jar halo.jar
\ No newline at end of file
diff --git a/README.md b/README.md
index 0ebeb83a8..0ecbfeaef 100755
--- a/README.md
+++ b/README.md
@@ -1,12 +1,14 @@
-> Halo 是一款现代化的个人独立博客系统,给习惯写博客的同学一个更好的选择。
+> Halo 是一款现代化的个人独立博客系统,给习惯写博客的同学多一个选择。
+
+
-
+
@@ -19,26 +21,26 @@
轻快,简洁,功能强大,使用 Java 开发的博客系统。
-> [官网论坛](https://bbs.halo.run) | [QQ 交流群](https://jq.qq.com/?_wv=1027&k=5tnr930) | [Telegram 交流群](https://t.me/HaloBlog) | [Telegram 频道](https://t.me/halo_dev) | [WeHalo 小程序](https://github.com/aquanlerou/WeHalo)。
+> [官方社区](https://bbs.halo.run) | [QQ 交流群](https://jq.qq.com/?_wv=1027&k=5tnr930) | [Telegram 交流群](https://t.me/HaloBlog) | [Telegram 频道](https://t.me/halo_dev) | [WeHalo 小程序](https://github.com/aquanlerou/WeHalo)。
## 快速开始
### 下载最新的 Halo 安装包
```bash
-curl -L https://github.com/halo-dev/halo/releases/download/v1.0.3/halo-1.0.3.jar --output halo-latest.jar
+curl -L https://github.com/halo-dev/halo/releases/download/v1.1.0/halo-1.1.0.jar --output halo-latest.jar
```
或者
```bash
-wget https://github.com/halo-dev/halo/releases/download/v1.0.3/halo-1.0.3.jar -O halo-latest.jar
+wget https://github.com/halo-dev/halo/releases/download/v1.1.0/halo-1.1.0.jar -O halo-latest.jar
```
### 启动 Halo
```bash
-nohup java -jar halo-latest.jar >/dev/null 2>&1&
+java -jar halo-latest.jar
```
详细文档请移步:
@@ -70,32 +72,32 @@ nohup java -jar halo-latest.jar >/dev/null 2>&1&
## 预览图
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 149d7876c..dd059e8f9 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,5 +1,5 @@
plugins {
- id 'org.springframework.boot' version '2.1.3.RELEASE'
+ id 'org.springframework.boot' version '2.1.7.RELEASE'
id "io.freefair.lombok" version "3.6.6"
// id 'war'
id 'java'
@@ -9,7 +9,7 @@ apply plugin: 'io.spring.dependency-management'
group = 'run.halo.app'
archivesBaseName = 'halo'
-version = '1.0.3'
+version = '1.1.0'
sourceCompatibility = '1.8'
description = 'Halo, personal blog system developed in Java.'
@@ -24,6 +24,7 @@ repositories {
configurations {
implementation {
exclude module: 'spring-boot-starter-tomcat'
+ exclude module: 'slf4j-log4j12'
}
developmentOnly
@@ -40,6 +41,23 @@ bootJar {
}
}
+ext {
+ ohMyEmailVersion = '0.0.4'
+ hutoolVersion = '4.6.3'
+ upyunSdkVersion = '4.0.1'
+ qiniuSdkVersion = '7.2.18'
+ aliyunSdkVersion = '3.4.2'
+ baiduSdkVersion = '0.10.36'
+ qcloudSdkVersion = '5.5.7'
+ swaggerVersion = '2.9.2'
+ commonsLangVersion = '3.8.1'
+ httpclientVersion = '4.5.7'
+ dataformatYamlVersion = '2.9.2'
+ jgitVersion = '5.3.0.201903130848-r'
+ flexmarkVersion = '0.42.12'
+ thumbnailatorVersion = '0.4.8'
+}
+
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
@@ -47,34 +65,37 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-undertow'
implementation 'org.springframework.boot:spring-boot-starter-freemarker'
- implementation 'io.github.biezhi:oh-my-email:0.0.4'
- implementation 'cn.hutool:hutool-core:4.5.0'
- implementation 'cn.hutool:hutool-crypto:4.5.0'
- implementation 'cn.hutool:hutool-extra:4.5.0'
- implementation 'com.upyun:java-sdk:4.0.1'
- implementation 'com.qiniu:qiniu-java-sdk:7.2.18'
- implementation 'com.aliyun.oss:aliyun-sdk-oss:3.4.2'
- implementation 'net.coobird:thumbnailator:0.4.8'
- implementation 'io.springfox:springfox-swagger2:2.9.2'
- implementation 'io.springfox:springfox-swagger-ui:2.9.2'
- implementation 'org.apache.commons:commons-lang3:3.8.1'
- implementation 'org.apache.httpcomponents:httpclient:4.5.7'
- implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.9.2'
- implementation 'org.eclipse.jgit:org.eclipse.jgit:5.3.0.201903130848-r'
+ implementation "io.github.biezhi:oh-my-email:$ohMyEmailVersion"
+ implementation "cn.hutool:hutool-core:$hutoolVersion"
+ implementation "cn.hutool:hutool-crypto:$hutoolVersion"
+ implementation "cn.hutool:hutool-extra:$hutoolVersion"
+ implementation "com.upyun:java-sdk:$upyunSdkVersion"
+ implementation "com.qiniu:qiniu-java-sdk:$qiniuSdkVersion"
+ implementation "com.aliyun.oss:aliyun-sdk-oss:$aliyunSdkVersion"
+ implementation "com.baidubce:bce-java-sdk:$baiduSdkVersion"
+ implementation "com.qcloud:cos_api:$qcloudSdkVersion"
+ implementation "io.springfox:springfox-swagger2:$swaggerVersion"
+ implementation "io.springfox:springfox-swagger-ui:$swaggerVersion"
+ implementation "org.apache.commons:commons-lang3:$commonsLangVersion"
+ implementation "org.apache.httpcomponents:httpclient:$httpclientVersion"
+ implementation "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:$dataformatYamlVersion"
+ implementation "org.eclipse.jgit:org.eclipse.jgit:$jgitVersion"
- implementation 'com.vladsch.flexmark:flexmark:0.42.12'
- implementation 'com.vladsch.flexmark:flexmark-ext-attributes:0.42.12'
- implementation 'com.vladsch.flexmark:flexmark-ext-autolink:0.42.12'
- implementation 'com.vladsch.flexmark:flexmark-ext-emoji:0.42.12'
- implementation 'com.vladsch.flexmark:flexmark-ext-escaped-character:0.42.12'
- implementation 'com.vladsch.flexmark:flexmark-ext-gfm-strikethrough:0.42.12'
- implementation 'com.vladsch.flexmark:flexmark-ext-gfm-tasklist:0.42.12'
- implementation 'com.vladsch.flexmark:flexmark-ext-ins:0.42.12'
- implementation 'com.vladsch.flexmark:flexmark-ext-media-tags:0.42.12'
- implementation 'com.vladsch.flexmark:flexmark-ext-tables:0.42.12'
- implementation 'com.vladsch.flexmark:flexmark-ext-toc:0.42.12'
- implementation 'com.vladsch.flexmark:flexmark-ext-yaml-front-matter:0.42.12'
- implementation 'com.vladsch.flexmark:flexmark-html-parser:0.42.12'
+ implementation "com.vladsch.flexmark:flexmark:$flexmarkVersion"
+ implementation "com.vladsch.flexmark:flexmark-ext-attributes:$flexmarkVersion"
+ implementation "com.vladsch.flexmark:flexmark-ext-autolink:$flexmarkVersion"
+ implementation "com.vladsch.flexmark:flexmark-ext-emoji:$flexmarkVersion"
+ implementation "com.vladsch.flexmark:flexmark-ext-escaped-character:$flexmarkVersion"
+ implementation "com.vladsch.flexmark:flexmark-ext-gfm-strikethrough:$flexmarkVersion"
+ implementation "com.vladsch.flexmark:flexmark-ext-gfm-tasklist:$flexmarkVersion"
+ implementation "com.vladsch.flexmark:flexmark-ext-ins:$flexmarkVersion"
+ implementation "com.vladsch.flexmark:flexmark-ext-media-tags:$flexmarkVersion"
+ implementation "com.vladsch.flexmark:flexmark-ext-tables:$flexmarkVersion"
+ implementation "com.vladsch.flexmark:flexmark-ext-toc:$flexmarkVersion"
+ implementation "com.vladsch.flexmark:flexmark-ext-yaml-front-matter:$flexmarkVersion"
+ implementation "com.vladsch.flexmark:flexmark-html-parser:$flexmarkVersion"
+
+ implementation "net.coobird:thumbnailator:$thumbnailatorVersion"
runtimeOnly 'com.h2database:h2'
runtimeOnly 'mysql:mysql-connector-java'
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 135367700..87b738cbd 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 56c603f58..ba9e3b178 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Tue Apr 23 17:12:17 CST 2019
+#Mon Sep 09 12:27:59 CST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
diff --git a/gradlew b/gradlew
index cccdd3d51..af6708ff2 100755
--- a/gradlew
+++ b/gradlew
@@ -28,7 +28,7 @@ APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
+DEFAULT_JVM_OPTS='"-Xmx64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
diff --git a/gradlew.bat b/gradlew.bat
index e95643d6a..0f8d5937c 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -14,7 +14,7 @@ set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
+set DEFAULT_JVM_OPTS="-Xmx64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
diff --git a/src/main/java/run/halo/app/cache/InMemoryCacheStore.java b/src/main/java/run/halo/app/cache/InMemoryCacheStore.java
index 4ef7789a1..b492c2215 100644
--- a/src/main/java/run/halo/app/cache/InMemoryCacheStore.java
+++ b/src/main/java/run/halo/app/cache/InMemoryCacheStore.java
@@ -27,7 +27,7 @@ public class InMemoryCacheStore extends StringCacheStore {
/**
* Cache container.
*/
- private final static ConcurrentHashMap> cacheContainer = new ConcurrentHashMap<>();
+ private final static ConcurrentHashMap> CACHE_CONTAINER = new ConcurrentHashMap<>();
private final Timer timer;
@@ -46,7 +46,7 @@ public class InMemoryCacheStore extends StringCacheStore {
Optional> getInternal(String key) {
Assert.hasText(key, "Cache key must not be blank");
- return Optional.ofNullable(cacheContainer.get(key));
+ return Optional.ofNullable(CACHE_CONTAINER.get(key));
}
@Override
@@ -55,7 +55,7 @@ public class InMemoryCacheStore extends StringCacheStore {
Assert.notNull(cacheWrapper, "Cache wrapper must not be null");
// Put the cache wrapper
- CacheWrapper putCacheWrapper = cacheContainer.put(key, cacheWrapper);
+ CacheWrapper putCacheWrapper = CACHE_CONTAINER.put(key, cacheWrapper);
log.debug("Put [{}] cache result: [{}], original cache wrapper: [{}]", key, putCacheWrapper, cacheWrapper);
}
@@ -90,7 +90,7 @@ public class InMemoryCacheStore extends StringCacheStore {
public void delete(String key) {
Assert.hasText(key, "Cache key must not be blank");
- cacheContainer.remove(key);
+ CACHE_CONTAINER.remove(key);
log.debug("Removed key: [{}]", key);
}
@@ -110,7 +110,7 @@ public class InMemoryCacheStore extends StringCacheStore {
@Override
public void run() {
- cacheContainer.keySet().forEach(key -> {
+ CACHE_CONTAINER.keySet().forEach(key -> {
if (!InMemoryCacheStore.this.get(key).isPresent()) {
log.debug("Deleted the cache: [{}] for expiration", key);
}
diff --git a/src/main/java/run/halo/app/config/HaloConfiguration.java b/src/main/java/run/halo/app/config/HaloConfiguration.java
index 0b3d8f627..9b5be4d5b 100644
--- a/src/main/java/run/halo/app/config/HaloConfiguration.java
+++ b/src/main/java/run/halo/app/config/HaloConfiguration.java
@@ -1,6 +1,7 @@
package run.halo.app.config;
import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.client.RestTemplateBuilder;
@@ -36,6 +37,7 @@ import java.security.NoSuchAlgorithmException;
*/
@Configuration
@EnableConfigurationProperties(HaloProperties.class)
+@Slf4j
public class HaloConfiguration {
private final static int TIMEOUT = 5000;
@@ -80,7 +82,6 @@ public class HaloConfiguration {
*
* @return Log filter registration bean
*/
- @Bean
public FilterRegistrationBean logFilter() {
FilterRegistrationBean logFilter = new FilterRegistrationBean<>();
@@ -149,7 +150,10 @@ public class HaloConfiguration {
"/api/admin/login",
"/api/admin/refresh/*",
"/api/admin/installations",
- "/api/admin/recoveries/migrations/*"
+ "/api/admin/recoveries/migrations/*",
+ "/api/admin/is_installed",
+ "/api/admin/password/code",
+ "/api/admin/password/reset"
);
adminAuthenticationFilter.setFailureHandler(
failureHandler);
diff --git a/src/main/java/run/halo/app/config/WebMvcAutoConfiguration.java b/src/main/java/run/halo/app/config/WebMvcAutoConfiguration.java
index 3207be57b..e3f48fe4b 100644
--- a/src/main/java/run/halo/app/config/WebMvcAutoConfiguration.java
+++ b/src/main/java/run/halo/app/config/WebMvcAutoConfiguration.java
@@ -22,7 +22,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver;
import run.halo.app.config.properties.HaloProperties;
-import run.halo.app.controller.support.PageJacksonSerializer;
+import run.halo.app.core.PageJacksonSerializer;
import run.halo.app.factory.StringToEnumConverterFactory;
import run.halo.app.model.support.HaloConst;
import run.halo.app.security.resolver.AuthenticationArgumentResolver;
diff --git a/src/main/java/run/halo/app/controller/admin/api/AdminController.java b/src/main/java/run/halo/app/controller/admin/api/AdminController.java
index 0586dcfc9..0c5f0b332 100644
--- a/src/main/java/run/halo/app/controller/admin/api/AdminController.java
+++ b/src/main/java/run/halo/app/controller/admin/api/AdminController.java
@@ -8,9 +8,12 @@ import run.halo.app.cache.lock.CacheLock;
import run.halo.app.model.dto.EnvironmentDTO;
import run.halo.app.model.dto.StatisticDTO;
import run.halo.app.model.params.LoginParam;
+import run.halo.app.model.params.ResetPasswordParam;
+import run.halo.app.model.properties.PrimaryProperties;
import run.halo.app.model.support.BaseResponse;
import run.halo.app.security.token.AuthToken;
import run.halo.app.service.AdminService;
+import run.halo.app.service.OptionService;
import javax.validation.Valid;
@@ -28,8 +31,50 @@ public class AdminController {
private final AdminService adminService;
- public AdminController(AdminService adminService) {
+ private final OptionService optionService;
+
+ public AdminController(AdminService adminService, OptionService optionService) {
this.adminService = adminService;
+ this.optionService = optionService;
+ }
+
+ @GetMapping(value = "/is_installed")
+ @ApiOperation("Check install status")
+ public boolean isInstall() {
+ return optionService.getByPropertyOrDefault(PrimaryProperties.IS_INSTALLED, Boolean.class, false);
+ }
+
+ @PostMapping("login")
+ @ApiOperation("Login")
+ @CacheLock(autoDelete = false)
+ public AuthToken auth(@RequestBody @Valid LoginParam loginParam) {
+ return adminService.authenticate(loginParam);
+ }
+
+ @PostMapping("logout")
+ @ApiOperation("Logs out (Clear session)")
+ @CacheLock(autoDelete = false)
+ public void logout() {
+ adminService.clearToken();
+ }
+
+ @PostMapping("password/code")
+ @ApiOperation("Send reset password verify code.")
+ public void sendResetCode(@RequestBody @Valid ResetPasswordParam param) {
+ adminService.sendResetPasswordCode(param);
+ }
+
+ @PutMapping("password/reset")
+ @ApiOperation("Reset password by verify code.")
+ public void resetPassword(@RequestBody @Valid ResetPasswordParam param) {
+ adminService.resetPasswordByCode(param);
+ }
+
+ @PostMapping("refresh/{refreshToken}")
+ @ApiOperation("Refreshes token")
+ @CacheLock(autoDelete = false)
+ public AuthToken refresh(@PathVariable("refreshToken") String refreshToken) {
+ return adminService.refreshToken(refreshToken);
}
/**
@@ -49,27 +94,6 @@ public class AdminController {
return adminService.getEnvironments();
}
- @PostMapping("login")
- @ApiOperation("Login")
- @CacheLock(autoDelete = false)
- public AuthToken auth(@RequestBody @Valid LoginParam loginParam) {
- return adminService.authenticate(loginParam);
- }
-
- @PostMapping("logout")
- @ApiOperation("Logs out (Clear session)")
- @CacheLock(autoDelete = false)
- public void logout() {
- adminService.clearToken();
- }
-
- @PostMapping("refresh/{refreshToken}")
- @ApiOperation("Refreshes token")
- @CacheLock(autoDelete = false)
- public AuthToken refresh(@PathVariable("refreshToken") String refreshToken) {
- return adminService.refreshToken(refreshToken);
- }
-
@PutMapping("halo-admin")
@ApiOperation("Updates halo-admin manually")
public void updateAdmin() {
@@ -79,6 +103,6 @@ public class AdminController {
@GetMapping("spring/logs")
@ApiOperation("Get application logs")
public BaseResponse getSpringLogs() {
- return BaseResponse.ok(HttpStatus.OK.getReasonPhrase(),adminService.getSpringLogs());
+ return BaseResponse.ok(HttpStatus.OK.getReasonPhrase(), adminService.getSpringLogs());
}
}
diff --git a/src/main/java/run/halo/app/controller/admin/api/AttachmentController.java b/src/main/java/run/halo/app/controller/admin/api/AttachmentController.java
index 17efea70f..cbf4e5199 100644
--- a/src/main/java/run/halo/app/controller/admin/api/AttachmentController.java
+++ b/src/main/java/run/halo/app/controller/admin/api/AttachmentController.java
@@ -23,7 +23,7 @@ import static org.springframework.data.domain.Sort.Direction.DESC;
* Attachment controller.
*
* @author johnniang
- * @date 3/21/19
+ * @date 2019-03-21
*/
@RestController
@RequestMapping("/api/admin/attachments")
diff --git a/src/main/java/run/halo/app/controller/admin/api/BackupController.java b/src/main/java/run/halo/app/controller/admin/api/BackupController.java
index 8f7dca762..6f860121e 100644
--- a/src/main/java/run/halo/app/controller/admin/api/BackupController.java
+++ b/src/main/java/run/halo/app/controller/admin/api/BackupController.java
@@ -29,14 +29,9 @@ public class BackupController {
this.backupService = backupService;
}
- @PostMapping("import/markdowns")
- @ApiOperation("Import markdowns")
- public List backupMarkdowns(@RequestPart("files") MultipartFile[] files) throws IOException {
- List result = new LinkedList<>();
- for (MultipartFile file : files) {
- BasePostDetailDTO post = backupService.importMarkdowns(file);
- result.add(post);
- }
- return result;
+ @PostMapping("import/markdown")
+ @ApiOperation("Import markdown")
+ public BasePostDetailDTO backupMarkdowns(@RequestPart("file") MultipartFile file) throws IOException {
+ return backupService.importMarkdown(file);
}
}
diff --git a/src/main/java/run/halo/app/controller/admin/api/InstallController.java b/src/main/java/run/halo/app/controller/admin/api/InstallController.java
index 5465b0585..2ad1661ba 100644
--- a/src/main/java/run/halo/app/controller/admin/api/InstallController.java
+++ b/src/main/java/run/halo/app/controller/admin/api/InstallController.java
@@ -1,5 +1,7 @@
package run.halo.app.controller.admin.api;
+import cn.hutool.core.text.StrBuilder;
+import cn.hutool.crypto.SecureUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.ApplicationEventPublisher;
@@ -144,9 +146,9 @@ public class InstallController {
PostCommentParam commentParam = new PostCommentParam();
commentParam.setAuthor("Halo Bot");
- commentParam.setAuthorUrl("https://github.com/halo-dev/halo");
+ commentParam.setAuthorUrl("https://halo.run");
commentParam.setContent("欢迎使用 Halo,这是你的第一条评论。");
- commentParam.setEmail("i@ryanc.cc");
+ commentParam.setEmail("halo@halo.run");
commentParam.setPostId(post.getId());
return postCommentService.create(commentParam.convertTo());
}
@@ -196,11 +198,15 @@ public class InstallController {
installParam.update(user);
// Set password manually
userService.setPassword(user, installParam.getPassword());
- // Set default avatar
- userService.setDefaultAvatar(user);
// Update user
return userService.update(user);
- }).orElseGet(() -> userService.createBy(installParam));
+ }).orElseGet(() -> {
+ StrBuilder gravatar = new StrBuilder("//cn.gravatar.com/avatar/");
+ gravatar.append(SecureUtil.md5(installParam.getEmail()));
+ gravatar.append("?s=256&d=mm");
+ installParam.setAvatar(gravatar.toString());
+ return userService.createBy(installParam);
+ });
}
private void initSettings(InstallParam installParam) {
diff --git a/src/main/java/run/halo/app/controller/admin/api/JournalController.java b/src/main/java/run/halo/app/controller/admin/api/JournalController.java
index 708518113..d4fe65f50 100644
--- a/src/main/java/run/halo/app/controller/admin/api/JournalController.java
+++ b/src/main/java/run/halo/app/controller/admin/api/JournalController.java
@@ -51,7 +51,7 @@ public class JournalController {
@GetMapping
@ApiOperation("Lists journals")
- public Page pageBy(@PageableDefault(sort = "updateTime", direction = DESC) Pageable pageable,
+ public Page pageBy(@PageableDefault(sort = "createTime", direction = DESC) Pageable pageable,
JournalQuery journalQuery) {
Page journalPage = journalService.pageBy(journalQuery, pageable);
return journalService.convertToCmtCountDto(journalPage);
diff --git a/src/main/java/run/halo/app/controller/admin/api/MenuController.java b/src/main/java/run/halo/app/controller/admin/api/MenuController.java
index 9d25b72e8..d85e9d7c8 100644
--- a/src/main/java/run/halo/app/controller/admin/api/MenuController.java
+++ b/src/main/java/run/halo/app/controller/admin/api/MenuController.java
@@ -40,7 +40,7 @@ public class MenuController {
@GetMapping("tree_view")
@ApiOperation("List as category tree")
- public List listAsTree(@SortDefault(sort = "name", direction = ASC) Sort sort) {
+ public List listAsTree(@SortDefault(sort = "priority", direction = ASC) Sort sort) {
return menuService.listAsTree(sort);
}
@@ -79,6 +79,13 @@ public class MenuController {
@DeleteMapping("{menuId:\\d+}")
@ApiOperation("Deletes a menu")
public MenuDTO deleteBy(@PathVariable("menuId") Integer menuId) {
+ List