Add electron server configurator
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
const { app, BrowserWindow, shell, ipcMain } = require('electron');
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
|
||||
let mainWindow = null;
|
||||
|
||||
@@ -34,7 +35,8 @@ function createWindow() {
|
||||
webPreferences: {
|
||||
nodeIntegration: false,
|
||||
contextIsolation: true,
|
||||
webSecurity: !isDev
|
||||
webSecurity: !isDev,
|
||||
preload: path.join(__dirname, 'preload.js')
|
||||
},
|
||||
show: false
|
||||
});
|
||||
@@ -90,6 +92,75 @@ ipcMain.handle('get-platform', () => {
|
||||
return process.platform;
|
||||
});
|
||||
|
||||
// Server configuration handlers
|
||||
ipcMain.handle('get-server-config', () => {
|
||||
try {
|
||||
const userDataPath = app.getPath('userData');
|
||||
const configPath = path.join(userDataPath, 'server-config.json');
|
||||
|
||||
if (fs.existsSync(configPath)) {
|
||||
const configData = fs.readFileSync(configPath, 'utf8');
|
||||
return JSON.parse(configData);
|
||||
}
|
||||
return null;
|
||||
} catch (error) {
|
||||
console.error('Error reading server config:', error);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
ipcMain.handle('save-server-config', (event, config) => {
|
||||
try {
|
||||
const userDataPath = app.getPath('userData');
|
||||
const configPath = path.join(userDataPath, 'server-config.json');
|
||||
|
||||
// Ensure userData directory exists
|
||||
if (!fs.existsSync(userDataPath)) {
|
||||
fs.mkdirSync(userDataPath, { recursive: true });
|
||||
}
|
||||
|
||||
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
||||
return { success: true };
|
||||
} catch (error) {
|
||||
console.error('Error saving server config:', error);
|
||||
return { success: false, error: error.message };
|
||||
}
|
||||
});
|
||||
|
||||
ipcMain.handle('test-server-connection', async (event, serverUrl) => {
|
||||
try {
|
||||
const { default: fetch } = await import('node-fetch');
|
||||
|
||||
// Try multiple endpoints to test the connection
|
||||
const testUrls = [
|
||||
`${serverUrl}/health`,
|
||||
`${serverUrl}/version`,
|
||||
`${serverUrl}/users/registration-allowed`
|
||||
];
|
||||
|
||||
for (const testUrl of testUrls) {
|
||||
try {
|
||||
const response = await fetch(testUrl, {
|
||||
method: 'GET',
|
||||
timeout: 5000
|
||||
});
|
||||
|
||||
if (response.ok) {
|
||||
// If we get a 200 response, it's likely a valid Termix server
|
||||
return { success: true, status: response.status, testedUrl: testUrl };
|
||||
}
|
||||
} catch (urlError) {
|
||||
// Continue to next URL if this one fails
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return { success: false, error: 'Server is not responding or not a valid Termix server' };
|
||||
} catch (error) {
|
||||
return { success: false, error: error.message };
|
||||
}
|
||||
});
|
||||
|
||||
app.whenReady().then(() => {
|
||||
createWindow();
|
||||
console.log('Termix started successfully');
|
||||
|
||||
37
electron/preload.js
Normal file
37
electron/preload.js
Normal file
@@ -0,0 +1,37 @@
|
||||
const { contextBridge, ipcRenderer } = require('electron');
|
||||
|
||||
console.log('Preload script loaded');
|
||||
|
||||
// Expose protected methods that allow the renderer process to use
|
||||
// the ipcRenderer without exposing the entire object
|
||||
contextBridge.exposeInMainWorld('electronAPI', {
|
||||
// App info
|
||||
getAppVersion: () => ipcRenderer.invoke('get-app-version'),
|
||||
getPlatform: () => ipcRenderer.invoke('get-platform'),
|
||||
|
||||
// Server configuration
|
||||
getServerConfig: () => ipcRenderer.invoke('get-server-config'),
|
||||
saveServerConfig: (config) => ipcRenderer.invoke('save-server-config', config),
|
||||
testServerConnection: (serverUrl) => ipcRenderer.invoke('test-server-connection', serverUrl),
|
||||
|
||||
// File dialogs
|
||||
showSaveDialog: (options) => ipcRenderer.invoke('show-save-dialog', options),
|
||||
showOpenDialog: (options) => ipcRenderer.invoke('show-open-dialog', options),
|
||||
|
||||
// Update events
|
||||
onUpdateAvailable: (callback) => ipcRenderer.on('update-available', callback),
|
||||
onUpdateDownloaded: (callback) => ipcRenderer.on('update-downloaded', callback),
|
||||
|
||||
// Utility
|
||||
removeAllListeners: (channel) => ipcRenderer.removeAllListeners(channel),
|
||||
isElectron: true,
|
||||
isDev: process.env.NODE_ENV === 'development',
|
||||
|
||||
// Generic invoke method
|
||||
invoke: (channel, ...args) => ipcRenderer.invoke(channel, ...args)
|
||||
});
|
||||
|
||||
// Also set the legacy IS_ELECTRON flag for backward compatibility
|
||||
window.IS_ELECTRON = true;
|
||||
|
||||
console.log('electronAPI exposed to window');
|
||||
Reference in New Issue
Block a user