request instanceof Http) { return $result; } if (!$this->shouldBypassBackendHostCheck($this->request)) { return $result; } if ($subject->isHostBackend()) { return $result; } return $proceed(false); } private function shouldBypassBackendHostCheck(Http $request): bool { if ($this->tunnelRequestDetector->getTunnelStoreCode($request) !== null) { return true; } return $this->requestHostMatchesTunnelStoreUrls($request); } /** * Hostname-only match (tunnel unsecure/secure may differ in scheme/port from the current request). */ private function requestHostMatchesTunnelStoreUrls(Http $request): bool { $state = $this->tunnelStoreState->read(); if ($state === null) { return false; } $requestHost = $this->hostFromHttpHost($request->getServer('HTTP_HOST')); if ($requestHost === null) { return false; } foreach ([$state['unsecure_base_url'], $state['secure_base_url']] as $baseUrl) { if ($baseUrl === '') { continue; } $configuredHost = $this->hostFromBaseUrl($baseUrl); if ($configuredHost !== null && strcasecmp($requestHost, $configuredHost) === 0) { return true; } } return false; } private function hostFromHttpHost(?string $httpHost): ?string { if ($httpHost === null || $httpHost === '') { return null; } $parsed = parse_url('http://' . $httpHost); if ($parsed === false || !isset($parsed['host'])) { return null; } return $parsed['host']; } private function hostFromBaseUrl(string $baseUrl): ?string { $parsed = parse_url($baseUrl); if ($parsed === false || !isset($parsed['host'])) { return null; } return $parsed['host']; } }