130 lines
3.8 KiB
JavaScript
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);
|
|
}
|
|
} |