diff --git a/whatsapp_bridge/server.js b/whatsapp_bridge/server.js index 63c9775..36664e1 100644 --- a/whatsapp_bridge/server.js +++ b/whatsapp_bridge/server.js @@ -1,15 +1,19 @@ const { Client, LocalAuth } = require('whatsapp-web.js'); const express = require('express'); const qrcode = require('qrcode'); -const app = express(); +const fs = require('fs-extra'); +const path = require('path'); +const app = express(); app.use(express.json()); +app.use(express.static(path.join(__dirname, 'ui'))); let lastQr = ""; let isReady = false; +const SESSION_DATA = '/data/auth'; const client = new Client({ - authStrategy: new LocalAuth({ dataPath: '/data/auth' }), + authStrategy: new LocalAuth({ dataPath: SESSION_DATA }), puppeteer: { executablePath: '/usr/bin/chromium-browser', args: [ @@ -23,6 +27,7 @@ const client = new Client({ client.on('qr', (qr) => { lastQr = qr; + isReady = false; console.log('Neuer QR Code generiert.'); }); @@ -32,22 +37,49 @@ client.on('ready', () => { console.log('WhatsApp ist bereit!'); }); -// Web UI für Ingress -app.get('/', async (req, res) => { - if (isReady) { - res.send('

WhatsApp verbunden! ✅

Du kannst dieses Fenster jetzt schließen.

'); - } else if (lastQr) { - const qrImage = await qrcode.toDataURL(lastQr); - res.send(`

WhatsApp Login

Scanne den Code mit deinem Handy:

`); - } else { - res.send('

Warte auf QR-Code...

Bitte Seite in 10 Sekunden neu laden.

'); +client.on('disconnected', () => { + isReady = false; + console.log('WhatsApp Verbindung getrennt.'); +}); + +// --- API für die UI --- + +app.get('/api/status', async (req, res) => { + res.json({ + isReady: isReady, + hasQr: lastQr !== "", + qrCode: lastQr ? await qrcode.toDataURL(lastQr) : null + }); +}); + +app.post('/auth/logout', async (req, res) => { + try { + console.log("Logging out..."); + await client.logout(); + await fs.remove(SESSION_DATA); + res.json({ success: true, message: "Logged out. Addon restarts now..." }); + setTimeout(() => process.exit(0), 2000); + } catch (err) { + res.status(500).json({ error: err.message }); } }); +app.delete('/system/reset', async (req, res) => { + try { + console.log("Factory Reset triggered!"); + await client.destroy(); + await fs.emptyDir('/data'); + res.json({ success: true, message: "All data deleted. Restarting..." }); + setTimeout(() => process.exit(0), 2000); + } catch (err) { + res.status(500).json({ error: err.message }); + } +}); + +// Nachricht senden app.post('/send', async (req, res) => { const { number, message } = req.body; if (!isReady) return res.status(503).json({ error: 'Client nicht bereit' }); - try { const chatId = number.includes('@c.us') ? number : `${number}@c.us`; await client.sendMessage(chatId, message);