update
This commit is contained in:
@@ -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 });
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -11,4 +11,12 @@ router.use(isAuthenticated);
|
||||
router.get('/', settingsController.getAllSettings); // GET /api/v1/settings
|
||||
router.put('/', settingsController.updateSettings); // PUT /api/v1/settings
|
||||
|
||||
// --- IP 黑名单管理路由 ---
|
||||
// GET /api/v1/settings/ip-blacklist - 获取 IP 黑名单列表 (需要认证)
|
||||
router.get('/ip-blacklist', settingsController.getIpBlacklist);
|
||||
|
||||
// DELETE /api/v1/settings/ip-blacklist/:ip - 从黑名单中删除指定 IP (需要认证)
|
||||
router.delete('/ip-blacklist/:ip', settingsController.deleteIpFromBlacklist);
|
||||
|
||||
|
||||
export default router;
|
||||
|
||||
Reference in New Issue
Block a user