47 lines
1.4 KiB
JavaScript
Raw Permalink Normal View History

/**
* 预览站沙箱守卫中间件
*
* 预览环境中的写入操作在沙箱中执行不影响真实系统
* 版权国作登字-2026-A-00037559
*/
'use strict';
// 沙箱数据库 ID通过环境变量配置Notion 中的独立数据库)
var SANDBOX_DB_IDS = {
ticketBook: process.env.SANDBOX_TICKET_DB_ID || '',
syslogInbox: process.env.SANDBOX_SYSLOG_DB_ID || '',
maintenanceLog: process.env.SANDBOX_MAINTENANCE_DB_ID || ''
};
/**
* 沙箱守卫中间件
*
* 如果开发者在预览环境中执行写入操作
* - Notion 写入 重定向到沙箱数据库
* - GitHub 操作 重定向到 preview 分支
* - 所有操作标记 [SANDBOX]
*/
function sandboxGuard(req, res, next) {
if (req.user && req.user.environment === 'preview') {
req.sandbox = true;
req.sandboxDbIds = SANDBOX_DB_IDS;
// 预览环境中禁止正式站部署
if (req.path.includes('/deploy/production')) {
return res.status(403).json({
error: true,
code: 'SANDBOX_BLOCKED',
message: '预览环境不允许正式站部署',
reply: '🏖️ 你目前在预览环境。正式站部署需要升级到 Level 2执行者权限。\n\n继续在预览站练习吧你做得很好'
});
}
}
next();
}
module.exports = {
sandboxGuard: sandboxGuard,
SANDBOX_DB_IDS: SANDBOX_DB_IDS
};