summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xcss/desktop/dropdown.css52
-rwxr-xr-xcss/desktop/navbar.css5
-rwxr-xr-xhtml/account.html8
-rwxr-xr-xhtml/stylesheets.html1
-rwxr-xr-xphp/session.php19
-rwxr-xr-xsignout/index.php28
6 files changed, 108 insertions, 5 deletions
diff --git a/css/desktop/dropdown.css b/css/desktop/dropdown.css
new file mode 100755
index 0000000..4691602
--- /dev/null
+++ b/css/desktop/dropdown.css
@@ -0,0 +1,52 @@
+/*
+ * GNUfault.org - GNUfault's website
+ * Copyright (C) 2026 Connor Thomson
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+.account .toggle {
+ display: none;
+}
+
+.account .username {
+ margin: 3px;
+ cursor: pointer;
+}
+
+.account .username:hover {
+ text-decoration: underline;
+}
+
+.account .menu {
+ display: none;
+ position: absolute;
+ top: 100%;
+ right: 5px;
+ padding: 3px;
+ background-color: white;
+ border: 1px solid #12A3EB;
+ border-radius: 3px;
+}
+
+.account .toggle:checked ~ .menu {
+ display: block;
+}
+
+.account .menu a {
+ display: block;
+ margin: 0;
+ padding: 1px 3px 1px 3px;
+ white-space: nowrap;
+}
diff --git a/css/desktop/navbar.css b/css/desktop/navbar.css
index c013565..c1e8ee2 100755
--- a/css/desktop/navbar.css
+++ b/css/desktop/navbar.css
@@ -17,6 +17,7 @@
*/
.header .navbar {
+ position: relative;
height: 35px;
padding: 5px;
background-color: #CADCEB;
@@ -35,7 +36,3 @@
.header .navbar a:hover {
text-decoration: underline;
}
-
-.header .navbar .username {
- margin: 3px;
-}
diff --git a/html/account.html b/html/account.html
index cad5558..251d33e 100755
--- a/html/account.html
+++ b/html/account.html
@@ -16,4 +16,10 @@
along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
-<span class="username">{{username}}</span>
+<div class="account">
+ <input class="toggle" type="checkbox" id="account">
+ <label class="username" for="account">{{username}}</label>
+ <div class="menu">
+ <a href="/signout">Sign-out</a>
+ </div>
+</div>
diff --git a/html/stylesheets.html b/html/stylesheets.html
index 4e3852c..8c97095 100755
--- a/html/stylesheets.html
+++ b/html/stylesheets.html
@@ -26,3 +26,4 @@
<link rel="stylesheet" href="/css/{{device}}/input.css">
<link rel="stylesheet" href="/css/{{device}}/login.css">
<link rel="stylesheet" href="/css/{{device}}/navbar.css">
+<link rel="stylesheet" href="/css/{{device}}/dropdown.css">
diff --git a/php/session.php b/php/session.php
index acb2df3..6f2d714 100755
--- a/php/session.php
+++ b/php/session.php
@@ -84,6 +84,25 @@ function set_user_id(int $user_id): void {
$_SESSION['user_id'] = $user_id;
}
+function sign_out(): void {
+ if (!has_session()) {
+ return;
+ }
+
+ start_session();
+
+ $_SESSION = [];
+
+ $parameters = session_cookie(0);
+ $parameters['expires'] = time() - 3600;
+
+ unset($parameters['lifetime']);
+
+ setcookie(session_name(), '', $parameters);
+
+ session_destroy();
+}
+
function get_user_id(): ?int {
if (!has_session()) {
return null;
diff --git a/signout/index.php b/signout/index.php
new file mode 100755
index 0000000..cf44de6
--- /dev/null
+++ b/signout/index.php
@@ -0,0 +1,28 @@
+<?php
+/*
+ * GNUfault.org - GNUfault's website
+ * Copyright (C) 2026 Connor Thomson
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+define('ROOT', rtrim($_SERVER['DOCUMENT_ROOT'], '/') . '/');
+
+require_once ROOT . '/php/session.php';
+
+sign_out();
+
+header("Location: /");
+
+?>