api de gestion de ticket, basé sur php-crud-api. Le but est de décorrélé les outils de gestion des données, afin
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

FirewallMiddleware.php 1.3KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. <?php
  2. namespace Tqdev\PhpCrudApi\Middleware;
  3. use Tqdev\PhpCrudApi\Controller\Responder;
  4. use Tqdev\PhpCrudApi\Record\ErrorCode;
  5. use Tqdev\PhpCrudApi\Request;
  6. use Tqdev\PhpCrudApi\Response;
  7. use Tqdev\PhpCrudApi\Middleware\Base\Middleware;
  8. class FirewallMiddleware extends Middleware
  9. {
  10. private function isIpAllowed(String $ipAddress, String $allowedIpAddresses): bool
  11. {
  12. foreach (explode(',', $allowedIpAddresses) as $allowedIp) {
  13. if ($ipAddress == trim($allowedIp)) {
  14. return true;
  15. }
  16. }
  17. return false;
  18. }
  19. public function handle(Request $request): Response
  20. {
  21. $reverseProxy = $this->getProperty('reverseProxy', '');
  22. if ($reverseProxy) {
  23. $ipAddress = array_pop(explode(',', $request->getHeader('X-Forwarded-For')));
  24. } elseif (isset($_SERVER['REMOTE_ADDR'])) {
  25. $ipAddress = $_SERVER['REMOTE_ADDR'];
  26. } else {
  27. $ipAddress = '127.0.0.1';
  28. }
  29. $allowedIpAddresses = $this->getProperty('allowedIpAddresses', '');
  30. if (!$this->isIpAllowed($ipAddress, $allowedIpAddresses)) {
  31. $response = $this->responder->error(ErrorCode::ACCESS_DENIED, $ipAddress);
  32. } else {
  33. $response = $this->next->handle($request);
  34. }
  35. return $response;
  36. }
  37. }