74 lines
2.4 KiB
JavaScript
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());
|