5 use Drupal\Component\Utility\SafeMarkup;
6 use Symfony\Component\HttpFoundation\Request;
7 use Symfony\Component\HttpFoundation\Response;
8 use Symfony\Component\HttpKernel\HttpKernelInterface;
11 * Provides a HTTP middleware to implement IP based banning.
13 class BanMiddleware implements HttpKernelInterface {
16 * The decorated kernel.
18 * @var \Symfony\Component\HttpKernel\HttpKernelInterface
20 protected $httpKernel;
25 * @var \Drupal\ban\BanIpManagerInterface
27 protected $banIpManager;
30 * Constructs a BanMiddleware object.
32 * @param \Symfony\Component\HttpKernel\HttpKernelInterface $http_kernel
33 * The decorated kernel.
34 * @param \Drupal\ban\BanIpManagerInterface $manager
37 public function __construct(HttpKernelInterface $http_kernel, BanIpManagerInterface $manager) {
38 $this->httpKernel = $http_kernel;
39 $this->banIpManager = $manager;
45 public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = TRUE) {
46 $ip = $request->getClientIp();
47 if ($this->banIpManager->isBanned($ip)) {
48 return new Response(SafeMarkup::format('@ip has been banned', ['@ip' => $ip]), 403);
50 return $this->httpKernel->handle($request, $type, $catch);