mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-09-22 08:12:00 +02:00

* fix: remove unique field from assistant_id, which can be shared between different users * refactor: remove unique user fields from actions/assistant queries * feat: only allow user who saved action to delete it * refactor: allow deletions for anyone with builder access * refactor: update user.id when updating assistants/actions records, instead of searching with it * fix: stringify response data in case it's an object * fix: correctly handle path input * fix(decryptV2): handle edge case where value is already decrypted
45 lines
1.4 KiB
JavaScript
45 lines
1.4 KiB
JavaScript
require('dotenv').config();
|
|
|
|
const crypto = require('crypto');
|
|
const key = Buffer.from(process.env.CREDS_KEY, 'hex');
|
|
const iv = Buffer.from(process.env.CREDS_IV, 'hex');
|
|
const algorithm = 'aes-256-cbc';
|
|
|
|
function encrypt(value) {
|
|
const cipher = crypto.createCipheriv(algorithm, key, iv);
|
|
let encrypted = cipher.update(value, 'utf8', 'hex');
|
|
encrypted += cipher.final('hex');
|
|
return encrypted;
|
|
}
|
|
|
|
function decrypt(encryptedValue) {
|
|
const decipher = crypto.createDecipheriv(algorithm, key, iv);
|
|
let decrypted = decipher.update(encryptedValue, 'hex', 'utf8');
|
|
decrypted += decipher.final('utf8');
|
|
return decrypted;
|
|
}
|
|
|
|
// Programatically generate iv
|
|
function encryptV2(value) {
|
|
const gen_iv = crypto.randomBytes(16);
|
|
const cipher = crypto.createCipheriv(algorithm, key, gen_iv);
|
|
let encrypted = cipher.update(value, 'utf8', 'hex');
|
|
encrypted += cipher.final('hex');
|
|
return gen_iv.toString('hex') + ':' + encrypted;
|
|
}
|
|
|
|
function decryptV2(encryptedValue) {
|
|
const parts = encryptedValue.split(':');
|
|
// Already decrypted from an earlier invocation
|
|
if (parts.length === 1) {
|
|
return parts[0];
|
|
}
|
|
const gen_iv = Buffer.from(parts.shift(), 'hex');
|
|
const encrypted = parts.join(':');
|
|
const decipher = crypto.createDecipheriv(algorithm, key, gen_iv);
|
|
let decrypted = decipher.update(encrypted, 'hex', 'utf8');
|
|
decrypted += decipher.final('utf8');
|
|
return decrypted;
|
|
}
|
|
|
|
module.exports = { encrypt, decrypt, encryptV2, decryptV2 };
|