60 lines
1.9 KiB
TypeScript
60 lines
1.9 KiB
TypeScript
import { PrismaClient } from '@prisma/client';
|
|
import { VpnService } from './src/services/VpnService';
|
|
|
|
const prisma = new PrismaClient();
|
|
const vpnService = new VpnService();
|
|
|
|
async function runTest() {
|
|
console.log('--- Starting Test: SaaS E2E Tenant & Device Creation ---');
|
|
|
|
// 1. Create a Tenant
|
|
console.log('1. Creating new Tenant: "Test Hotel A.S."');
|
|
const tenant = await prisma.tenant.create({
|
|
data: { name: 'Test Hotel A.S.' }
|
|
});
|
|
console.log(` Tenant created with ID: ${tenant.id}`);
|
|
|
|
// 2. Figure out VPN IP
|
|
const baseIp = '10.10.0.';
|
|
const lastDevice = await prisma.device.findFirst({
|
|
where: { vpnIp: { startsWith: baseIp } },
|
|
orderBy: { vpnIp: 'desc' }
|
|
});
|
|
|
|
let nextVpnIp = '10.10.0.1';
|
|
if (lastDevice && lastDevice.vpnIp) {
|
|
const lastOctet = parseInt(lastDevice.vpnIp.split('.')[3], 10);
|
|
nextVpnIp = `${baseIp}${lastOctet + 1}`;
|
|
}
|
|
console.log(`2. Allocated VPN IP for new device: ${nextVpnIp}`);
|
|
|
|
// 3. Create Device
|
|
console.log('3. Registering OPNsense device...');
|
|
const mac = '00:11:22:33:44:55';
|
|
const device = await prisma.device.create({
|
|
data: {
|
|
tenantId: tenant.id,
|
|
name: 'Test Hotel Gateway',
|
|
macAddress: mac,
|
|
vpnIp: nextVpnIp,
|
|
opnsenseUrl: 'https://192.168.1.1',
|
|
apiKey: 'testkey',
|
|
apiSecret: 'testsecret'
|
|
}
|
|
});
|
|
console.log(` Device registered successfully with MAC: ${mac}`);
|
|
|
|
// 4. Trigger VPN Generation
|
|
console.log('4. Connecting to VPN Server (10.0.1.150) via SSH to generate .ovpn config...');
|
|
try {
|
|
await vpnService.generateDeviceVpnConfig(mac, nextVpnIp);
|
|
console.log(' SUCCESS! .ovpn file and ccd config created on VPN server.');
|
|
} catch (e: any) {
|
|
console.error(' FAILED to generate VPN config:', e.message);
|
|
}
|
|
|
|
console.log('--- Test Completed ---');
|
|
}
|
|
|
|
runTest().catch(e => console.error(e)).finally(() => prisma.$disconnect());
|