Per Aaron, fix for r89405: introduced DerivativeRequest to allow to override the...
authorAlexandre Emsenhuber <ialex@users.mediawiki.org>
Thu, 3 Nov 2011 19:14:46 +0000 (19:14 +0000)
committerAlexandre Emsenhuber <ialex@users.mediawiki.org>
Thu, 3 Nov 2011 19:14:46 +0000 (19:14 +0000)
includes/WebRequest.php
includes/api/ApiEditPage.php
includes/api/ApiLogin.php

index 362051d..3651f92 100644 (file)
@@ -1306,3 +1306,43 @@ class FauxRequest extends WebRequest {
                return '127.0.0.1';
        }
 }
+
+/**
+ * Similar to FauxRequest, but only fakes URL parameters and method
+ * (POST or GET) and use the base request for the remaining stuff
+ * (cookies, session and headers).
+ *
+ * @ingroup HTTP
+ */
+class DerivativeRequest extends FauxRequest {
+       private $base;
+
+       public function __construct( WebRequest $base, $data, $wasPosted = false ) {
+               $this->base = $base;
+               parent::__construct( $data, $wasPosted );
+       }
+
+       public function getCookie( $key, $prefix = null, $default = null ) {
+               return $this->base->getCookie( $key, $prefix, $default );
+       }
+
+       public function checkSessionCookie() {
+               return $this->base->checkSessionCookie();
+       }
+
+       public function getHeader( $name ) {
+               return $this->base->getHeader( $name );
+       }
+
+       public function getAllHeaders() {
+               return $this->base->getAllHeaders();
+       }
+
+       public function getSessionData( $key ) {
+               return $this->base->getSessionData( $key );
+       }
+
+       public function setSessionData( $key, $data ) {
+               return $this->base->setSessionData( $key, $data );
+       }
+}
index 61dea37..e310646 100644 (file)
@@ -239,12 +239,12 @@ class ApiEditPage extends ApiBase {
                        $reqArr['wpWatchthis'] = '';
                }
 
-               $req = new FauxRequest( $reqArr, true );
+               global $wgRequest;
+               $req = new DerivativeRequest( $wgRequest, $reqArr, true );
                $ep->importFormData( $req );
 
                // Run hooks
                // Handle CAPTCHA parameters
-               global $wgRequest;
                if ( !is_null( $params['captchaid'] ) ) {
                        $wgRequest->setVal( 'wpCaptchaId', $params['captchaid'] );
                }
index a45d51f..ae660fd 100644 (file)
@@ -55,23 +55,22 @@ class ApiLogin extends ApiBase {
 
                $result = array();
 
-               $req = new FauxRequest( array(
-                       'wpName' => $params['name'],
-                       'wpPassword' => $params['password'],
-                       'wpDomain' => $params['domain'],
-                       'wpLoginToken' => $params['token'],
-                       'wpRemember' => ''
-               ) );
-
                // Init session if necessary
                if ( session_id() == '' ) {
                        wfSetupSession();
                }
 
                $context = new DerivativeContext( $this->getContext() );
-               $context->setRequest( $req );
-               /*$context = $this->createContext();
-               $context->setRequest( $req );*/
+               $context->setRequest( new DerivativeRequest(
+                       $this->getContext()->getRequest(),
+                       array(
+                               'wpName' => $params['name'],
+                               'wpPassword' => $params['password'],
+                               'wpDomain' => $params['domain'],
+                               'wpLoginToken' => $params['token'],
+                               'wpRemember' => ''
+                       )
+               ) );
                $loginForm = new LoginForm();
                $loginForm->setContext( $context );