Files
DLE/scripts/ssh-key-server.js
2025-10-30 22:41:04 +03:00

118 lines
3.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 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
*/
#!/usr/bin/env node
const http = require('http');
const fs = require('fs');
const path = require('path');
const url = require('url');
const port = 3001;
const SSH_DIR = path.join(process.env.HOME, '.ssh');
const DEFAULT_KEY_PATH = path.join(SSH_DIR, 'id_rsa');
const DEFAULT_PUB_KEY_PATH = path.join(SSH_DIR, 'id_rsa.pub');
// Путь к папке с ключами шифрования
// В Docker контейнере: /app/ssl/keys
// Локально: ../ssl/keys от __dirname
const KEYS_DIR = fs.existsSync(path.join(__dirname, '../ssl/keys'))
? path.join(__dirname, '../ssl/keys')
: path.join(__dirname, 'ssl/keys');
const ENCRYPTION_KEY_PATH = path.join(KEYS_DIR, 'full_db_encryption.key');
// Helper to read SSH key
const readSshKey = (keyPath) => {
try {
return fs.readFileSync(keyPath, 'utf8');
} catch (error) {
return null;
}
};
// Helper to read encryption key
const readEncryptionKey = (keyPath) => {
try {
return fs.readFileSync(keyPath, 'utf8');
} catch (error) {
return null;
}
};
// CORS headers
const corsHeaders = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type',
'Content-Type': 'application/json'
};
const server = http.createServer((req, res) => {
const parsedUrl = url.parse(req.url, true);
const pathname = parsedUrl.pathname;
// Handle CORS preflight
if (req.method === 'OPTIONS') {
res.writeHead(200, corsHeaders);
res.end();
return;
}
// Set CORS headers
Object.keys(corsHeaders).forEach(key => {
res.setHeader(key, corsHeaders[key]);
});
if (pathname === '/ssh-key') {
const privateKey = readSshKey(DEFAULT_KEY_PATH);
const publicKey = readSshKey(DEFAULT_PUB_KEY_PATH);
if (privateKey) {
res.writeHead(200);
res.end(JSON.stringify({ success: true, sshKey: privateKey, publicKey: publicKey, keyType: 'rsa' }));
} else {
res.writeHead(404);
res.end(JSON.stringify({ success: false, message: 'SSH private key not found' }));
}
} else if (pathname === '/ssh-key/public') {
const publicKey = readSshKey(DEFAULT_PUB_KEY_PATH);
if (publicKey) {
res.writeHead(200);
res.end(JSON.stringify({ success: true, publicKey: publicKey, keyType: 'rsa' }));
} else {
res.writeHead(404);
res.end(JSON.stringify({ success: false, message: 'SSH public key not found' }));
}
} else if (pathname === '/encryption-key') {
const encryptionKey = readEncryptionKey(ENCRYPTION_KEY_PATH);
if (encryptionKey) {
res.writeHead(200);
res.end(JSON.stringify({ success: true, encryptionKey: encryptionKey }));
} else {
res.writeHead(404);
res.end(JSON.stringify({ success: false, message: 'Encryption key not found' }));
}
} else {
res.writeHead(404);
res.end(JSON.stringify({ success: false, message: 'Not found' }));
}
});
server.listen(port, () => {
console.log(`SSH Key Server running on port ${port}`);
console.log(`SSH keys directory: ${SSH_DIR}`);
console.log(`Encryption key path: ${ENCRYPTION_KEY_PATH}`);
console.log(`Encryption key exists: ${fs.existsSync(ENCRYPTION_KEY_PATH)}`);
});