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