BookStack/app/Http/Middleware/CheckEmailConfirmed.php
Dan Brown 2740603d99
Added back email confirmation check in middleware
During writing of the update notes, found that the upgrade path would be
tricky from a security point of view. If people were pending email
confirmation but had an active session, they could technically be
actively logged in after the next release.

Added middlware as an extra precaution for now.
2021-08-30 21:28:17 +01:00

48 lines
1.3 KiB
PHP

<?php
namespace BookStack\Http\Middleware;
use BookStack\Auth\Access\EmailConfirmationService;
use BookStack\Auth\User;
use Closure;
/**
* Check that the user's email address is confirmed.
*
* As of v21.08 this is technically not required but kept as a prevention
* to log out any users that may be logged in but in an "awaiting confirmation" state.
* We'll keep this for a while until it'd be very unlikely for a user to be upgrading from
* a pre-v21.08 version.
*
* Ideally we'd simply invalidate all existing sessions upon update but that has
* proven to be a lot more difficult than expected.
*/
class CheckEmailConfirmed
{
protected $confirmationService;
public function __construct(EmailConfirmationService $confirmationService)
{
$this->confirmationService = $confirmationService;
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
/** @var User $user */
$user = auth()->user();
if (auth()->check() && !$user->email_confirmed && $this->confirmationService->confirmationRequired()) {
auth()->logout();
return redirect()->to('/');
}
return $next($request);
}
}