jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/344809 )
Change subject: MWHttpRequest: optionally add original request data
......................................................................
MWHttpRequest: optionally add original request data
Bug: T161029
Change-Id: I16a2eec46ae9e0e242fe740be20e39a2422dc867
---
M includes/http/Http.php
M includes/http/MWHttpRequest.php
2 files changed, 35 insertions(+), 0 deletions(-)
Approvals:
jenkins-bot: Verified
Anomie: Looks good to me, approved
diff --git a/includes/http/Http.php b/includes/http/Http.php
index fa2d5a3..889cb60 100644
--- a/includes/http/Http.php
+++ b/includes/http/Http.php
@@ -53,6 +53,8 @@
* - logger A \Psr\Logger\LoggerInterface instance for
debug logging
* - username Username for HTTP Basic Authentication
* - password Password for HTTP Basic Authentication
+ * - originalRequest Information about the original request (as
a WebRequest object or
+ * an associative array with 'ip' and
'userAgent').
* @param string $caller The method making this request, for profiling
* @return string|bool (bool)false on failure or a string on success
*/
diff --git a/includes/http/MWHttpRequest.php b/includes/http/MWHttpRequest.php
index e04402f..8d58ce5 100644
--- a/includes/http/MWHttpRequest.php
+++ b/includes/http/MWHttpRequest.php
@@ -125,6 +125,9 @@
'Basic ' . base64_encode( $options['username']
. ':' . $options['password'] )
);
}
+ if ( isset( $options['originalRequest'] ) ) {
+ $this->setOriginalRequest( $options['originalRequest']
);
+ }
$members = [ "postData", "proxy", "noProxy", "sslVerifyHost",
"caInfo",
"method", "followRedirects", "maxRedirects",
"sslVerifyCert", "callback" ];
@@ -632,4 +635,34 @@
public function canFollowRedirects() {
return true;
}
+
+ /**
+ * Set information about the original request. This can be useful for
+ * endpoints/API modules which act as a proxy for some service, and
+ * throttling etc. needs to happen in that service.
+ * Calling this will result in the X-Forwarded-For and
X-Original-User-Agent
+ * headers being set.
+ * @param WebRequest|array $originalRequest When in array form, it's
+ * expected to have the keys 'ip' and 'userAgent'.
+ * @note IP/user agent is personally identifiable information, and
should
+ * only be set when the privacy policy of the request target is
+ * compatible with that of the MediaWiki installation.
+ */
+ public function setOriginalRequest( $originalRequest ) {
+ if ( $originalRequest instanceof WebRequest ) {
+ $originalRequest = [
+ 'ip' => $originalRequest->getIP(),
+ 'userAgent' => $originalRequest->getHeader(
'User-Agent' ),
+ ];
+ } elseif (
+ !is_array( $originalRequest )
+ || array_diff( [ 'ip', 'userAgent' ], array_keys(
$originalRequest ) )
+ ) {
+ throw new InvalidArgumentException( __METHOD__ . ':
$originalRequest must be a '
+ . "WebRequest or an array with 'ip' and
'userAgent' keys" );
+ }
+
+ $this->reqHeaders['X-Forwarded-For'] = $originalRequest['ip'];
+ $this->reqHeaders['X-Original-User-Agent'] =
$originalRequest['userAgent'];
+ }
}
--
To view, visit https://gerrit.wikimedia.org/r/344809
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I16a2eec46ae9e0e242fe740be20e39a2422dc867
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Gergő Tisza <[email protected]>
Gerrit-Reviewer: Anomie <[email protected]>
Gerrit-Reviewer: Fomafix <[email protected]>
Gerrit-Reviewer: Ladsgroup <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits