Files
DLE/scripts/ssh-key-server.js

106 lines
3.2 KiB
JavaScript
Executable File
Raw Permalink 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.

#!/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)}`);
});