diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 45214af2f..6cea5e8a3 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -49,8 +49,8 @@ class LoginController extends Controller public function validateLogin($request) { $rules = [ - $this->username() => 'required|string', - 'password' => 'required|string', + $this->username() => 'required|email', + 'password' => 'required|string|min:6', ]; if (config('pixelfed.recaptcha')) { @@ -70,6 +70,10 @@ class LoginController extends Controller */ protected function authenticated($request, $user) { + if($user->status == 'deleted') { + return; + } + $log = new AccountLog(); $log->user_id = $user->id; $log->item_id = $user->id; diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php index 3c3be8d83..a3f766564 100644 --- a/app/Http/Controllers/SettingsController.php +++ b/app/Http/Controllers/SettingsController.php @@ -176,6 +176,7 @@ class SettingsController extends Controller $profile->save(); Cache::forget('profiles:private'); Auth::logout(); + DeleteAccountPipeline::dispatch($user); return redirect('/'); } diff --git a/app/Jobs/DeletePipeline/DeleteAccountPipeline.php b/app/Jobs/DeletePipeline/DeleteAccountPipeline.php index c0d0a6000..ba036e51a 100644 --- a/app/Jobs/DeletePipeline/DeleteAccountPipeline.php +++ b/app/Jobs/DeletePipeline/DeleteAccountPipeline.php @@ -30,6 +30,7 @@ use App\{ StatusHashtag, Status, User, + UserDevice, UserFilter, UserSetting, }; @@ -66,7 +67,9 @@ class DeleteAccountPipeline implements ShouldQueue } } }); + }); + DB::transaction(function() use ($user) { if($user->profile) { $avatar = $user->profile->avatar; @@ -90,7 +93,9 @@ class DeleteAccountPipeline implements ShouldQueue Follower::whereProfileId($id)->orWhere('following_id', $id)->forceDelete(); Like::whereProfileId($id)->forceDelete(); + }); + DB::transaction(function() use ($user) { $medias = Media::whereUserId($user->id)->get(); foreach($medias as $media) { $path = $media->media_path; @@ -103,31 +108,52 @@ class DeleteAccountPipeline implements ShouldQueue } $media->forceDelete(); } + }); + DB::transaction(function() use ($user) { Mention::whereProfileId($user->profile->id)->forceDelete(); + Notification::whereProfileId($user->profile->id)->orWhere('actor_id', $user->profile->id)->forceDelete(); + }); - Notification::whereProfileId($id)->orWhere('actor_id', $id)->forceDelete(); - + DB::transaction(function() use ($user) { Status::whereProfileId($user->profile->id)->forceDelete(); - Report::whereUserId($user->id)->forceDelete(); $this->deleteProfile($user); }); } - public function deleteProfile($user) { + protected function deleteProfile($user) { DB::transaction(function() use ($user) { Profile::whereUserId($user->id)->delete(); - $this->deleteUser($user); + $this->deleteUserSettings($user); }); } - public function deleteUser($user) { + protected function deleteUserSettings($user) { DB::transaction(function() use ($user) { + UserDevice::whereUserId($user->id)->forceDelete(); UserFilter::whereUserId($user->id)->forceDelete(); UserSetting::whereUserId($user->id)->forceDelete(); - $user->forceDelete(); + $this->deleteUserColumns($user); }); } + + protected function deleteUserColumns($user) + { + DB::transaction(function() use ($user) { + $user->status = 'deleted'; + $user->name = 'deleted'; + $user->email = $user->id; + $user->password = ''; + $user->remember_token = null; + $user->is_admin = false; + $user->{'2fa_enabled'} = false; + $user->{'2fa_secret'} = null; + $user->{'2fa_backup_codes'} = null; + $user->{'2fa_setup_at'} = null; + $user->save(); + }); + + } }