logging, domain white-listing

This commit is contained in:
2024-05-28 18:27:50 +02:00
parent d51d857b88
commit 6a53286f67
4 changed files with 65 additions and 8 deletions
+6 -1
View File
@@ -1,3 +1,8 @@
{ {
"url": "https://www.tooloop.de" "url": "https://www.tooloop.de",
"allowedDomains": [
"tooloop.de",
"www.tooloop.de"
],
"logPath": "/Users/vollstock/Arbeit/Playground/tooloop-kiosk-browser-logs/tooloop-kiosk-browser.log"
} }
+47 -5
View File
@@ -1,22 +1,37 @@
const { app, BrowserWindow } = require('electron/main'); const { app, BrowserWindow } = require('electron/main');
const path = require('node:path'); const path = require('node:path');
const fs = require('fs'); const fs = require('fs');
// const http = require('http'); const log = require('electron-log/main');
//------------------------------------------------------------------------------
// Properties
//------------------------------------------------------------------------------
let config; let config;
let win; let win;
//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
/**
* Loads a config file from disc.
* The file is expected to be in the application path and called “config.json”.
*/
function loadConfig() { function loadConfig() {
try { try {
const data = fs.readFileSync(path.join(__dirname, "config.json"), { encoding: 'utf8' }); const data = fs.readFileSync(path.join(__dirname, "config.json"), { encoding: 'utf8' });
config = JSON.parse(data); config = JSON.parse(data);
} catch (err) { } catch (err) {
console.log(err); console.error(err);
} }
} }
/**
* Creates the browser window
*/
async function createWindow() { async function createWindow() {
win = new BrowserWindow({ win = new BrowserWindow({
width: 1920, width: 1920,
@@ -35,6 +50,8 @@ async function createWindow() {
win = null; win = null;
}); });
win.webContents.addListener("will-navigate", validateDomain);
win.once("ready-to-show", () => { win.once("ready-to-show", () => {
win.setKiosk(true); win.setKiosk(true);
win.show(); win.show();
@@ -51,20 +68,45 @@ async function createWindow() {
// path: '/' // path: '/'
// }; // };
// let req = http.request(options, function (r) { // let req = http.request(options, function (r) {
// console.log(r.headers); // log.info(r.headers);
// }); // });
// req.end(); // req.end();
win.loadURL(config.url); win.loadURL(config.url);
} catch (err) { } catch (err) {
console.log(err); log.error(err);
} finally { } finally {
} }
} }
/**
* Validates the url of a navigatio event against the list of allowed domains in
* the config file. See https://www.electronjs.org/docs/latest/api/web-contents#event-will-frame-navigate
* @param {Event} event
*/
function validateDomain(event) {
let url = new URL(event.url);
if ('allowedDomains' in config && !config.allowedDomains.includes(url.hostname)) {
event.preventDefault();
log.info("Navigation to " + event.url + " prevented");
}
}
//------------------------------------------------------------------------------
// Init electon app
//------------------------------------------------------------------------------
app.whenReady().then(() => { app.whenReady().then(() => {
loadConfig(); loadConfig();
log.initialize();
if ('logPath' in config) {
log.transports.file.resolvePathFn = () => config.logPath;
}
createWindow(); createWindow();
app.on('activate', () => { app.on('activate', () => {
+9
View File
@@ -10,6 +10,7 @@
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"electron-icon-builder": "^2.0.1", "electron-icon-builder": "^2.0.1",
"electron-log": "^5.1.5",
"electron-squirrel-startup": "^1.0.1" "electron-squirrel-startup": "^1.0.1"
}, },
"devDependencies": { "devDependencies": {
@@ -4401,6 +4402,14 @@
"node": ">=10" "node": ">=10"
} }
}, },
"node_modules/electron-log": {
"version": "5.1.5",
"resolved": "https://registry.npmjs.org/electron-log/-/electron-log-5.1.5.tgz",
"integrity": "sha512-vuq10faUAxRbILgQx7yHoMObKZDEfj7hMSZrJPsVrDNeCpV/HN11dU7QuY4UDUe055pzBxhSCB3m0+6D3Aktjw==",
"engines": {
"node": ">= 14"
}
},
"node_modules/electron-squirrel-startup": { "node_modules/electron-squirrel-startup": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/electron-squirrel-startup/-/electron-squirrel-startup-1.0.1.tgz", "resolved": "https://registry.npmjs.org/electron-squirrel-startup/-/electron-squirrel-startup-1.0.1.tgz",
+1
View File
@@ -1,6 +1,7 @@
{ {
"dependencies": { "dependencies": {
"electron-icon-builder": "^2.0.1", "electron-icon-builder": "^2.0.1",
"electron-log": "^5.1.5",
"electron-squirrel-startup": "^1.0.1" "electron-squirrel-startup": "^1.0.1"
}, },
"name": "tooloop-kiosk-browser", "name": "tooloop-kiosk-browser",