From c16ad7244996086eb2f607e3752aeb329596bbd6 Mon Sep 17 00:00:00 2001 From: Wes Copeland Date: Wed, 2 Oct 2024 16:55:01 -0400 Subject: [PATCH] fix: password reset functionality (#2736) --- app/Helpers/database/user-password-reset.php | 14 ++--- app/Helpers/database/user-permission.php | 60 ++++++++----------- app/Models/User.php | 3 + public/request/auth/reset-password.php | 2 +- .../auth/send-password-reset-email.php | 7 ++- 5 files changed, 40 insertions(+), 46 deletions(-) diff --git a/app/Helpers/database/user-password-reset.php b/app/Helpers/database/user-password-reset.php index cdb26af2ed..052294ffa9 100644 --- a/app/Helpers/database/user-password-reset.php +++ b/app/Helpers/database/user-password-reset.php @@ -1,5 +1,6 @@ username; + $emailAddress = $user->EmailAddress; $newToken = Str::random(20); diff --git a/app/Helpers/database/user-permission.php b/app/Helpers/database/user-permission.php index cfb4f694a5..1b7cdbee05 100644 --- a/app/Helpers/database/user-permission.php +++ b/app/Helpers/database/user-permission.php @@ -144,44 +144,36 @@ function setAccountForumPostAuth(User $sourceUser, int $sourcePermissions, User */ function banAccountByUsername(string $username, int $permissions): void { - $db = getMysqliConnection(); - - echo "BANNING $username ... "; - - if (empty($username)) { - echo "FAIL" . PHP_EOL; + $user = User::firstWhere('User', $username); + if (!$user) { return; } - $dbResult = s_mysql_query("UPDATE UserAccounts u SET - u.email_verified_at = null, - u.Password = null, - u.SaltedPass = '', - u.Permissions = $permissions, - u.fbUser = 0, - u.fbPrefs = null, - u.cookie = null, - u.appToken = null, - u.appTokenExpiry = null, - u.ManuallyVerified = 0, - u.forum_verified_at = null, - u.Motto = '', - u.Untracked = 1, - u.APIKey = null, - u.UserWallActive = 0, - u.RichPresenceMsg = null, - u.RichPresenceMsgDate = null, - u.PasswordResetToken = '', - u.banned_at = NOW(), - u.Updated = NOW() - WHERE u.User='$username'" - ); - if (!$dbResult) { - echo mysqli_error($db) . PHP_EOL; - } + $user->email_verified_at = null; + $user->password = null; + $user->SaltedPass = ''; + $user->setAttribute('Permissions', $permissions); + $user->fbUser = 0; + $user->fbPrefs = null; + $user->cookie = null; + $user->appToken = null; + $user->appTokenExpiry = null; + $user->ManuallyVerified = 0; + $user->forum_verified_at = null; + $user->Motto = ''; + $user->Untracked = 1; + $user->unranked_at = now(); + $user->APIKey = null; + $user->UserWallActive = 0; + $user->RichPresenceMsg = null; + $user->RichPresenceMsgDate = null; + $user->PasswordResetToken = ''; + $user->banned_at = now(); + $user->Updated = now(); + + $user->save(); removeAvatar($username); - - echo "SUCCESS" . PHP_EOL; + $user->subscriptions()->delete(); } diff --git a/app/Models/User.php b/app/Models/User.php index 2466c1c777..2e83abaa75 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -131,6 +131,7 @@ class User extends Authenticatable implements CommunityMember, Developer, HasCom 'APIUses', 'APIKey', 'banned_at', + 'cookie', // fillable for when users are banned 'ContribCount', 'ContribYield', 'country', @@ -148,12 +149,14 @@ class User extends Authenticatable implements CommunityMember, Developer, HasCom 'Motto', 'muted_until', 'password', // fillable for registration + 'PasswordResetToken', // fillable for when users are banned 'Permissions', 'preferences', 'RAPoints', 'RASoftcorePoints', 'RichPresenceMsg', 'RichPresenceMsgDate', + 'SaltedPass', // fillable for when users are banned 'TrueRAPoints', 'timezone', 'unranked_at', diff --git a/public/request/auth/reset-password.php b/public/request/auth/reset-password.php index b6bf6d5749..8ad857bf65 100644 --- a/public/request/auth/reset-password.php +++ b/public/request/auth/reset-password.php @@ -16,7 +16,7 @@ $targetUser = User::firstWhere('User', $input['username']); -if (!$targetUser || !isValidPasswordResetToken($targetUser->username, $passResetToken)) { +if (!$targetUser || $targetUser->isBanned() || !isValidPasswordResetToken($targetUser->username, $passResetToken)) { return back()->withErrors(__('legacy.error.token')); } diff --git a/public/request/auth/send-password-reset-email.php b/public/request/auth/send-password-reset-email.php index 6ca072fbd6..52a38cc6e9 100644 --- a/public/request/auth/send-password-reset-email.php +++ b/public/request/auth/send-password-reset-email.php @@ -1,5 +1,6 @@ 'required', ]); -RequestPasswordReset($input['username']); +$targetUser = User::firstWhere('User', $input['username']); + +if ($targetUser && !$targetUser->isBanned()) { + RequestPasswordReset($targetUser); +} return back()->with('message', __('legacy.email_check'));