fix: activer HTTPS par défaut dans l'app Electron et fiabiliser les appels au serveur local
ENABLE_HTTPS était lu depuis l'environnement sans jamais être positionné par le flow Electron (start-desktop.sh → electron .), donc le serveur enfant tournait toujours en HTTP malgré le setup mkcert automatique au premier lancement. ENABLE_HTTPS est désormais activé par défaut (ENABLE_HTTPS=false pour revenir en HTTP explicitement). Corrections induites par ce changement de protocole par défaut : - pingServer() utilisait le module http en dur même en HTTPS ; bascule sur https avec rejectUnauthorized: false (ping local vers notre propre process enfant, le module https de Node ne lisant pas le trousseau macOS où mkcert installe sa CA, contrairement à Safari/Chrome/Electron renderer). - Le dashboard (electron/ui/app.js) avait l'URL de l'API et celle du WebSocket VU-mètres codées en dur en http/ws ; elles utilisent maintenant l'URL réelle exposée par preload.js (serverUrl), cohérente avec le protocole effectif du serveur.
This commit is contained in:
+14
-2
@@ -7,6 +7,7 @@ const { app, BrowserWindow, ipcMain, Menu, Tray, dialog } = require('electron');
|
|||||||
const path = require('path');
|
const path = require('path');
|
||||||
const { spawn } = require('child_process');
|
const { spawn } = require('child_process');
|
||||||
const http = require('http');
|
const http = require('http');
|
||||||
|
const https = require('https');
|
||||||
const setupHelper = require('./setup-helper');
|
const setupHelper = require('./setup-helper');
|
||||||
|
|
||||||
// État de l'application
|
// État de l'application
|
||||||
@@ -17,7 +18,11 @@ let serverStarted = false;
|
|||||||
let rendererReady = false;
|
let rendererReady = false;
|
||||||
|
|
||||||
const SERVER_PORT = process.env.PORT || 3000;
|
const SERVER_PORT = process.env.PORT || 3000;
|
||||||
const SERVER_URL = `http://localhost:${SERVER_PORT}`;
|
// HTTPS activé par défaut (cohérent avec le setup mkcert automatique au premier
|
||||||
|
// lancement) ; ENABLE_HTTPS=false permet de revenir explicitement en HTTP
|
||||||
|
const ENABLE_HTTPS = process.env.ENABLE_HTTPS !== 'false';
|
||||||
|
const SERVER_PROTOCOL = ENABLE_HTTPS ? 'https' : 'http';
|
||||||
|
const SERVER_URL = `${SERVER_PROTOCOL}://localhost:${SERVER_PORT}`;
|
||||||
const isDev = process.argv.includes('--dev');
|
const isDev = process.argv.includes('--dev');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -133,6 +138,7 @@ async function startServer() {
|
|||||||
...process.env,
|
...process.env,
|
||||||
PORT: SERVER_PORT,
|
PORT: SERVER_PORT,
|
||||||
USE_LOCAL_LIVEKIT: 'true',
|
USE_LOCAL_LIVEKIT: 'true',
|
||||||
|
ENABLE_HTTPS: ENABLE_HTTPS ? 'true' : 'false',
|
||||||
NODE_ENV: isDev ? 'development' : 'production'
|
NODE_ENV: isDev ? 'development' : 'production'
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -289,7 +295,13 @@ async function stopServer() {
|
|||||||
*/
|
*/
|
||||||
async function pingServer() {
|
async function pingServer() {
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
http.get(`${SERVER_URL}/health`, (res) => {
|
const client = ENABLE_HTTPS ? https : http;
|
||||||
|
// rejectUnauthorized: false : le cert mkcert est approuvé par le Keychain
|
||||||
|
// macOS (Safari/Chrome/Electron renderer), mais le module https de Node
|
||||||
|
// ne lit pas ce trust store et rejetterait sinon ce ping vers notre
|
||||||
|
// propre serveur local.
|
||||||
|
const options = ENABLE_HTTPS ? { rejectUnauthorized: false } : {};
|
||||||
|
client.get(`${SERVER_URL}/health`, options, (res) => {
|
||||||
let data = '';
|
let data = '';
|
||||||
res.on('data', (chunk) => { data += chunk; });
|
res.on('data', (chunk) => { data += chunk; });
|
||||||
res.on('end', () => {
|
res.on('end', () => {
|
||||||
|
|||||||
@@ -5,8 +5,15 @@
|
|||||||
|
|
||||||
const { contextBridge, ipcRenderer } = require('electron');
|
const { contextBridge, ipcRenderer } = require('electron');
|
||||||
|
|
||||||
|
// Même logique que dans main.js : doit rester synchronisé avec SERVER_URL
|
||||||
|
const SERVER_PORT = process.env.PORT || 3000;
|
||||||
|
const ENABLE_HTTPS = process.env.ENABLE_HTTPS !== 'false';
|
||||||
|
const SERVER_URL = `${ENABLE_HTTPS ? 'https' : 'http'}://localhost:${SERVER_PORT}`;
|
||||||
|
|
||||||
// Exposer l'API au renderer de manière sécurisée
|
// Exposer l'API au renderer de manière sécurisée
|
||||||
contextBridge.exposeInMainWorld('electronAPI', {
|
contextBridge.exposeInMainWorld('electronAPI', {
|
||||||
|
serverUrl: SERVER_URL,
|
||||||
|
|
||||||
// Contrôle serveur
|
// Contrôle serveur
|
||||||
server: {
|
server: {
|
||||||
start: () => ipcRenderer.invoke('server:start'),
|
start: () => ipcRenderer.invoke('server:start'),
|
||||||
|
|||||||
+2
-2
@@ -2,7 +2,7 @@
|
|||||||
* PTT Live Desktop - Renderer Process Logic
|
* PTT Live Desktop - Renderer Process Logic
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const API_BASE = 'http://localhost:3000';
|
const API_BASE = window.electronAPI?.serverUrl || 'http://localhost:3000';
|
||||||
|
|
||||||
// État global
|
// État global
|
||||||
let serverRunning = false;
|
let serverRunning = false;
|
||||||
@@ -604,7 +604,7 @@ function connectAudioLevelsWS() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const wsUrl = 'ws://localhost:3000/audio-levels';
|
const wsUrl = API_BASE.replace(/^http/, 'ws') + '/audio-levels';
|
||||||
console.log('Connexion WebSocket audio-levels...', wsUrl);
|
console.log('Connexion WebSocket audio-levels...', wsUrl);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user