GWicke has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/85414


Change subject: WIP Bug 44483: Forward Cookie header to API
......................................................................

WIP Bug 44483: Forward Cookie header to API

By forwarding the Cookie header from requests to the API we get to load
content from private wikis.

TODO:
* Figure out a solution that works for job updates (no cookie there) so that
  private wikis can also be pre-cached.
* Ensure that cached content from private wikis is only accessible through an
  access right checking public API. If that is not possible, private wikis
  can't be cached.

Change-Id: Ia7f4bd9e8b39f12fd1e31cdf7b44643aa33739ab
---
M js/api/ParserService.js
M js/lib/mediawiki.ApiRequest.js
M js/lib/mediawiki.parser.environment.js
3 files changed, 25 insertions(+), 13 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Parsoid 
refs/changes/14/85414/1

diff --git a/js/api/ParserService.js b/js/api/ParserService.js
index d3d3ea8..367f9f0 100644
--- a/js/api/ParserService.js
+++ b/js/api/ParserService.js
@@ -365,8 +365,10 @@
 });
 
 
-var getParserServiceEnv = function ( res, iwp, pageName, cb ) {
-       MWParserEnvironment.getParserEnv( parsoidConfig, null, iwp || '', 
pageName, function ( err, env ) {
+var getParserServiceEnv = function ( res, iwp, pageName, cb, req ) {
+       MWParserEnvironment.getParserEnv( parsoidConfig, null, iwp || '', 
pageName,
+                       req.headers.cookie, function ( err, env ) {
+               env.cookie = req.headers.cookie;
                env.errCB = function ( e ) {
                        var errmsg = e.stack || e.toString();
                        var code = e.code || 500;
@@ -431,7 +433,7 @@
                res.end('');
        };
 
-       getParserServiceEnv( res, parsoidConfig.defaultWiki, req.params[0], cb 
);
+       getParserServiceEnv( res, parsoidConfig.defaultWiki, req.params[0], cb, 
req );
 } );
 
 app.post(/\/_html\/(.*)/, function ( req, res ) {
@@ -454,7 +456,7 @@
                        );
        };
 
-       getParserServiceEnv( res, parsoidConfig.defaultWiki, req.params[0], cb 
);
+       getParserServiceEnv( res, parsoidConfig.defaultWiki, req.params[0], cb, 
req );
 } );
 
 // Form-based wikitext -> HTML DOM interface for manual testing
@@ -466,7 +468,7 @@
                res.end('');
        };
 
-       getParserServiceEnv( res, parsoidConfig.defaultWiki, req.params[0], cb 
);
+       getParserServiceEnv( res, parsoidConfig.defaultWiki, req.params[0], cb, 
req );
 } );
 
 app.post(/\/_wikitext\/(.*)/, function ( req, res ) {
@@ -506,7 +508,7 @@
                }
        };
 
-       getParserServiceEnv( res, parsoidConfig.defaultWiki, req.params[0], cb 
);
+       getParserServiceEnv( res, parsoidConfig.defaultWiki, req.params[0], cb, 
req );
 } );
 
 // Round-trip article testing
@@ -530,7 +532,7 @@
                tpr.once('src', parse.bind( tpr, env, req, res, roundTripDiff 
));
        };
 
-       getParserServiceEnv( res, req.params[0], req.params[1], cb );
+       getParserServiceEnv( res, req.params[0], req.params[1], cb, req );
 } );
 
 // Round-trip article testing with newline stripping for editor-created HTML
@@ -560,7 +562,7 @@
                tpr.once('src', parse.bind( tpr, env, req, res, cb ));
        };
 
-       getParserServiceEnv( res, req.params[0], req.params[1], cb );
+       getParserServiceEnv( res, req.params[0], req.params[1], cb, req );
 });
 
 // Form-based round-tripping for manual testing
@@ -572,7 +574,7 @@
                res.end('');
        };
 
-       getParserServiceEnv( res, parsoidConfig.defaultWiki, req.params[0], cb 
);
+       getParserServiceEnv( res, parsoidConfig.defaultWiki, req.params[0], cb, 
req );
 });
 
 app.post(/\/_rtform\/(.*)/, function ( req, res ) {
@@ -584,7 +586,7 @@
                });
        };
 
