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();