Files
2025-02-11 16:39:53 +07:00

130 lines
3.8 KiB
JavaScript

const { app, BrowserWindow, session } = require('electron/main')
const WebSocket = require('ws')
const path = require('path')
// Variabel global untuk menyimpan domain
let userDomain = '';
let wsPort = '9099';
let mainWindow = null;
const createSetupWindow = () => {
const setupWindow = new BrowserWindow({
width: 400,
height: 300,
webPreferences: {
nodeIntegration: true,
contextIsolation: false
}
});
setupWindow.loadFile('setup.html');
// Terima domain dari window setup
const { ipcMain } = require('electron');
ipcMain.on('submit-domain', (event, domain, port) => {
userDomain = domain;
wsPort = port || '9099';
setupWindow.close();
// Buat window utama setelah mendapat domain
createMainWindow();
});
}
const createMainWindow = () => {
mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
autoplayPolicy: 'no-user-gesture-required',
webSecurity: false,
nodeIntegration: true,
nodeIntegrationInWorker: true,
contextIsolation: false,
allowRunningInsecureContent: true
}
})
mainWindow.webContents.session.setPermissionRequestHandler((webContents, permission, callback) => {
if (permission === 'media') {
callback(true);
}
});
// Set CSP dengan domain yang sudah diinput
mainWindow.webContents.session.webRequest.onHeadersReceived((details, callback) => {
callback({
responseHeaders: {
...details.responseHeaders,
'Content-Security-Policy': [`default-src 'self' 'unsafe-inline' 'unsafe-eval' https://${userDomain} wss://${userDomain}:${wsPort} ws://${userDomain}:${wsPort}`]
}
})
});
session.defaultSession.webRequest.onHeadersReceived((details, callback) => {
callback({
responseHeaders: {
...details.responseHeaders,
'Content-Security-Policy': [`default-src 'self' 'unsafe-inline' 'unsafe-eval' https://${userDomain} wss://${userDomain}:${wsPort} ws://${userDomain}:${wsPort}`]
}
})
});
mainWindow.webContents.session.webRequest.onBeforeSendHeaders((details, callback) => {
callback({
requestHeaders: {
...details.requestHeaders,
'Access-Control-Allow-Origin': '*'
}
});
});
// Load URL dengan domain yang sudah diinput
mainWindow.loadURL(`https://${userDomain}/one-ui/test/vuex/cpone-antrian/`);
// Inisialisasi WebSocket setelah window utama dibuat
connectWebSocket();
}
app.on('certificate-error', (event, webContents, url, error, certificate, callback) => {
event.preventDefault();
callback(true);
});
app.whenReady().then(() => {
createSetupWindow() // Mulai dengan window setup terlebih dahulu
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createSetupWindow()
}
})
})
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
function connectWebSocket() {
try {
ws = new WebSocket(`wss://${userDomain}:${wsPort}/`);
ws.addEventListener('open', (event) => {
console.log('WebSocket Connected');
});
ws.addEventListener('error', (error) => {
console.error('WebSocket Error:', error);
});
ws.addEventListener('close', (event) => {
console.log('WebSocket Closed:', event.code, event.reason);
setTimeout(connectWebSocket, 5000);
});
} catch (error) {
console.error('Error creating WebSocket:', error);
setTimeout(connectWebSocket, 5000);
}
}