first commit
This commit is contained in:
130
main.js
Normal file
130
main.js
Normal file
@@ -0,0 +1,130 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user