From 0e4f90e6a82f0fc275d65bf0e4f4c2842052dde9 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Sun, 2 Feb 2025 13:43:26 +0200 Subject: feat(views/user): Implement account deletion --- controllers/user.php | 29 +++++++++++++++++++++++++++++ migrations/00-initial.sql | 2 +- models/user.php | 26 ++++++++++++++++++++++++++ views/global/router.php | 2 ++ views/user/delete/index.php | 35 +++++++++++++++++++++++++++++++++++ views/user/delete/meta.php | 5 +++++ views/user/index.php | 4 ++++ 7 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 views/user/delete/index.php create mode 100644 views/user/delete/meta.php diff --git a/controllers/user.php b/controllers/user.php index 6c0c105..d79b294 100644 --- a/controllers/user.php +++ b/controllers/user.php @@ -21,3 +21,32 @@ function on_post() { $user_status = $e; } } + +function on_delete() { + global $TOKEN; + global $METHOD; + global $user_status; + $user_status = ""; + + try { + Database\Cookie::fromDB($TOKEN); + } + catch (Exception $e) { + $user_status = 'Invalid token!'; + return; + } + + $to_delete = null; + try { + $to_delete = Database\User::fromDBuid($METHOD['uid']); + } + catch(Exception $e) { + $list_status = "The user you're trying to delete doesn't exist!"; + return; + } + + $to_delete->delete(); + + header('Location: /'); + exit(); +} diff --git a/migrations/00-initial.sql b/migrations/00-initial.sql index 879b5f1..a4b999f 100644 --- a/migrations/00-initial.sql +++ b/migrations/00-initial.sql @@ -15,7 +15,7 @@ CREATE TABLE IF NOT EXISTS Cookies ( Token CHAR(36) NOT NULL, Expires DATETIME, PRIMARY KEY (UID, Token), - FOREIGN KEY (UID) REFERENCES Users(UID) + FOREIGN KEY (UID) REFERENCES Users(UID) ON DELETE CASCADE ); CREATE TABLE IF NOT EXISTS Webpages ( diff --git a/models/user.php b/models/user.php index 9b76f37..1f58e7c 100644 --- a/models/user.php +++ b/models/user.php @@ -57,4 +57,30 @@ class User extends Table { include $VIEWS_DIR . '/img/user-star.svg'; } } + + private static $AnonUID = 1; + + function delete() { + // Applicable to Anon user + if ($this->Password === '') { + throw new Exception('Not deleting system account!'); + } + + Table::_update( + 'Webpages', + 'RequesterUID = "' . self::$AnonUID . '"', + "RequesterUID = \"$this->UID\"" + ); + + Table::_update( + 'ArchiveLists', + 'AuthorUID = "' . self::$AnonUID . '"', + "AuthorUID = \"$this->UID\"" + ); + + Table::_delete( + 'Users', + "UID = \"$this->UID\"" + ); + } } diff --git a/views/global/router.php b/views/global/router.php index 2a02e22..661e116 100644 --- a/views/global/router.php +++ b/views/global/router.php @@ -33,6 +33,8 @@ function route_view() { case '/list/delete': return '/list/delete'; case '/archive/create': return '/archive/create'; + + case '/user/delete': return '/user/delete'; } switch ($root) { diff --git a/views/user/delete/index.php b/views/user/delete/index.php new file mode 100644 index 0000000..d1ce8b9 --- /dev/null +++ b/views/user/delete/index.php @@ -0,0 +1,35 @@ + + +UID === $to_delete->UID): ?> +

Are you sure you want to delete Username ?>?

+ +
+ + + +

+ Error: +

+ + + + + +
+ + +

The user "" doesn't exist!

+ + +

You have no permission to delete Username ?>!

+ + + diff --git a/views/user/delete/meta.php b/views/user/delete/meta.php new file mode 100644 index 0000000..c84ee9d --- /dev/null +++ b/views/user/delete/meta.php @@ -0,0 +1,5 @@ + +
+ + +