update
This commit is contained in:
@@ -6,6 +6,8 @@ import { ipBlacklistService } from '../services/ip-blacklist.service'; // 引入
|
||||
const auditLogService = new AuditLogService(); // 实例化 AuditLogService
|
||||
|
||||
export const settingsController = {
|
||||
// ... (getAllSettings, updateSettings, getFocusSwitcherSequence 保持不变) ...
|
||||
|
||||
/**
|
||||
* 获取所有设置项
|
||||
*/
|
||||
@@ -31,11 +33,11 @@ export const settingsController = {
|
||||
return;
|
||||
}
|
||||
|
||||
// --- 过滤掉外观设置相关的键 ---
|
||||
// --- 过滤掉外观设置和焦点切换顺序相关的键 ---
|
||||
const allowedSettingsKeys = [
|
||||
'language', 'ipWhitelist', 'maxLoginAttempts', 'loginBanDuration',
|
||||
'showPopupFileEditor', 'shareFileEditorTabs', 'ipWhitelistEnabled' // 添加 ipWhitelistEnabled
|
||||
// 在这里添加其他允许的通用设置键
|
||||
'showPopupFileEditor', 'shareFileEditorTabs', 'ipWhitelistEnabled'
|
||||
// 不在此处处理 'focusSwitcherSequence'
|
||||
];
|
||||
const filteredSettings: Record<string, string> = {};
|
||||
for (const key in settingsToUpdate) {
|
||||
@@ -51,29 +53,75 @@ export const settingsController = {
|
||||
}
|
||||
|
||||
// 记录审计日志
|
||||
// 区分 IP 白名单更新和其他设置更新
|
||||
// 注意:现在审计日志可能需要更精细的逻辑,因为它只记录了实际更新的通用设置
|
||||
const updatedKeys = Object.keys(filteredSettings); // 使用过滤后的键
|
||||
if (updatedKeys.length > 0) { // 只有实际更新了才记录
|
||||
const updatedKeys = Object.keys(filteredSettings);
|
||||
if (updatedKeys.length > 0) {
|
||||
if (updatedKeys.includes('ipWhitelist') || updatedKeys.includes('ipWhitelistEnabled')) {
|
||||
auditLogService.logAction('IP_WHITELIST_UPDATED', { updatedKeys });
|
||||
} else {
|
||||
auditLogService.logAction('SETTINGS_UPDATED', { updatedKeys });
|
||||
}
|
||||
}
|
||||
res.status(200).json({ message: '设置已成功更新' }); // 即使没有更新通用设置也返回成功
|
||||
res.status(200).json({ message: '设置已成功更新' });
|
||||
} catch (error: any) {
|
||||
console.error('更新设置时出错:', error);
|
||||
res.status(500).json({ message: '更新设置失败', error: error.message });
|
||||
}
|
||||
},
|
||||
|
||||
// 注意:通常不直接通过 API 提供单个设置项的获取、设置或删除,
|
||||
// 而是通过批量获取/更新来管理。如果需要单独操作,可以添加相应方法。
|
||||
// 例如:
|
||||
// async getSetting(req: Request, res: Response): Promise<void> { ... }
|
||||
// async setSetting(req: Request, res: Response): Promise<void> { ... }
|
||||
// async deleteSetting(req: Request, res: Response): Promise<void> { ... }
|
||||
// +++ 新增:获取焦点切换顺序 +++
|
||||
/**
|
||||
* 获取焦点切换顺序
|
||||
*/
|
||||
async getFocusSwitcherSequence(req: Request, res: Response): Promise<void> {
|
||||
try {
|
||||
console.log('[Controller] Received request to get focus switcher sequence.'); // +++ 添加日志 +++
|
||||
const sequence = await settingsService.getFocusSwitcherSequence();
|
||||
console.log('[Controller] Sending focus switcher sequence to client:', JSON.stringify(sequence)); // +++ 添加日志 +++
|
||||
res.json(sequence);
|
||||
} catch (error: any) {
|
||||
console.error('[Controller] 获取焦点切换顺序时出错:', error); // +++ 更新日志前缀 +++
|
||||
res.status(500).json({ message: '获取焦点切换顺序失败', error: error.message });
|
||||
}
|
||||
},
|
||||
|
||||
// +++ 新增:设置焦点切换顺序 +++
|
||||
/**
|
||||
* 设置焦点切换顺序
|
||||
*/
|
||||
async setFocusSwitcherSequence(req: Request, res: Response): Promise<void> {
|
||||
console.log('[Controller] Received request to set focus switcher sequence.'); // +++ 添加日志 +++
|
||||
try {
|
||||
const { sequence } = req.body;
|
||||
console.log('[Controller] Request body sequence:', JSON.stringify(sequence)); // +++ 添加日志 +++
|
||||
|
||||
// 输入验证
|
||||
if (!Array.isArray(sequence) || !sequence.every(item => typeof item === 'string')) {
|
||||
console.warn('[Controller] Invalid sequence format received:', sequence); // +++ 添加日志 +++
|
||||
res.status(400).json({ message: '无效的请求体,"sequence" 必须是一个字符串数组' });
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('[Controller] Calling settingsService.setFocusSwitcherSequence...'); // +++ 添加日志 +++
|
||||
await settingsService.setFocusSwitcherSequence(sequence);
|
||||
console.log('[Controller] settingsService.setFocusSwitcherSequence completed successfully.'); // +++ 添加日志 +++
|
||||
|
||||
// 记录审计日志 (可选)
|
||||
console.log('[Controller] Logging audit action: FOCUS_SWITCHER_SEQUENCE_UPDATED'); // +++ 添加日志 +++
|
||||
auditLogService.logAction('FOCUS_SWITCHER_SEQUENCE_UPDATED', { sequence });
|
||||
|
||||
console.log('[Controller] Sending success response.'); // +++ 添加日志 +++
|
||||
res.status(200).json({ message: '焦点切换顺序已成功更新' });
|
||||
} catch (error: any) {
|
||||
console.error('[Controller] 设置焦点切换顺序时出错:', error); // +++ 更新日志前缀 +++
|
||||
// 区分是服务层抛出的验证错误还是其他错误
|
||||
if (error.message === 'Invalid sequence format provided.') {
|
||||
res.status(400).json({ message: '设置焦点切换顺序失败: 无效的格式', error: error.message });
|
||||
} else {
|
||||
res.status(500).json({ message: '设置焦点切换顺序失败', error: error.message });
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* 获取 IP 黑名单列表 (分页)
|
||||
|
||||
Reference in New Issue
Block a user