diff --git a/docs/mqtt-gateway-integration.md b/docs/mqtt-gateway-integration.md index 68003803..931c1f37 100644 --- a/docs/mqtt-gateway-integration.md +++ b/docs/mqtt-gateway-integration.md @@ -68,7 +68,11 @@ MQTT_SIGNATURE_KEY=test # MQTT签名密钥 ``` 请注意`PUBLIC_IP`配置,确保其与实际公网IP一致,如果有域名就填域名。 -`MQTT_SIGNATURE_KEY` 是用于MQTT连接认证的密钥,最好设置成复杂一点的,这个密钥稍后还会用到。 +`MQTT_SIGNATURE_KEY` 是用于MQTT连接认证的密钥,最好设置成复杂一点的,最好是设置成8个字符以上且同时包含大小写字母,这个密钥稍后还会用到。 + +- 注意不要用简单的密码,比如`123456`、`test`等。 +- 注意不要用简单的密码,比如`123456`、`test`等。 +- 注意不要用简单的密码,比如`123456`、`test`等。 6. 启动MQTT网关 ``` diff --git a/main/manager-api/src/main/java/xiaozhi/common/constant/Constant.java b/main/manager-api/src/main/java/xiaozhi/common/constant/Constant.java index dcd69c5b..42a7d239 100644 --- a/main/manager-api/src/main/java/xiaozhi/common/constant/Constant.java +++ b/main/manager-api/src/main/java/xiaozhi/common/constant/Constant.java @@ -126,6 +126,11 @@ public interface Constant { */ String SERVER_VOICE_PRINT = "server.voice_print"; + /** + * mqtt密钥 + */ + String SERVER_MQTT_SECRET = "server.mqtt_signature_key"; + /** * 无记忆 */ diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/SysParamsController.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/SysParamsController.java index 12555bb9..dfef8fca 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/SysParamsController.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/SysParamsController.java @@ -107,9 +107,12 @@ public class SysParamsController { // 验证MCP地址 validateMcpUrl(dto.getParamCode(), dto.getParamValue()); - // + // 验证声纹地址 validateVoicePrint(dto.getParamCode(), dto.getParamValue()); + // 校验mqtt密钥长度 + validateMqttSecretLength(dto.getParamCode(), dto.getParamValue()); + sysParamsService.update(dto); configService.getConfig(false); return new Result(); @@ -231,6 +234,7 @@ public class SysParamsController { throw new RenException("MCP接口验证失败:" + e.getMessage()); } } + // 验证声纹接口地址是否正常 private void validateVoicePrint(String paramCode, String url) { if (!paramCode.equals(Constant.SERVER_VOICE_PRINT)) { @@ -264,4 +268,21 @@ public class SysParamsController { throw new RenException("声纹接口验证失败:" + e.getMessage()); } } + + // 校验mqtt密钥长度和复杂度 + private void validateMqttSecretLength(String paramCode, String secret) { + if (!paramCode.equals(Constant.SERVER_MQTT_SECRET)) { + return; + } + if (StringUtils.isBlank(secret) || secret.equals("null")) { + throw new RenException("mqtt密钥不能为空"); + } + if (secret.length() < 8) { + throw new RenException("您的mqtt密钥长度不安全,字符数需要至少8个字符且必须同时包含大小写字母"); + } + // 检查是否同时包含大小写字母 + if (!secret.matches(".*[a-z].*") || !secret.matches(".*[A-Z].*")) { + throw new RenException("您的mqtt密钥长度不安全,mqtt密钥必须同时包含大小写字母"); + } + } } diff --git a/main/manager-web/src/apis/module/admin.js b/main/manager-web/src/apis/module/admin.js index 27c1bc3e..c0f129c8 100644 --- a/main/manager-web/src/apis/module/admin.js +++ b/main/manager-web/src/apis/module/admin.js @@ -97,7 +97,7 @@ export default { }).send() }, // 修改 - updateParam(data, callback) { + updateParam(data, callback, failCallback) { RequestService.sendRequest() .url(`${getServiceUrl()}/admin/params`) .method('PUT') @@ -106,6 +106,10 @@ export default { RequestService.clearRequestTime() callback(res) }) + .fail((err) => { + RequestService.clearRequestTime() + failCallback(err) + }) .networkFail((err) => { console.error('更新参数失败:', err) RequestService.reAjaxFun(() => { diff --git a/main/manager-web/src/components/ParamDialog.vue b/main/manager-web/src/components/ParamDialog.vue index 7728b3d1..25b4b79b 100644 --- a/main/manager-web/src/components/ParamDialog.vue +++ b/main/manager-web/src/components/ParamDialog.vue @@ -1,51 +1,43 @@