. */ namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use App\Services\AccountSuspensionService; use App\User; use Illuminate\Foundation\Auth\AuthenticatesUsers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; use App\Facades\IP; use Laravel\Socialite\Facades\Socialite; class LoginController extends Controller { /* |-------------------------------------------------------------------------- | Login Controller |-------------------------------------------------------------------------- | | This controller handles authenticating users for the application and | redirecting them to your home screen. The controller uses a trait | to conveniently provide its functionality to your applications. | */ use AuthenticatesUsers { attemptLogin as protected originalAttemptLogin; } /** * Where to redirect users after login. * * @var string */ protected $redirectTo = '/dashboard'; /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('guest')->except('logout'); } // We can't customise the error message, since that would imply overriding the login method, which is large. // Also, the user should never know that they're banned. public function attemptLogin(Request $request): bool { $service = new AccountSuspensionService; $user = User::where('email', $request->email)->first(); if ($user) { $isBanned = $service->isSuspended($user); $isLocked = $service->isLocked($user); if ($isBanned || $isLocked) { Log::alert('Restricted user attempting to login.', [ 'ip' => $request->ip(), 'email' => $user->email, 'isBanned' => $isBanned, 'isLocked' => $isLocked ]); return false; } else { return $this->originalAttemptLogin($request); } } return $this->originalAttemptLogin($request); } public function authenticated(Request $request, User $user) { if (IP::shouldCollect()) { if ($user->originalIP !== $request->ip()) { Log::alert('User IP address changed from last login. Updating.', [ 'prev' => $user->originalIP, 'new' => $request->ip() ]); $user->currentIp = $request->ip(); $user->save(); } } } public function discordRedirect() { return Socialite::driver('discord')->redirect(); } public function discordCallback() { // TODO; } }