90 lines
2.8 KiB
JavaScript
90 lines
2.8 KiB
JavaScript
/**
|
||
* Copyright (c) 2024-2025 Тарабанов Александр Викторович
|
||
* All rights reserved.
|
||
*
|
||
* This software is proprietary and confidential.
|
||
* Unauthorized copying, modification, or distribution is prohibited.
|
||
*
|
||
* For licensing inquiries: info@hb3-accelerator.com
|
||
* Website: https://hb3-accelerator.com
|
||
* GitHub: https://github.com/VC-HB3-Accelerator
|
||
*/
|
||
|
||
/**
|
||
* Утилиты для работы с шифрованием
|
||
* Предоставляет единую точку доступа к ключу шифрования
|
||
*/
|
||
|
||
const fs = require('fs');
|
||
const path = require('path');
|
||
const logger = require('./logger');
|
||
|
||
// Кэш ключа шифрования
|
||
let cachedKey = null;
|
||
|
||
/**
|
||
* Получить ключ шифрования из файла или переменной окружения
|
||
* @returns {string} Ключ шифрования
|
||
*/
|
||
function getEncryptionKey() {
|
||
// Если ключ уже закэширован, возвращаем его
|
||
if (cachedKey) {
|
||
return cachedKey;
|
||
}
|
||
|
||
// Сначала пробуем переменную окружения (приоритет для Docker)
|
||
if (process.env.ENCRYPTION_KEY) {
|
||
cachedKey = process.env.ENCRYPTION_KEY;
|
||
logger.info('[EncryptionUtils] Ключ шифрования загружен из переменной окружения');
|
||
return cachedKey;
|
||
}
|
||
|
||
// Если переменной нет, пробуем прочитать из файла
|
||
// В Docker контейнере путь /app/ssl/keys/full_db_encryption.key
|
||
// В локальной разработке ../../ssl/keys/full_db_encryption.key
|
||
const keyPath = fs.existsSync('/app/ssl/keys/full_db_encryption.key')
|
||
? '/app/ssl/keys/full_db_encryption.key'
|
||
: path.join(__dirname, '../../ssl/keys/full_db_encryption.key');
|
||
|
||
if (fs.existsSync(keyPath)) {
|
||
try {
|
||
cachedKey = fs.readFileSync(keyPath, 'utf8').trim();
|
||
logger.info('[EncryptionUtils] Ключ шифрования загружен из файла');
|
||
return cachedKey;
|
||
} catch (error) {
|
||
logger.error('[EncryptionUtils] Ошибка чтения ключа из файла:', error);
|
||
}
|
||
}
|
||
|
||
// Если ничего не найдено, бросаем ошибку
|
||
logger.error('[EncryptionUtils] Ключ шифрования не найден ни в файле, ни в переменной окружения!');
|
||
throw new Error('Encryption key not found');
|
||
}
|
||
|
||
/**
|
||
* Проверить, включено ли шифрование
|
||
* @returns {boolean}
|
||
*/
|
||
function isEnabled() {
|
||
try {
|
||
getEncryptionKey();
|
||
return true;
|
||
} catch (error) {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Очистить кэш ключа (для тестов)
|
||
*/
|
||
function clearCache() {
|
||
cachedKey = null;
|
||
}
|
||
|
||
module.exports = {
|
||
getEncryptionKey,
|
||
isEnabled,
|
||
clearCache
|
||
};
|
||
|