redirectsRepository = $redirectsRepository; $this->candidateEvaluator = $candidateEvaluator; $this->dispatcher = $dispatcher; $this->telemetry = $telemetry; } /** * @param string $requestedURL * @param string $requestedURLWithoutComments * @param array $options * @param bool $degradedMode * @param ABJ_404_Solution_FrontendPipelineTrace $trace * @return array|null Auto redirect that should defer until after regex lookup. */ function dispatchManualOrFindDeferredAuto( string $requestedURL, string $requestedURLWithoutComments, array $options, bool $degradedMode, ABJ_404_Solution_FrontendPipelineTrace $trace ): ?array { $deferredAutoRedirect = null; $redirect = $this->lookup($requestedURL, $degradedMode); $this->telemetry->logAReallyLongDebugMessage($options, $requestedURL, $redirect); $matched = $this->candidateEvaluator->evaluate($redirect, '', $options, $trace); if ($matched !== null) { if ($this->candidateEvaluator->isAutoRedirect($matched)) { $deferredAutoRedirect = $matched; } else { $this->dispatcher->processRedirect($requestedURL, $matched, 'existing', $trace); return $deferredAutoRedirect; } } if ($requestedURLWithoutComments == $requestedURL) { return $deferredAutoRedirect; } $wcRedirect = $this->lookup($requestedURLWithoutComments, $degradedMode); $matched = $this->candidateEvaluator->evaluate($wcRedirect, ' (without comments)', $options, $trace); if ($matched === null) { return $deferredAutoRedirect; } if ($this->candidateEvaluator->isAutoRedirect($matched)) { return $deferredAutoRedirect === null ? $matched : $deferredAutoRedirect; } $this->dispatcher->processRedirect($requestedURL, $matched, 'existing', $trace); return $deferredAutoRedirect; } /** * @param string $requestedURL * @param array $options * @param bool $degradedMode * @return array */ function lookupForEmptyUrl(string $requestedURL, array $options, bool $degradedMode): array { $redirect = $this->lookup($requestedURL, $degradedMode); $this->telemetry->logAReallyLongDebugMessage($options, $requestedURL, $redirect); return $redirect; } /** * @param string $requestedURL * @param bool $degradedMode * @return array */ private function lookup(string $requestedURL, bool $degradedMode): array { $lookupStart = abj_clock()->nowFloat(); $redirect = $this->redirectsRepository->getActiveRedirectForURL($requestedURL, $degradedMode); $this->telemetry->recordRedirectLookupTiming($lookupStart); return is_array($redirect) ? $redirect : array('id' => '0', 'final_dest' => '0'); } }