← All changes
|
vendor_prefixed/guzzlehttp/guzzle/src/Handler/Proxy.php
+25
-0
27.9
→
trunk
View file →
| @@ -45,5 +45,30 @@ | ||
| 45 | 45 | return static function (\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options) use($default, $streaming) : PromiseInterface { |
| 46 | 46 | return empty($options['stream']) ? $default($request, $options) : $streaming($request, $options); |
| 47 | 47 | }; |
| 48 | 48 | } |
| 49 | + /** | |
| 50 | + * Sends requests to a fallback handler when the default cURL handler cannot | |
| 51 | + * honor TLS 1.2 selection. | |
| 52 | + * | |
| 53 | + * @param callable(RequestInterface, array): PromiseInterface $default | |
| 54 | + * @param callable(RequestInterface, array): PromiseInterface $fallback | |
| 55 | + * | |
| 56 | + * @return callable(RequestInterface, array): PromiseInterface Returns the composed handler. | |
| 57 | + */ | |
| 58 | + public static function wrapTlsFallback(callable $default, callable $fallback) : callable | |
| 59 | + { | |
| 60 | + return static function (\YoastSEO_Vendor\Psr\Http\Message\RequestInterface $request, array $options) use($default, $fallback) : PromiseInterface { | |
| 61 | + if (self::requiresTls12Fallback($options)) { | |
| 62 | + return $fallback($request, $options); | |
| 63 | + } | |
| 64 | + return $default($request, $options); | |
| 65 | + }; | |
| 66 | + } | |
| 67 | + /** | |
| 68 | + * @param array<string, mixed> $options | |
| 69 | + */ | |
| 70 | + private static function requiresTls12Fallback(array $options) : bool | |
| 71 | + { | |
| 72 | + return isset($options[\YoastSEO_Vendor\GuzzleHttp\RequestOptions::CRYPTO_METHOD]) && $options[\YoastSEO_Vendor\GuzzleHttp\RequestOptions::CRYPTO_METHOD] === \STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT && !\YoastSEO_Vendor\GuzzleHttp\Handler\CurlVersion::supportsTls12(); | |
| 73 | + } | |
| 49 | 74 | } |