summaryrefslogtreecommitdiffstats
path: root/modules-available/locationinfo/inc/locationinfohooks.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules-available/locationinfo/inc/locationinfohooks.inc.php')
-rw-r--r--modules-available/locationinfo/inc/locationinfohooks.inc.php99
1 files changed, 99 insertions, 0 deletions
diff --git a/modules-available/locationinfo/inc/locationinfohooks.inc.php b/modules-available/locationinfo/inc/locationinfohooks.inc.php
new file mode 100644
index 00000000..8ec217cc
--- /dev/null
+++ b/modules-available/locationinfo/inc/locationinfohooks.inc.php
@@ -0,0 +1,99 @@
+<?php
+
+class LocationInfoHooks
+{
+
+ /**
+ * @param string $uuid panel uuid
+ * @return false|string panel name if exists, false otherwise
+ */
+ public static function getPanelName(string $uuid)
+ {
+ $ret = Database::queryFirst('SELECT panelname FROM locationinfo_panel WHERE paneluuid = :uuid', compact('uuid'));
+ if ($ret === false)
+ return false;
+ return $ret['panelname'];
+ }
+
+ /**
+ * Hook called by runmode module where we should modify the client config according to our
+ * needs. Disable standby/logout timeouts, enable autologin, set URL.
+ */
+ public static function configHook(string $machineUuid, string $panelUuid): void
+ {
+ $type = InfoPanel::getConfig($panelUuid, $data);
+ if ($type === null)
+ return; // TODO: Invalid panel - what should we do?
+ if ($type === 'URL') {
+ // Check if we should set the insecure SSL mode (accept invalid/self signed certs etc.)
+ if ($data['insecure-ssl'] !== 0) {
+ ConfigHolder::add('SLX_BROWSER_INSECURE', '1');
+ }
+ if ($data['reload-minutes'] > 0) {
+ ConfigHolder::add('SLX_BROWSER_RELOAD_SECS', $data['reload-minutes'] * 60);
+ }
+ ConfigHolder::add('SLX_BROWSER_URL', $data['url']);
+ // Mangle non-upgraded panels
+ if (empty($data['blacklist']) && $data['whitelist'] === '*' && !empty($data['urllist'])) {
+ if ($data['iswhitelist']) {
+ $data['whitelist'] = str_replace(' ', "\n", $data['urllist']);
+ } else {
+ $data['blacklist'] = str_replace(' ', "\n", $data['urllist']);
+ }
+ }
+ ConfigHolder::add('SLX_BROWSER_WHITELIST', self::mangleList($data['whitelist']));
+ ConfigHolder::add('SLX_BROWSER_BLACKLIST', self::mangleList($data['blacklist']));
+ // Additionally, update runmode "isclient" flag depending on whether split-login is allowed or not
+ if (isset($data['split-login']) && $data['split-login']) {
+ RunMode::updateClientFlag($machineUuid, 'locationinfo', true);
+ } else { // Automatic login
+ RunMode::updateClientFlag($machineUuid, 'locationinfo', false);
+ ConfigHolder::add('SLX_AUTOLOGIN', 'ON', 1000);
+ ConfigHolder::add('SLX_ADDONS', '', 1000);
+ }
+ if (!empty($data['browser'])) {
+ if ($data['browser'] === 'chromium') {
+ $browser = 'chromium chrome';
+ } else {
+ $browser = 'slxbrowser slx-browser';
+ $data['interactive'] = (isset($data['split-login']) && $data['split-login']);
+ }
+ ConfigHolder::add('SLX_BROWSER', $browser, 1000);
+ }
+ if (isset($data['interactive']) && $data['interactive']) {
+ ConfigHolder::add('SLX_BROWSER_INTERACTIVE', '1', 1000);
+ }
+ if (!empty($data['bookmarks'])) {
+ ConfigHolder::add('SLX_BROWSER_BOOKMARKS', $data['bookmarks'], 1000);
+ }
+ if ($data['allow-tty'] === 'yes' || $data['allow-tty'] === 'no') {
+ ConfigHolder::add('SLX_TTY_SWITCH', $data['allow-tty'], 1000);
+ }
+ if (($data['zoom-factor'] ?? 100) != 100) {
+ ConfigHolder::add('SLX_BROWSER_ZOOM', $data['zoom-factor']);
+ }
+ } else {
+ // Not URL panel
+ ConfigHolder::add('SLX_BROWSER_URL', 'http://' . $_SERVER['SERVER_ADDR'] . '/panel/' . $panelUuid);
+ ConfigHolder::add('SLX_AUTOLOGIN', 'ON', 1000);
+ ConfigHolder::add('SLX_ADDONS', '', 1000);
+ }
+ $al = ConfigHolder::get('SLX_AUTOLOGIN');
+ if (!empty($al) && $al !== 'OFF' && $al != 0) {
+ ConfigHolder::add('SLX_SHUTDOWN_TIMEOUT', '', 1000);
+ }
+ ConfigHolder::add('SLX_LOGOUT_TIMEOUT', '', 1000);
+ ConfigHolder::add('SLX_SCREEN_STANDBY_TIMEOUT', '', 1000);
+ ConfigHolder::add('SLX_SYSTEM_STANDBY_TIMEOUT', '', 1000);
+ }
+
+ /**
+ * Turn multiline list into space separated list, removing any
+ * comments (starting with #)
+ */
+ private static function mangleList(string $list): string
+ {
+ return preg_replace('/\s*(#[^\n]*)?(\n|$)/', ' ', $list);
+ }
+
+} \ No newline at end of file