-       getParserServiceEnv( res, parsoidConfig.defaultWiki, req.params[0], cb 
);
+       getParserServiceEnv( res, parsoidConfig.defaultWiki, req.params[0], cb, 
req );
 } );
 
 // Regular article parsing
@@ -601,6 +603,9 @@
                        res.send( 'no favicon yet..', 404 );
                        return;
                }
+
+               console.log(req.headers);
+
                var target = env.resolveTitle( env.normalizeTitle( 
env.page.name ), '' );
 
                // Set the timeout to 900 seconds..
@@ -630,7 +635,7 @@
        };
 
        var prefix = req.params[0];
-       getParserServiceEnv( res, prefix, req.params[1], cb );
+       getParserServiceEnv( res, prefix, req.params[1], cb, req );
 } );
 
 // Regular article serialization using POST
@@ -664,7 +669,7 @@
                }
        };
 
-       getParserServiceEnv( res, req.params[0], req.params[1], cb );
+       getParserServiceEnv( res, req.params[0], req.params[1], cb, req );
 } );
 
 /**
diff --git a/js/lib/mediawiki.ApiRequest.js b/js/lib/mediawiki.ApiRequest.js
index 1517f9f..0999515 100644
--- a/js/lib/mediawiki.ApiRequest.js
+++ b/js/lib/mediawiki.ApiRequest.js
@@ -236,6 +236,7 @@
                timeout: 40 * 1000, // 40 seconds
                headers: {
                        'User-Agent': userAgent,
+                       'Cookie': env.cookie,
                        'Connection': 'close'
 
                }
@@ -367,6 +368,7 @@
                timeout: 16 * 1000, // 16 seconds
                headers: {
                        'User-Agent': userAgent,
+                       'Cookie': env.cookie,
                        'Connection': 'close'
                }
        };
@@ -467,6 +469,7 @@
                timeout: 16 * 1000, // 16 seconds
                headers: {
                        'User-Agent': userAgent,
+                       'Cookie': env.cookie,
                        'Connection': 'close'
                }
        };
@@ -551,6 +554,7 @@
                timeout: 16 * 1000, // 16 seconds
                headers: {
                        'User-Agent': userAgent,
+                       'Cookie': env.cookie,
                        'Connection': 'close'
                }
        };
@@ -629,6 +633,7 @@
                timeout: 40 * 1000,
                headers: {
                        'User-Agent': userAgent,
+                       'Cookie': env.cookie,
                        'Connection': 'close'
                }
        };
@@ -718,6 +723,7 @@
                timeout: 40 * 1000,
                headers: {
                        'User-Agent': userAgent,
+                       'Cookie': env.cookie,
                        'Connection': 'close'
                }
        };
diff --git a/js/lib/mediawiki.parser.environment.js 
b/js/lib/mediawiki.parser.environment.js
index 719a499..9f8df2f 100644
--- a/js/lib/mediawiki.parser.environment.js
+++ b/js/lib/mediawiki.parser.environment.js
@@ -258,7 +258,7 @@
  * @param {Error} cb.err
  * @param {MWParserEnvironment} cb.env The finished environment object
  */
-MWParserEnvironment.getParserEnv = function ( parsoidConfig, wikiConfig, 
prefix, pageName, cb ) {
+MWParserEnvironment.getParserEnv = function ( parsoidConfig, wikiConfig, 
prefix, pageName, cookie, cb ) {
        if ( !parsoidConfig ) {
                parsoidConfig = new ParsoidConfig();
                parsoidConfig.setInterwiki( 'mw', 
'http://www.mediawiki.org/w/api.php' );
@@ -269,6 +269,7 @@
        }
 
        var env = new MWParserEnvironment( parsoidConfig, wikiConfig );
+       env.cookie = cookie
 
        if ( pageName ) {
                env.reset( pageName );

-- 
To view, visit https://gerrit.wikimedia.org/r/85414
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia7f4bd9e8b39f12fd1e31cdf7b44643aa33739ab
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Parsoid
Gerrit-Branch: master
Gerrit-Owner: GWicke <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to