| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- 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 MAX_IDS = 300
- /**
- * POST /Admin/Lepao/Proxy/Logs/Delete
- * ids: number[] — 批量按主键删除
- * purge_all: 1/true — 清空整张日志表(危险操作)
- */
- class AdminLepaoProxyLogsDelete extends API {
- constructor() {
- super()
- this.setPath('/Admin/Lepao/Proxy/Logs/Delete')
- this.setMethod('POST')
- }
- async onRequest(req, res) {
- const { uuid, session, ids, purge_all } = req.body
- if ([uuid, session].some((v) => v === '' || v == 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 purge = purge_all === true || purge_all === 1 || purge_all === '1'
- try {
- if (purge) {
- await db.query('DELETE FROM lepao_proxy_log')
- return res.json({
- ...BaseStdResponse.OK,
- data: { mode: 'purge_all' }
- })
- }
- if (!Array.isArray(ids) || ids.length === 0) {
- return res.json({ ...BaseStdResponse.ERR, msg: '请传入 ids 数组或勾选 purge_all' })
- }
- const clean = [...new Set(ids.map((id) => Math.floor(Number(id))).filter((n) => Number.isFinite(n) && n > 0))]
- if (clean.length === 0) {
- return res.json({ ...BaseStdResponse.ERR, msg: '无效的 id' })
- }
- if (clean.length > MAX_IDS) {
- return res.json({ ...BaseStdResponse.ERR, msg: `单次最多删除 ${MAX_IDS} 条` })
- }
- const ph = clean.map(() => '?').join(',')
- await db.query(`DELETE FROM lepao_proxy_log WHERE id IN (${ph})`, clean)
- return res.json({
- ...BaseStdResponse.OK,
- data: { deleted: clean.length }
- })
- } catch (e) {
- this.logger?.error?.(`AdminLepaoProxyLogsDelete: ${e.stack || e}`)
- return res.json({ ...BaseStdResponse.ERR, msg: '删除日志失败' })
- }
- }
- }
- module.exports.AdminLepaoProxyLogsDelete = AdminLepaoProxyLogsDelete
|