diff options
Diffstat (limited to 'modules-available/locationinfo/inc/locationinfohooks.inc.php')
-rw-r--r-- | modules-available/locationinfo/inc/locationinfohooks.inc.php | 99 |
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 |