diff --git a/fn/auth.php b/fn/auth.php index 9eb7d68..7568099 100644 --- a/fn/auth.php +++ b/fn/auth.php @@ -55,6 +55,15 @@ function changePassword($id, $password) { $stmt->execute(); } +function logout() { + if (session_status() === PHP_SESSION_ACTIVE) + session_destroy(); + + header('Clear-Site-Data: "*"'); + + redir(); +} + function rateLimit() { if (PAGE_METADATA['tokens_account_cost'] ?? 0 > 0) rateLimitAccount(PAGE_METADATA['tokens_account_cost']); diff --git a/fn/common.php b/fn/common.php index 0ee4601..259ddfa 100644 --- a/fn/common.php +++ b/fn/common.php @@ -20,12 +20,17 @@ function output($code, $msg = '', $logs = ['']) { function processForm($requireLogin = true) { if (http_response_code() !== 200) return false; - if (empty($_POST) AND $requireLogin AND !isset($_SESSION['id'])) - echo '

Ce formulaire ne sera pas accepté car il faut se connecter avant.

'; - if (empty($_POST)) + if ($_POST === []) { + if ($requireLogin AND !isset($_SESSION['id'])) + echo '

Ce formulaire ne sera pas accepté car il faut se connecter avant.

'; return false; - if ($requireLogin AND !isset($_SESSION['id'])) - output(403, 'Vous devez être connecté·e pour effectuer cette action.'); + } + if ($requireLogin) { + 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.'); + } return true; } diff --git a/pages/auth/logout.php b/pages/auth/logout.php index 3ceb61a..bf11e4b 100644 --- a/pages/auth/logout.php +++ b/pages/auth/logout.php @@ -1,7 +1,3 @@ $_SESSION['id']]); - require 'logout.php'; + logout(); output(200, 'Compte supprimé.'); }