const API = require('../../../../lib/API.js') const { BaseStdResponse } = require('../../../../BaseStdResponse.js') const AccessControl = require('../../../../lib/AccessControl.js') const db = require('../../../../plugin/DataBase/db.js') const Redis = require('../../../../plugin/DataBase/Redis.js') const QgProxyManager = require('../../../../lib/Lepao/QgProxyManager') class AdminLepaoProxyConfig extends API { constructor() { super() this.setPath('/Admin/Lepao/Proxy/Config') this.setMethod('POST') } async onRequest(req, res) { const { uuid, session, proxy_enabled, area, area_ex, isp, distinct_extract, invalidate_cache } = req.body if ([uuid, session].some(v => v === '' || v == null) || proxy_enabled === undefined || proxy_enabled === null) return res.json({ ...BaseStdResponse.MISSING_PARAMETER }) if (!await AccessControl.checkSession(uuid, session)) return res.status(401).json({ ...BaseStdResponse.ACCESS_DENIED }) const permission = await AccessControl.getPermission(uuid) if (!permission.includes('admin') && !permission.includes('service')) return res.json({ ...BaseStdResponse.PERMISSION_DENIED }) const enabled = proxy_enabled === true || proxy_enabled === 1 || proxy_enabled === '1' ? 1 : 0 const areaStr = area == null ? '' : String(area).trim() const areaExStr = area_ex == null ? '' : String(area_ex).trim() let ispVal = null if (isp !== '' && isp !== undefined && isp !== null) { const n = Number(isp) if (n === 1 || n === 2 || n === 3) ispVal = n } const distinct = Number(distinct_extract) === 0 ? 0 : 1 const now = Date.now() try { await QgProxyManager.ensureSettingsRow() await db.query( `UPDATE lepao_proxy_settings SET proxy_enabled = ?, area = ?, area_ex = ?, isp = ?, distinct_extract = ?, updated_at = ? WHERE id = 1`, [enabled, areaStr, areaExStr, ispVal, distinct, now] ) if (invalidate_cache === true || invalidate_cache === 1 || invalidate_cache === '1') { await Redis.del(QgProxyManager.REDIS_CURRENT) } await QgProxyManager.recordLog({ event: 'config_change', detail: { proxy_enabled: enabled, area: areaStr, area_ex: areaExStr, isp: ispVal, distinct_extract: distinct, invalidate_cache: !!invalidate_cache, operator: uuid } }) return res.json({ ...BaseStdResponse.OK }) } catch (e) { this.logger?.error?.(`AdminLepaoProxyConfig: ${e.stack || e}`) return res.json({ ...BaseStdResponse.ERR, msg: '保存配置失败' }) } } } module.exports.AdminLepaoProxyConfig = AdminLepaoProxyConfig