Files
DLE/backend/utils/helpers.js

84 lines
2.4 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/HB3-ACCELERATOR
*/
const db = require('../db');
// Функция для создания задержки
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
// Функция для валидации email адреса
function isValidEmail(email) {
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
return emailRegex.test(email);
}
// Генерация кода подтверждения
function generateVerificationCode(length = 6) {
return Math.random()
.toString(36)
.substring(2, 2 + length)
.toUpperCase();
}
// Проверка существования идентификатора пользователя
async function checkUserIdentity(userId, provider, providerId) {
// Получаем ключ шифрования
const fs = require('fs');
const path = require('path');
let encryptionKey = 'default-key';
try {
const keyPath = path.join(__dirname, '../ssl/keys/full_db_encryption.key');
if (fs.existsSync(keyPath)) {
encryptionKey = fs.readFileSync(keyPath, 'utf8').trim();
}
} catch (keyError) {
console.error('Error reading encryption key:', keyError);
}
const result = await db.getQuery()(
'SELECT * FROM user_identities WHERE user_id = $1 AND provider_encrypted = encrypt_text($2, $4) AND provider_id_encrypted = encrypt_text($3, $4)',
[userId, provider, providerId, encryptionKey]
);
return result.rows.length > 0;
}
// Добавление новой идентификации
async function addUserIdentity(userId, provider, providerId) {
const encryptedDb = require('../services/encryptedDatabaseService');
try {
await encryptedDb.saveData('user_identities', {
user_id: userId,
provider: provider,
provider_id: providerId
});
return true;
} catch (error) {
if (error.code === '23505') {
// Уникальное ограничение нарушено
return false;
}
throw error;
}
}
module.exports = {
sleep,
isValidEmail,
generateVerificationCode,
checkUserIdentity,
addUserIdentity,
};