Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save laurentiu1981/c9d0e3916d22811e00b500896e228309 to your computer and use it in GitHub Desktop.
Save laurentiu1981/c9d0e3916d22811e00b500896e228309 to your computer and use it in GitHub Desktop.
deci ar fi cam asa:
ai avea de adaugat o clasa intr-un modul custom numita <nume_modul>ServiceProvider
care sa extinda ServiceProviderBase, asta ar trebui sa stea in folderul src.
e.g. daca numele modulului e xxx_yyy, atunci clasa ar trebui sa fie XxxYyyServiceProvider
=====================
namespace Drupal\xxx_yyy;
use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\DependencyInjection\ServiceProviderBase;
class XxxYyyServiceProvider extends ServiceProviderBase {
public function alter(ContainerBuilder $container) {
$reverse_proxy_definition = $container->getDefinition('http_middleware.reverse_proxy');
$reverse_proxy_definition->setClass('Drupal\xxx_yyy\StackMiddleware\MyReverseProxyMiddleware');
}
}
===========================
Practic alterezi service-ul core sa foloseasca clasa ta.
Clasa ta trebuie sa extinda ReverseProxyMiddleware si ai de facut override la function setSettingsOnRequest
Aici core-ul altereaza putin requestul, pe baza unor setari, deci ar trebui doar sa adaugi la ce face el, inca 2 linii aprox:
namespace Drupal\xxx_yyy\StackMiddleware;
use Drupal\Core\Site\Settings;
use Drupal\Core\StackMiddleware\ReverseProxyMiddleware;
use Symfony\Component\HttpFoundation\Request;
class MyReverseProxymiddleware extends ReverseProxyMiddleware {
/**
* Sets reverse proxy settings on Request object.
*
* @param \Symfony\Component\HttpFoundation\Request $request
* A Request instance.
* @param \Drupal\Core\Site\Settings $settings
* The site settings.
*/
public static function setSettingsOnRequest(Request $request, Settings $settings) {
// Initialize proxy settings.
if ($settings->get('reverse_proxy', FALSE)) {
$ip_header = $settings->get('reverse_proxy_header', 'X_FORWARDED_FOR');
$request::setTrustedHeaderName($request::HEADER_CLIENT_IP, $ip_header);
$proto_header = $settings->get('reverse_proxy_proto_header', 'X_FORWARDED_PROTO');
$request::setTrustedHeaderName($request::HEADER_CLIENT_PROTO, $proto_header);
$host_header = $settings->get('reverse_proxy_host_header', 'X_FORWARDED_HOST');
$request::setTrustedHeaderName($request::HEADER_CLIENT_HOST, $host_header);
$port_header = $settings->get('reverse_proxy_port_header', 'X_FORWARDED_PORT');
$request::setTrustedHeaderName($request::HEADER_CLIENT_PORT, $port_header);
$forwarded_header = $settings->get('reverse_proxy_forwarded_header', 'FORWARDED');
$request::setTrustedHeaderName($request::HEADER_FORWARDED, $forwarded_header);
$proxies = $settings->get('reverse_proxy_addresses', []);
if (count($proxies) > 0) {
$request::setTrustedProxies($proxies);
}
}
else {
$request->server->set('REMOTE_ADDR', $_SERVER['REMOTE_ADDR']);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment