BanMiddleware.php 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <?php
  2. namespace Drupal\ban;
  3. use Drupal\Component\Render\FormattableMarkup;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\HttpKernel\HttpKernelInterface;
  7. /**
  8. * Provides a HTTP middleware to implement IP based banning.
  9. */
  10. class BanMiddleware implements HttpKernelInterface {
  11. /**
  12. * The decorated kernel.
  13. *
  14. * @var \Symfony\Component\HttpKernel\HttpKernelInterface
  15. */
  16. protected $httpKernel;
  17. /**
  18. * The ban IP manager.
  19. *
  20. * @var \Drupal\ban\BanIpManagerInterface
  21. */
  22. protected $banIpManager;
  23. /**
  24. * Constructs a BanMiddleware object.
  25. *
  26. * @param \Symfony\Component\HttpKernel\HttpKernelInterface $http_kernel
  27. * The decorated kernel.
  28. * @param \Drupal\ban\BanIpManagerInterface $manager
  29. * The ban IP manager.
  30. */
  31. public function __construct(HttpKernelInterface $http_kernel, BanIpManagerInterface $manager) {
  32. $this->httpKernel = $http_kernel;
  33. $this->banIpManager = $manager;
  34. }
  35. /**
  36. * {@inheritdoc}
  37. */
  38. public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = TRUE) {
  39. $ip = $request->getClientIp();
  40. if ($this->banIpManager->isBanned($ip)) {
  41. return new Response(new FormattableMarkup('@ip has been banned', ['@ip' => $ip]), 403);
  42. }
  43. return $this->httpKernel->handle($request, $type, $catch);
  44. }
  45. }