ArmoHotspot/backend/simulate.js
Gökhan ÖZARSLAN 7e222bacbf kurulum3
2026-08-16 16:30:08 +03:00

74 lines
2.4 KiB
JavaScript

const { PrismaClient } = require('@prisma/client');
const { Pool } = require('pg');
const { PrismaPg } = require('@prisma/adapter-pg');
const { Client } = require('ssh2');
const pool = new Pool({ connectionString: 'postgresql://saas_user:saas_secure_pass_2026@10.0.1.151:5432/saas_5651?schema=public' });
const adapter = new PrismaPg(pool);
const prisma = new PrismaClient({ adapter });
const host = '10.0.1.150';
const password = '02!Aug2013';
async function generateDeviceVpnConfig(macAddress, vpnIp) {
return new Promise((resolve, reject) => {
const conn = new Client();
const clientName = `device_${macAddress.replace(/:/g, '')}`;
const setupScript = `
#!/bin/bash
cd /etc/openvpn/server
# 1. Create client certificate
if [ ! -f "easy-rsa/pki/issued/${clientName}.crt" ]; then
cd easy-rsa
./easyrsa --batch build-client-full "${clientName}" nopass
cd ..
fi
# 2. Assign static IP
mkdir -p ccd
echo "ifconfig-push ${vpnIp} 255.255.255.0" > "ccd/${clientName}"
echo "SUCCESS: VPN Config generated for ${clientName} with IP ${vpnIp}"
`;
conn.on('ready', () => {
conn.exec(setupScript, (err, stream) => {
if (err) return reject(err);
stream.on('close', (code) => {
conn.end();
if (code === 0) resolve(true);
else reject(new Error('Script failed with code ' + code));
}).on('data', data => console.log('STDOUT: ' + data))
.stderr.on('data', data => console.error('STDERR: ' + data));
});
}).connect({ host, port: 22, username: 'root', password, readyTimeout: 10000 });
});
}
async function runTest() {
console.log('--- Starting Test: SaaS E2E Tenant & Device Creation ---');
console.log('1. Creating new Tenant: "Test Hotel A.S."');
const tenant = await prisma.tenant.create({ data: { name: 'Test Hotel A.S.' } });
console.log('2. Allocated VPN IP for new device: 10.10.0.1');
const mac = '00:11:22:33:44:55';
await prisma.device.create({
data: {
tenantId: tenant.id,
name: 'Test Hotel Gateway',
macAddress: mac,
vpnIp: '10.10.0.1'
}
});
console.log('3. Connecting to VPN Server (10.0.1.150) to generate config...');
await generateDeviceVpnConfig(mac, '10.10.0.1');
console.log('--- Test Completed ---');
}
runTest().catch(console.error).finally(() => prisma.$disconnect());