| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- // BizGaze Connect — backend entry point.
- // Thin wiring layer: HTTP request dispatch + WebSocket attach + listeners.
- // All logic lives in focused modules:
- // repos.js data-access (all SQL)
- // bizgaze.js BizGaze identity provider
- // lib.js HTTP helpers (json/readBody/parseCookies/now)
- // session.js currentUser / audit
- // presence.js shared in-memory live state (agents/sessions/shares)
- // routes.js HTTP JSON API (/api/*, /sso)
- // static.js static files + authenticated downloads (GET fallback)
- // signaling.js WebSocket signaling (consent + SDP/ICE relay)
- const http = require('http');
- const https = require('https');
- const fs = require('fs');
- const path = require('path');
- const { WebSocketServer } = require('ws');
- const { PORT, HTTPS_PORT } = require('./config');
- const { json } = require('./lib');
- const routes = require('./routes');
- const { handleGet } = require('./static');
- const { onConnection } = require('./signaling');
-
- // ---------- HTTP request dispatch ----------
- const server = http.createServer((req, res) => {
- const key = `${req.method} ${req.url.split('?')[0]}`;
- if (routes[key]) return routes[key](req, res);
- if (req.method === 'GET') return handleGet(req, res); // downloads + static
- json(res, 404, { error: 'not found' });
- });
-
- // ---------- WebSocket signaling ----------
- const wss = new WebSocketServer({ server, path: '/ws' });
- wss.on('connection', onConnection);
-
- server.listen(PORT, () => {
- console.log(`HTTP on http://localhost:${PORT}`);
- });
-
- // HTTPS — required so other devices can share their screen (browsers block
- // screen capture on non-secure origins). Uses cert.pem/key.pem if present.
- let httpsServer = null;
- try {
- const certPath = path.join(__dirname, 'cert.pem');
- const keyPath = path.join(__dirname, 'key.pem');
- if (fs.existsSync(certPath) && fs.existsSync(keyPath)) {
- httpsServer = https.createServer(
- { cert: fs.readFileSync(certPath), key: fs.readFileSync(keyPath) },
- (req, res) => server.emit('request', req, res)
- );
- const wssSecure = new WebSocketServer({ server: httpsServer, path: '/ws' });
- wssSecure.on('connection', onConnection);
- httpsServer.listen(HTTPS_PORT, () => {
- console.log(`HTTPS on https://localhost:${HTTPS_PORT} (use this address from other devices)`);
- console.log(` End user shares screen: https://<this-pc-ip>:${HTTPS_PORT}/share`);
- console.log(` Technician connects: https://<this-pc-ip>:${HTTPS_PORT}/connect`);
- });
- } else {
- console.log('(No cert.pem/key.pem found — HTTPS disabled. Other devices can view but not share their screen.)');
- }
- } catch (e) {
- console.log('HTTPS failed to start:', e.message);
- }
-
- module.exports = { server };
|