logging, domain white-listing
This commit is contained in:
+6
-1
@@ -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"
|
||||||
}
|
}
|
||||||
@@ -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', () => {
|
||||||
|
|||||||
Generated
+9
@@ -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,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",
|
||||||
|
|||||||
Reference in New Issue
Block a user