diff --git a/lib/middleware/access-control.js b/lib/middleware/access-control.js index afb10c2cba..7276b20cb6 100644 --- a/lib/middleware/access-control.js +++ b/lib/middleware/access-control.js @@ -1,16 +1,9 @@ -const art = require('art-template'); -const path = require('path'); const config = require('@/config').value; const reject = (ctx) => { ctx.response.status = 403; - ctx.body = art(path.resolve(__dirname, '../views/rss.art'), { - lastBuildDate: new Date().toUTCString(), - updated: new Date().toISOString(), - ttl: 24 * 60 * 60, - title: '没有访问权限. Access denied.', - link: 'https://docs.rsshub.app/install/#%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6', - }); + + throw Error('Access denied.'); }; module.exports = async (ctx, next) => { diff --git a/lib/middleware/onerror.js b/lib/middleware/onerror.js index 16d6e89de3..6d93bc4a28 100644 --- a/lib/middleware/onerror.js +++ b/lib/middleware/onerror.js @@ -26,13 +26,24 @@ module.exports = async (ctx, next) => { message = err.stack; } logger.error(`Error in ${ctx.request.path}: ${message}`); - ctx.set({ - 'Content-Type': 'text/html; charset=UTF-8', - }); - ctx.body = art(path.resolve(__dirname, '../views/error.art'), { - message, - }); - ctx.status = 404; + + if (config.isPackage) { + ctx.body = { + error: { + message: err.message, + }, + }; + } else { + ctx.set({ + 'Content-Type': 'text/html; charset=UTF-8', + }); + ctx.body = art(path.resolve(__dirname, '../views/error.art'), { + message, + }); + if (ctx.status !== 403) { + ctx.status = 404; + } + } if (!ctx.debug.errorPaths[ctx.request.path]) { ctx.debug.errorPaths[ctx.request.path] = 0; diff --git a/lib/pkg.js b/lib/pkg.js index c2eec52d3d..dfd10179e1 100644 --- a/lib/pkg.js +++ b/lib/pkg.js @@ -14,7 +14,7 @@ module.exports = { app = require('./app'); }, request: (path) => - new Promise((resolve) => { + new Promise((resolve, reject) => { app.callback()( { url: path, @@ -26,7 +26,12 @@ module.exports = { setHeader: () => {}, removeHeader: () => {}, end: (data) => { - resolve(JSON.parse(data)); + data = JSON.parse(data); + if (data.error) { + reject(data.error.message); + } else { + resolve(JSON.parse(data)); + } }, } ); diff --git a/test/middleware/access-control.js b/test/middleware/access-control.js index a193aee708..b855dbcc42 100644 --- a/test/middleware/access-control.js +++ b/test/middleware/access-control.js @@ -1,14 +1,9 @@ const supertest = require('supertest'); -const Parser = require('rss-parser'); -const parser = new Parser(); let server; async function checkBlock(response) { expect(response.status).toBe(403); - expect(await parser.parseString(response.text)).toMatchObject({ - items: [], - title: '没有访问权限. Access denied.', - }); + expect(response.text).toMatch(/Access denied\./); } afterEach(() => {