EnsureClientIsVerified.php 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. <?php
  2. namespace App\Http\Middleware;
  3. use App\Enums\IdentityVerificationStatusEnum;
  4. use App\Enums\UserTypeEnum;
  5. use Closure;
  6. use Illuminate\Http\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. class EnsureClientIsVerified
  9. {
  10. public function handle(Request $request, Closure $next): Response
  11. {
  12. $user = $request->user();
  13. if (! $user || $user->type !== UserTypeEnum::CLIENT) {
  14. return $next($request);
  15. }
  16. $client = $user->client;
  17. if (! $client || ! $client->identity_verification_required) {
  18. return $next($request);
  19. }
  20. if ($client->identity_verification_status === IdentityVerificationStatusEnum::APPROVED) {
  21. return $next($request);
  22. }
  23. return response()->json([
  24. 'payload' => [
  25. 'identity_verification_status' => $client->identity_verification_status?->value,
  26. 'attempts_left' => $this->attemptsLeft($client->identity_verification_attempts),
  27. ],
  28. 'message' => __('identity_verification.client_not_verified'),
  29. ], 403);
  30. }
  31. private function attemptsLeft(?int $attempts): int
  32. {
  33. return max(0, (int) config('services.didit.max_attempts', 3) - (int) $attempts);
  34. }
  35. }