summaryrefslogtreecommitdiffstats
path: root/wp-includes/Requests/src/Proxy
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:56:49 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:56:49 +0000
commita415c29efee45520ae252d2aa28f1083a521cd7b (patch)
treef4ade4b6668ecc0765de7e1424f7c1427ad433ff /wp-includes/Requests/src/Proxy
parentInitial commit. (diff)
downloadwordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.tar.xz
wordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.zip
Adding upstream version 6.4.3+dfsg1.upstream/6.4.3+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'wp-includes/Requests/src/Proxy')
-rw-r--r--wp-includes/Requests/src/Proxy/Http.php164
1 files changed, 164 insertions, 0 deletions
diff --git a/wp-includes/Requests/src/Proxy/Http.php b/wp-includes/Requests/src/Proxy/Http.php
new file mode 100644
index 0000000..e553c9c
--- /dev/null
+++ b/wp-includes/Requests/src/Proxy/Http.php
@@ -0,0 +1,164 @@
+<?php
+/**
+ * HTTP Proxy connection interface
+ *
+ * @package Requests\Proxy
+ * @since 1.6
+ */
+
+namespace WpOrg\Requests\Proxy;
+
+use WpOrg\Requests\Exception\ArgumentCount;
+use WpOrg\Requests\Exception\InvalidArgument;
+use WpOrg\Requests\Hooks;
+use WpOrg\Requests\Proxy;
+
+/**
+ * HTTP Proxy connection interface
+ *
+ * Provides a handler for connection via an HTTP proxy
+ *
+ * @package Requests\Proxy
+ * @since 1.6
+ */
+final class Http implements Proxy {
+ /**
+ * Proxy host and port
+ *
+ * Notation: "host:port" (eg 127.0.0.1:8080 or someproxy.com:3128)
+ *
+ * @var string
+ */
+ public $proxy;
+
+ /**
+ * Username
+ *
+ * @var string
+ */
+ public $user;
+
+ /**
+ * Password
+ *
+ * @var string
+ */
+ public $pass;
+
+ /**
+ * Do we need to authenticate? (ie username & password have been provided)
+ *
+ * @var boolean
+ */
+ public $use_authentication;
+
+ /**
+ * Constructor
+ *
+ * @since 1.6
+ *
+ * @param array|string|null $args Proxy as a string or an array of proxy, user and password.
+ * When passed as an array, must have exactly one (proxy)
+ * or three elements (proxy, user, password).
+ *
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not an array, a string or null.
+ * @throws \WpOrg\Requests\Exception\ArgumentCount On incorrect number of arguments (`proxyhttpbadargs`)
+ */
+ public function __construct($args = null) {
+ if (is_string($args)) {
+ $this->proxy = $args;
+ } elseif (is_array($args)) {
+ if (count($args) === 1) {
+ list($this->proxy) = $args;
+ } elseif (count($args) === 3) {
+ list($this->proxy, $this->user, $this->pass) = $args;
+ $this->use_authentication = true;
+ } else {
+ throw ArgumentCount::create(
+ 'an array with exactly one element or exactly three elements',
+ count($args),
+ 'proxyhttpbadargs'
+ );
+ }
+ } elseif ($args !== null) {
+ throw InvalidArgument::create(1, '$args', 'array|string|null', gettype($args));
+ }
+ }
+
+ /**
+ * Register the necessary callbacks
+ *
+ * @since 1.6
+ * @see \WpOrg\Requests\Proxy\Http::curl_before_send()
+ * @see \WpOrg\Requests\Proxy\Http::fsockopen_remote_socket()
+ * @see \WpOrg\Requests\Proxy\Http::fsockopen_remote_host_path()
+ * @see \WpOrg\Requests\Proxy\Http::fsockopen_header()
+ * @param \WpOrg\Requests\Hooks $hooks Hook system
+ */
+ public function register(Hooks $hooks) {
+ $hooks->register('curl.before_send', [$this, 'curl_before_send']);
+
+ $hooks->register('fsockopen.remote_socket', [$this, 'fsockopen_remote_socket']);
+ $hooks->register('fsockopen.remote_host_path', [$this, 'fsockopen_remote_host_path']);
+ if ($this->use_authentication) {
+ $hooks->register('fsockopen.after_headers', [$this, 'fsockopen_header']);
+ }
+ }
+
+ /**
+ * Set cURL parameters before the data is sent
+ *
+ * @since 1.6
+ * @param resource|\CurlHandle $handle cURL handle
+ */
+ public function curl_before_send(&$handle) {
+ curl_setopt($handle, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
+ curl_setopt($handle, CURLOPT_PROXY, $this->proxy);
+
+ if ($this->use_authentication) {
+ curl_setopt($handle, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
+ curl_setopt($handle, CURLOPT_PROXYUSERPWD, $this->get_auth_string());
+ }
+ }
+
+ /**
+ * Alter remote socket information before opening socket connection
+ *
+ * @since 1.6
+ * @param string $remote_socket Socket connection string
+ */
+ public function fsockopen_remote_socket(&$remote_socket) {
+ $remote_socket = $this->proxy;
+ }
+
+ /**
+ * Alter remote path before getting stream data
+ *
+ * @since 1.6
+ * @param string $path Path to send in HTTP request string ("GET ...")
+ * @param string $url Full URL we're requesting
+ */
+ public function fsockopen_remote_host_path(&$path, $url) {
+ $path = $url;
+ }
+
+ /**
+ * Add extra headers to the request before sending
+ *
+ * @since 1.6
+ * @param string $out HTTP header string
+ */
+ public function fsockopen_header(&$out) {
+ $out .= sprintf("Proxy-Authorization: Basic %s\r\n", base64_encode($this->get_auth_string()));
+ }
+
+ /**
+ * Get the authentication string (user:pass)
+ *
+ * @since 1.6
+ * @return string
+ */
+ public function get_auth_string() {
+ return $this->user . ':' . $this->pass;
+ }
+}