51 lines
1.3 KiB
PHP
51 lines
1.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Http\Middleware;
|
|
|
|
use Closure;
|
|
use Illuminate\Support\Facades\Redirect;
|
|
use Illuminate\Support\Facades\URL;
|
|
use Infrastructure\Adapters\Services\AppCustomerAuthService;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
|
|
class EnsureCustomerEmailIsVerified
|
|
{
|
|
public function __construct(
|
|
public readonly AppCustomerAuthService $authService
|
|
) {
|
|
}
|
|
|
|
/**
|
|
* Specify the redirect route for the middleware.
|
|
*
|
|
* @param string $route
|
|
* @return string
|
|
*/
|
|
public static function redirectTo($route)
|
|
{
|
|
return static::class . ':' . $route;
|
|
}
|
|
|
|
/**
|
|
* Handle an incoming request.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @param \Closure(\Illuminate\Http\Request):(\Illuminate\Http\Response) $next
|
|
*/
|
|
public function handle($request, Closure $next, ?string $redirectToRoute = null): Response
|
|
{
|
|
$customer = $this->authService->getCustomer();
|
|
|
|
if ($customer && ! $this->authService->hasVerifiedEmail($customer)) {
|
|
$redirectRoute = URL::route($redirectToRoute ?: 'fo.auth.verification.notice');
|
|
|
|
return $request->expectsJson()
|
|
? abort(403, 'Your email address is not verified.')
|
|
: Redirect::guest($redirectRoute);
|
|
}
|
|
|
|
return $next($request);
|
|
}
|
|
}
|