| const { isEnabled } = require('@librechat/api'); |
| const { ViolationTypes } = require('librechat-data-provider'); |
| const getLogStores = require('./getLogStores'); |
| const banViolation = require('./banViolation'); |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| const logViolation = async (req, res, type, errorMessage, score = 1) => { |
| const userId = req.user?.id ?? req.user?._id; |
| if (!userId) { |
| return; |
| } |
| const logs = getLogStores(ViolationTypes.GENERAL); |
| const violationLogs = getLogStores(type); |
| const key = isEnabled(process.env.USE_REDIS) ? `${type}:${userId}` : userId; |
|
|
| const userViolations = (await violationLogs.get(key)) ?? 0; |
| const violationCount = +userViolations + +score; |
| await violationLogs.set(key, violationCount); |
|
|
| errorMessage.user_id = userId; |
| errorMessage.prev_count = userViolations; |
| errorMessage.violation_count = violationCount; |
| errorMessage.date = new Date().toISOString(); |
|
|
| await banViolation(req, res, errorMessage); |
| const userLogs = (await logs.get(key)) ?? []; |
| userLogs.push(errorMessage); |
| delete errorMessage.user_id; |
| await logs.set(key, userLogs); |
| }; |
|
|
| module.exports = logViolation; |
|
|