This commit is contained in:
Baobhan Sith
2025-04-15 18:59:56 +08:00
parent 7649a7b69d
commit c026a42d06
43 changed files with 3479 additions and 169 deletions
@@ -1,5 +1,9 @@
import { Request, Response } from 'express';
import { settingsService } from '../services/settings.service';
import { AuditLogService } from '../services/audit.service'; // 引入 AuditLogService
import { ipBlacklistService } from '../services/ip-blacklist.service'; // 引入 IP 黑名单服务
const auditLogService = new AuditLogService(); // 实例化 AuditLogService
export const settingsController = {
/**
@@ -29,6 +33,14 @@ export const settingsController = {
// 可以在这里添加更严格的验证,例如检查值的类型等
await settingsService.setMultipleSettings(settingsToUpdate);
// 记录审计日志
// 区分 IP 白名单更新和其他设置更新
const updatedKeys = Object.keys(settingsToUpdate);
if (updatedKeys.includes('ipWhitelist')) {
auditLogService.logAction('IP_WHITELIST_UPDATED', { updatedKeys });
} else {
auditLogService.logAction('SETTINGS_UPDATED', { updatedKeys });
}
res.status(200).json({ message: '设置已成功更新' });
} catch (error: any) {
console.error('更新设置时出错:', error);
@@ -42,4 +54,40 @@ export const settingsController = {
// async getSetting(req: Request, res: Response): Promise<void> { ... }
// async setSetting(req: Request, res: Response): Promise<void> { ... }
// async deleteSetting(req: Request, res: Response): Promise<void> { ... }
/**
* 获取 IP 黑名单列表 (分页)
*/
async getIpBlacklist(req: Request, res: Response): Promise<void> {
try {
const limit = parseInt(req.query.limit as string || '50', 10);
const offset = parseInt(req.query.offset as string || '0', 10);
const result = await ipBlacklistService.getBlacklist(limit, offset);
res.json(result);
} catch (error: any) {
console.error('获取 IP 黑名单时出错:', error);
res.status(500).json({ message: '获取 IP 黑名单失败', error: error.message });
}
},
/**
* 从 IP 黑名单中删除一个 IP
*/
async deleteIpFromBlacklist(req: Request, res: Response): Promise<void> {
try {
const ipToDelete = req.params.ip;
if (!ipToDelete) {
res.status(400).json({ message: '缺少要删除的 IP 地址' });
return;
}
// TODO: 可以添加对 IP 格式的验证
await ipBlacklistService.removeFromBlacklist(ipToDelete);
// 记录审计日志 (可选)
// auditLogService.logAction('IP_BLACKLIST_REMOVED', { ip: ipToDelete });
res.status(200).json({ message: `IP 地址 ${ipToDelete} 已从黑名单中移除` });
} catch (error: any) {
console.error(`从 IP 黑名单删除 ${req.params.ip} 时出错:`, error);
res.status(500).json({ message: '从 IP 黑名单删除失败', error: error.message });
}
}
};