init: 整合项目(dashboard + www + docs)

This commit is contained in:
eafonyang
2026-07-30 11:23:50 +08:00
commit 99ab6cc4f4
435 changed files with 61037 additions and 0 deletions
+35
View File
@@ -0,0 +1,35 @@
const { decodeToken } = require('../utils/jwt');
function authMiddleware(req, res, next) {
const auth = req.headers.authorization;
if (!auth || !auth.startsWith('Bearer ')) {
return res.status(401).json({ detail: '未登录或缺少凭证' });
}
const token = auth.slice(7);
try {
const payload = decodeToken(token);
if (!payload.sub) {
return res.status(401).json({ detail: '无效凭证' });
}
req.user = {
id: payload.sub,
username: payload.username || '',
is_super_admin: !!payload.is_super_admin,
};
next();
} catch (e) {
if (e.name === 'TokenExpiredError') {
return res.status(401).json({ detail: '登录已过期,请重新登录' });
}
return res.status(401).json({ detail: '无效凭证' });
}
}
function requireSuperAdmin(req, res, next) {
if (!req.user?.is_super_admin) {
return res.status(403).json({ detail: '需要超级管理员权限' });
}
next();
}
module.exports = { authMiddleware, requireSuperAdmin };
@@ -0,0 +1,11 @@
const MAX_BODY_SIZE = 8 * 1024 * 1024; // 8MB
function bodyLimit(req, res, next) {
const contentLength = req.headers['content-length'];
if (contentLength && parseInt(contentLength, 10) > MAX_BODY_SIZE) {
return res.status(413).json({ detail: '上传文件大小超过 8MB 限制' });
}
next();
}
module.exports = { bodyLimit };