|
@@ -1,4 +1,5 @@
|
|
|
<?php
|
|
|
+define('TIME', hrtime(true));
|
|
|
define('CONF', parse_ini_file(__DIR__ . '/config.ini', true, INI_SCANNER_TYPED));
|
|
|
|
|
|
foreach (array_diff(scandir(CONF['common']['root_path'] . '/fn'), array('..', '.')) as $file)
|
|
@@ -31,7 +32,8 @@ function getPageInformations($pages, $pageElements) {
|
|
|
if (!isset($pages['index']) OR $pageElements[0] === 'index')
|
|
|
return [
|
|
|
'titles_lineage' => [$pages[$pageElements[0]]['title'] ?? false],
|
|
|
- 'page_metadata' => $pages[$pageElements[0]] ?? NULL
|
|
|
+ 'page_metadata' => $pages[$pageElements[0]] ?? NULL,
|
|
|
+ 'terminal' => $pageElements[0] !== 'index'
|
|
|
];
|
|
|
$result = $pages['index']['title'];
|
|
|
if (!isset($pageElements[1]))
|
|
@@ -45,6 +47,7 @@ function getPageInformations($pages, $pageElements) {
|
|
|
$pageInformations = getPageInformations(PAGES, PAGE_LINEAGE);
|
|
|
define('TITLES_LINEAGE', array_reverse($pageInformations['titles_lineage']));
|
|
|
define('PAGE_METADATA', $pageInformations['page_metadata']);
|
|
|
+define('PAGE_TERMINAL', $pageInformations['terminal']);
|
|
|
|
|
|
if (!TITLES_LINEAGE[array_key_last(TITLES_LINEAGE)]) {
|
|
|
http_response_code(404);
|
|
@@ -52,11 +55,7 @@ if (!TITLES_LINEAGE[array_key_last(TITLES_LINEAGE)]) {
|
|
|
}
|
|
|
|
|
|
const SESSION_COOKIE_NAME = 'niver-session-key';
|
|
|
-if (
|
|
|
- isset($_COOKIE[SESSION_COOKIE_NAME]) // Resume session
|
|
|
- OR
|
|
|
- (isset($_POST['username']) AND in_array(PAGE_URL, ['auth/login', 'auth/register'])) // Start new session
|
|
|
- ) {
|
|
|
+function startSession() {
|
|
|
session_start([
|
|
|
'name' => SESSION_COOKIE_NAME,
|
|
|
'sid_length' => 64,
|
|
@@ -72,44 +71,8 @@ if (
|
|
|
'use_only_cookies' => true,
|
|
|
]);
|
|
|
}
|
|
|
-
|
|
|
-?>
|
|
|
-<!DOCTYPE html>
|
|
|
-<html lang="fr"<?php if (!empty(SERVICE)) echo ' class="' . SERVICE . '"'; ?>>
|
|
|
- <head>
|
|
|
- <meta charset="utf-8">
|
|
|
- <title><?php
|
|
|
-foreach(array_reverse(TITLES_LINEAGE) as $id => $title)
|
|
|
- echo strip_tags($title) . (array_key_last(TITLES_LINEAGE) === $id ? '' : ' < ');
|
|
|
-?></title>
|
|
|
-<?php
|
|
|
-foreach (glob('css/*.css') as $cssPath)
|
|
|
- echo ' <link type="text/css" rel="stylesheet" media="screen" href="' . CONF['common']['prefix'] . '/' . $cssPath . '">' . LF;
|
|
|
-?>
|
|
|
- <meta name="viewport" content="width=device-width, initial-scale=1">
|
|
|
- </head>
|
|
|
- <body>
|
|
|
- <header>
|
|
|
- <p>
|
|
|
-<?php if (isset($_SESSION['id'])) { ?>
|
|
|
- <?= ($_SESSION['type'] === 'approved') ? '<span title="Compte approuvé">👤 </span>' : '<span title="Compte de test">⏳ </span>' ?><strong><?= $_SESSION['display-username'] ?></strong> <a class="auth" href="<?= CONF['common']['prefix'] ?>/auth/logout">Se déconnecter</a>
|
|
|
-<?php } else { ?>
|
|
|
- <span aria-hidden="true">👻 </span><em>Anonyme</em> <a class="auth" href="<?= redirUrl('auth/login') ?>">Se connecter</a>
|
|
|
-<?php } ?>
|
|
|
- </p>
|
|
|
- <nav>
|
|
|
-<?php
|
|
|
-foreach (TITLES_LINEAGE as $id => $title) {
|
|
|
- $lastTitle = (TITLES_LINEAGE[array_key_last(TITLES_LINEAGE)] === $title);
|
|
|
- echo '<ul><li>' . ($lastTitle ? '<h1>' : '') . '<a' . (($id === 0) ? ' class="niver"' : '') . ' href="' . CONF['common']['prefix'] . ($lastTitle ? '/' . PAGE_URL : '/' . implode('/', array_slice(PAGE_LINEAGE, 0, $id)) . (($lastTitle OR $id === 0) ? '' : '/')) . '">' . $title . '</a>' . ($lastTitle ? '</h1>' : '') . LF;
|
|
|
-}
|
|
|
-echo str_repeat('</li></ul>', count(TITLES_LINEAGE));
|
|
|
-?>
|
|
|
-
|
|
|
- </nav>
|
|
|
- </header>
|
|
|
- <main>
|
|
|
-<?php
|
|
|
+if (isset($_COOKIE[SESSION_COOKIE_NAME]))
|
|
|
+ startSession(); // Resume session
|
|
|
|
|
|
if (in_array(SERVICE, ['reg', 'ns', 'ht']) AND CONF[SERVICE]['enabled'] !== true)
|
|
|
output(403, 'Ce service est désactivé.');
|
|
@@ -128,24 +91,26 @@ if (in_array($_SERVER['SERVER_NAME'], CONF['common']['public_domains'], true) !=
|
|
|
output(500, 'The current server name is not allowed in configuration.');
|
|
|
define('SERVER_NAME', $_SERVER['SERVER_NAME']);
|
|
|
|
|
|
-function displayFinalMessage() {
|
|
|
- global $final_message;
|
|
|
- echo $final_message ?? '';
|
|
|
- $final_message = NULL;
|
|
|
+function displayFinalMessage($data) {
|
|
|
+ if (isset($data['final_message'])) {
|
|
|
+ echo $data['final_message'];
|
|
|
+ unset($data['final_message']);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-function executePage() {
|
|
|
- require 'pages/' . PAGE_ADDRESS . '.php';
|
|
|
+if ($_POST !== []) {
|
|
|
+ if (PAGE_METADATA['require-login'] ?? true !== false) {
|
|
|
+ if (isset($_SESSION['id']) !== true)
|
|
|
+ output(403, 'Vous devez être connecté·e à un compte pour effectuer cette action.');
|
|
|
+ if (isset(query('select', 'users', ['id' => $_SESSION['id']], 'id')[0]) !== true)
|
|
|
+ output(403, 'Ce compte n\'existe plus. Déconnectez-vous pour terminer cette session fantôme.');
|
|
|
+ }
|
|
|
+ if (file_exists('pg-act/' . PAGE_ADDRESS . '.php'))
|
|
|
+ require 'pg-act/' . PAGE_ADDRESS . '.php';
|
|
|
+}
|
|
|
|
|
|
- displayFinalMessage();
|
|
|
-?>
|
|
|
- </main>
|
|
|
- <footer>
|
|
|
- <small><a rel="external" href="https://code.antopie.org/niver/niver" class="niver">Code source</a> sous <abbr title="Cooperative Nonviolent Public License No Attribution version 7 ou plus">CNPL-NAv7+</abbr>.</small>
|
|
|
- </footer>
|
|
|
- </body>
|
|
|
-</html>
|
|
|
-<?php
|
|
|
+function displayPage($data) {
|
|
|
+ require 'view.php';
|
|
|
exit();
|
|
|
}
|
|
|
-executePage();
|
|
|
+displayPage($data ??= NULL);
|