feat(discord): finish discord login/logout sequence

Signed-off-by: miguel456 <me@nogueira.codes>
This commit is contained in:
2022-10-15 02:18:41 +01:00
parent 0d749c4390
commit 0940ad715f
5 changed files with 125 additions and 3 deletions

View File

@@ -32,17 +32,20 @@ use App\Http\Requests\FlushSessionsRequest;
use App\Http\Requests\Remove2FASecretRequest;
use App\Http\Requests\Reset2FASecretRequest;
use App\Http\Requests\SearchPlayerRequest;
use App\Http\Requests\SetNewPasswordRequest;
use App\Http\Requests\UpdateUserRequest;
use App\Notifications\ChangedPassword;
use App\Notifications\EmailChanged;
use App\Notifications\PasswordAdminResetNotification;
use App\Notifications\TwoFactorResetNotification;
use App\Services\AccountSuspensionService;
use App\Services\DiscordService;
use App\Traits\DisablesFeatures;
use App\Traits\HandlesAccountDeletion;
use App\Traits\ReceivesAccountTokens;
use App\User;
use Google2FA;
use Illuminate\Http\Client\RequestException;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
@@ -245,6 +248,44 @@ class UserController extends Controller
}
/**
* Sets a user's password and removes their discord information from storage
*
* @param User $user
* @param SetNewPasswordRequest $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
public function setUnlinkPassword(SetNewPasswordRequest $request, DiscordService $discordService)
{
Auth::user()->password = Hash::make($request->newpass);
Auth::user()->save();
try {
$discordService->revokeAccountTokens(Auth::user());
Log::warning('Revoking social account tokens, user initiated', [
'user' => Auth::user()->email
]);
} catch (RequestException $requestException) {
if ($requestException->getCode() == 401) {
return redirect(route('discordRedirect'));
}
Log::error('Error while trying to revoke Discord credentials', [$requestException->getMessage()]);
return redirect()
->back()
->with('error', __('An unknown error ocurred. Please try again later.'));
}
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
$request->session()->flash('success', 'Discord account unlinked! You may now login with your Discord email and brand new password.');
return redirect(route('login'));
}
/**
* Change the current user's email address