The following files exists in this folder. Click to view.
functions.php87 lines UTF-8 Unix (LF) 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
<?php
session_start();
if (!isset($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(16));
}
function redirect_with_flash(string $to, ?string $msg = null) {
if ($msg) $_SESSION['flash'] = $msg;
header("Location: {$to}");
exit;
}
define('USER_FILE', __DIR__ . '/data/users.txt');
function load_users(): array {
if (!file_exists(USER_FILE)) return [];
$rows = file(USER_FILE, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$users = [];
foreach ($rows as $row) {
[$u, $hash, $role] = explode(':', $row);
$users[$u] = [$hash, $role];
}
return $users;
}
function save_users(array $users): void {
$lines = [];
foreach ($users as $u => [$hash, $role]) {
$lines[] = "{$u}:{$hash}:{$role}";
}
file_put_contents(USER_FILE, implode(PHP_EOL, $lines) . PHP_EOL);
}
function try_cookie_login(): void {
if (!empty($_SESSION['user'])) return;
if (empty($_COOKIE['remember_user'])) return;
$username = $_COOKIE['remember_user'];
$roles = [
'admin' => 'admin',
'user' => 'Intentionally removed by CSource',
'bosse' => 'user'
];
session_regenerate_id(true);
$_SESSION['user'] = [
'name' => $username,
'role' => $roles[$username] ?? 'user',
'login_time' => time()
];
}
function require_login(): void {
try_cookie_login();
if (!isset($_SESSION['user'])) redirect_with_flash('login.php', 'Du måste vara inloggad.');
session_timeout_check();
}
function require_role(string $role): void {
require_login();
$current = $_SESSION['user']['role'] ?? 'user';
$rank = ['user' => 1, 'admin' => 2];
if (($rank[$current] ?? 0) < ($rank[$role] ?? 0)) redirect_with_flash('index.php', 'Du saknar behörighet.');
}
function session_timeout_check(): void {
if (!isset($_SESSION['user']) || !is_array($_SESSION['user'])) {
$_SESSION = [];
session_destroy();
header("Location: login.php");
exit;
}
$timeoutSeconds = 30 * 60;
$last = $_SESSION['user']['login_time'] ?? time();
if (time() - $last > $timeoutSeconds) {
$_SESSION = [];
session_destroy();
session_start();
redirect_with_flash('login.php', 'Sessionen löpte ut. Logga in igen.');
}
$_SESSION['user']['login_time'] = time();
}