2. TLDs for Testing, & Documentation Examples define("PREFIX", ""); // Prefix in URL, if any define("ROOT_PATH", "/srv/php/niver"); // niver-php directory define("SERVICE", substr(dirname($_SERVER['PHP_SELF']), strlen(PREFIX) + 1)); define("PAGE", basename($_SERVER['PHP_SELF'], '.php')); define("DB_PATH", ROOT_PATH . "/db/niver.db"); // Niver's SQLite database define("SUDO_PATH", "/usr/bin/sudo"); define("HT_PATH", "/srv/ht"); // Service-specific functions and constants if (SERVICE !== "") require ROOT_PATH . "/" . SERVICE . ".php"; // Page titles definition require "pages.php"; function antiCSRF() { if (!isset($_SERVER['HTTP_SEC_FETCH_SITE']) OR $_SERVER['HTTP_SEC_FETCH_SITE'] !== "same-origin") exit("ERROR: Anti-CSRF verification failed ! (Wrong or unset Sec-Fetch-Site HTTP header)"); } // Session initialisation (with cookies) if ( isset($_COOKIE['niver']) // Resume session OR (SERVICE === "auth" // Create new session AND PAGE === "login" AND isset($_POST['username'])) ) { session_start([ 'name' => 'niver', 'sid_length' => 64, 'sid_bits_per_character' => 6, 'cookie_secure' => true, 'cookie_httponly' => true, 'cookie_samesite' => 'Strict', 'cookie_path' => PREFIX . '/', 'cookie_lifetime' => 432000, // = 60*60*24*5 = 5 days 'gc_maxlifetime' => 10800, 'use_strict_mode' => true, 'use_cookies' => true, 'use_only_cookies' => true, ]); } // Less > CSS compilation // Color scheme define("THEME", array( // Displayed on light theme 'darkRegColor' => "#D100D1", 'darkNsColor' => "#006DFF", 'darkHtColor' => "#008768", 'darkAuthColor' => "#EE0000", // Displayed on dark theme 'lightRegColor' => "#FF50FF", 'lightNsColor' => "#00FFFF", 'lightHtColor' => "#FFFF00", 'lightAuthColor' => "#00FF00", 'lightColor' => '#FFFFFF', 'darkColor' => '#000000', )); require_once ROOT_PATH . "/lessphp/lib/Less/Autoloader.php"; Less_Autoloader::register(); // List files in less/ $relativeLessFiles = array_diff(scandir(ROOT_PATH . "/less"), array('..', '.')); // Replace keys by values, and values by keys $relativeLessFiles = array_flip($relativeLessFiles); // Change relative paths into absolute paths foreach ($relativeLessFiles as $relativeLessFile => $nothing) { $absoluteLessFiles[ROOT_PATH . "/less/" . $relativeLessFile] = ""; } // Generate one minified CSS file into public/css/ from sources in less/ $options = array( 'cache_dir' => ROOT_PATH . '/public/css/', 'compress' => true ); $cssFileName = Less_Cache::Get($absoluteLessFiles, $options, THEME); ?> <?php if (isset($page['title']) AND $page['title'] != "Accueil") echo $page['title'] . " < "; if (isset($page['service'])) echo $page['service'] . " < "; ?>Niver