From 460065a95b88088237941ca08a93d1f29f85a799 Mon Sep 17 00:00:00 2001 From: antelle Date: Sun, 24 Dec 2017 13:36:38 +0100 Subject: [PATCH] serve KeeWeb in plugin server --- plugins/keeweb-plugin/keeweb-plugin.js | 45 ++++++++++++++++++++++++-- plugins/keeweb-plugin/package.json | 2 +- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/plugins/keeweb-plugin/keeweb-plugin.js b/plugins/keeweb-plugin/keeweb-plugin.js index 2c065f23..afdd04e4 100644 --- a/plugins/keeweb-plugin/keeweb-plugin.js +++ b/plugins/keeweb-plugin/keeweb-plugin.js @@ -141,6 +141,40 @@ function servePlugin(packageName) { cert: fs.readFileSync(path.join(__dirname, 'self-signed-cert.pem')) }; const port = serverPort || 8089; + let keeWebHtmlCached; + const serveKeeWebHtml = res => { + if (keeWebHtmlCached) { + res.writeHead(200); + res.end(keeWebHtmlCached); + } else { + https.get('https://app.keeweb.info', kwRes => { + if (kwRes.statusCode !== 200) { + console.error('Error loading https://app.keeweb.info: HTTP status ' + kwRes.statusCode); + res.writeHead(500); + return res.end('Error loading https://app.keeweb.info: HTTP status ' + kwRes.statusCode); + } + const data = []; + kwRes.on('data', chunk => data.push(chunk)); + kwRes.on('end', () => { + keeWebHtmlCached = Buffer.concat(data).toString('utf8').replace('(no-config)', 'config.json'); + serveKeeWebHtml(res); + }); + kwRes.on('error', e => { + console.error('Error loading https://app.keeweb.info', e); + res.writeHead(500); + res.end('Error loading https://app.keeweb.info'); + }); + }); + } + }; + const serveManifestAppCache = res => { + res.writeHead(200); + res.end('CACHE MANIFEST\nNETWORK:\n*\n'); + }; + const serveConfig = res => { + res.writeHead(200); + res.end(`{"settings":{},"plugins":[{"url":"/"}]}`); + }; https.createServer(options, (req, res) => { console.log('GET', req.connection.remoteAddress, req.url); const filePath = path.resolve(packageName, '.' + req.url.replace(/\.\./g, '').replace(/\?.*/, '')); @@ -150,6 +184,13 @@ function servePlugin(packageName) { res.end('Not found'); return; } + if (req.url === '/') { + return serveKeeWebHtml(res); + } else if (req.url === '/manifest.appcache') { + return serveManifestAppCache(res); + } else if (req.url === '/config.json') { + return serveConfig(res); + } fs.readFile(filePath, (err, data) => { if (err) { res.writeHead(404); @@ -164,8 +205,8 @@ function servePlugin(packageName) { } }); }).listen(port); - console.log(`This is your plugin URL for keeweb: https://127.0.0.1:${port}`); - console.log('But first, open it in browser and click Proceed on unsafe website warning screen'); + console.log(`Open this URL in your browser or add it to KeeWeb: https://127.0.0.1:${port}`); + console.log('If you see a browser warning about an unsafe website, click Proceed, it\'s safe.'); } function getPackageArg() { diff --git a/plugins/keeweb-plugin/package.json b/plugins/keeweb-plugin/package.json index b1d53abf..3aa93538 100644 --- a/plugins/keeweb-plugin/package.json +++ b/plugins/keeweb-plugin/package.json @@ -1,6 +1,6 @@ { "name": "keeweb-plugin", - "version": "0.1.10", + "version": "0.1.11", "description": "KeeWeb plugin utils", "main": "keeweb-plugin.js", "scripts": {