From 4c871964b01107111fd2284b17815607a1b57407 Mon Sep 17 00:00:00 2001 From: xream Date: Sat, 19 Jul 2025 12:55:32 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=89=8B=E5=8A=A8=E8=BF=98=E5=8E=9F?= =?UTF-8?q?=E6=94=AF=E6=8C=81=20Base64=20=E6=96=87=E6=9C=AC=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/package.json | 2 +- backend/src/restful/miscs.js | 26 +++++++++++++++++++++++--- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/backend/package.json b/backend/package.json index 40852c7..c0937eb 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "sub-store", - "version": "2.19.87", + "version": "2.19.88", "description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and Shadowrocket.", "main": "src/main.js", "scripts": { diff --git a/backend/src/restful/miscs.js b/backend/src/restful/miscs.js index 4ad8111..2add8e7 100644 --- a/backend/src/restful/miscs.js +++ b/backend/src/restful/miscs.js @@ -41,10 +41,30 @@ export default function register($app) { ); }) .post((req, res) => { - const { content } = req.body; - $.write(content, '#sub-store'); + let { content } = req.body; + try { + content = JSON.parse(Base64.decode(content)); + if (Object.keys(content.settings).length === 0) { + throw new Error('备份文件应该至少包含 settings 字段'); + } + } catch (err) { + try { + content = JSON.parse(content); + if (Object.keys(content.settings).length === 0) { + throw new Error('备份文件应该至少包含 settings 字段'); + } + } catch (err) { + $.error( + `备份文件校验失败, 无法还原\nReason: ${ + err.message ?? err + }`, + ); + throw new Error('备份文件校验失败, 无法还原'); + } + } + $.write(JSON.stringify(content, null, ` `), '#sub-store'); if ($.env.isNode) { - $.cache = JSON.parse(content); + $.cache = content; $.persistCache(); } migrate();