. */ namespace FireflyIII\Http\Middleware; use Closure; use Illuminate\Auth\AuthenticationException; use Illuminate\Contracts\Auth\Factory as Auth; /** * Class Authenticate */ class Authenticate { /** * The authentication factory instance. * * @var \Illuminate\Contracts\Auth\Factory */ protected $auth; /** * Create a new middleware instance. * * @param \Illuminate\Contracts\Auth\Factory $auth * * @return void */ public function __construct(Auth $auth) { $this->auth = $auth; } /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @param string[] ...$guards * * @return mixed * * @throws \Illuminate\Auth\AuthenticationException */ public function handle($request, Closure $next, ...$guards) { $this->authenticate($guards); return $next($request); } /** * Determine if the user is logged in to any of the given guards. * * @param array $guards * * @return void * * @throws \Illuminate\Auth\AuthenticationException */ protected function authenticate(array $guards) { if (empty($guards)) { // go for default guard: if ($this->auth->check()) { // do an extra check on user object. $user = $this->auth->authenticate(); if (1 === intval($user->blocked)) { $message = strval(trans('firefly.block_account_logout')); if ('email_changed' === $user->blocked_code) { $message = strval(trans('firefly.email_changed_logout')); } app('session')->flash('logoutMessage', $message); $this->auth->logout(); throw new AuthenticationException('Blocked account.', $guards); } } return $this->auth->authenticate(); } // @codeCoverageIgnoreStart foreach ($guards as $guard) { if ($this->auth->guard($guard)->check()) { return $this->auth->shouldUse($guard); } } throw new AuthenticationException('Unauthenticated.', $guards); // @codeCoverageIgnoreEnd } }