Mvolz has uploaded a new change for review. https://gerrit.wikimedia.org/r/192084
Change subject: [WIP] Create CitoidRequest object ...................................................................... [WIP] Create CitoidRequest object Move logic of citoid requests into lib/CitoidRequest.js In server.js, create new CitoidRequest object and pass it the CitoidConfig objects and the logger. Bug: Change-Id: I59f15059a83f8df2ed08ef3aab29ff5c65609b68 --- A lib/CitoidRequest.js M server.js 2 files changed, 48 insertions(+), 45 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/citoid refs/changes/84/192084/1 diff --git a/lib/CitoidRequest.js b/lib/CitoidRequest.js new file mode 100644 index 0000000..0ea0b41 --- /dev/null +++ b/lib/CitoidRequest.js @@ -0,0 +1,37 @@ +/** + * Handles requests to the citoid service + */ + +/* Import Local Modules */ +var crypto = require('crypto'), + distinguish = require('./distinguish.js').distinguish, + util = require('util'); + +function CitoidRequest(CitoidConfig, logger){ + this.CitoidConfig = CitoidConfig; + this.log = logger; + this.zoteroURL = util.format('http://%s:%s/%s', + CitoidConfig.zoteroInterface, CitoidConfig.zoteroPort.toString()); +} + +CitoidRequest.prototype.request = function(searchTerm, format, callback){ + var opts, + sessionID = crypto.randomBytes(20).toString('hex'); //required zotero- not terribly important for this to be secure + + opts = { + zoteroURL:this.zoteroURL, + sessionID:sessionID, + format:format + }; + + distinguish(searchTerm, function(extractedID, runnerFunction){ + runnerFunction(extractedID, opts, function(error, responseCode, body){ + callback(error, responseCode, body); + }); + }); + +}; + +module.exports = { + CitoidRequest: CitoidRequest +}; \ No newline at end of file diff --git a/server.js b/server.js index ca92b9e..39ceab7 100644 --- a/server.js +++ b/server.js @@ -6,11 +6,8 @@ /* Import External Modules */ var bodyParser = require('body-parser'), bunyan = require('bunyan'), - crypto = require('crypto'), express = require('express'), path = require('path'), - urlParse = require('url'), - util = require('util'), opts = require('yargs') .usage('Usage: $0 [-c configfile|--config=configfile]') .default({ @@ -20,24 +17,21 @@ argv = opts.argv; /* Import Local Modules */ -var distinguish = require('./lib/distinguish.js').distinguish, - requestFromURL = require('./lib/requests.js').requestFromURL; +var CitoidRequest = require('./lib/CitoidRequest.js').CitoidRequest; /* Import Local Settings */ var settingsFile = path.resolve(process.cwd(), argv.c), CitoidConfig = require(settingsFile).CitoidConfig, citoidPort = CitoidConfig.citoidPort, citoidInterface = CitoidConfig.citoidInterface, - zoteroPort = CitoidConfig.zoteroPort, - zoteroInterface = CitoidConfig.zoteroInterface, allowCORS = CitoidConfig.allowCORS; - -// URL base which allows further formatting by adding a single endpoint, i.e. 'web' -var zoteroURL = util.format('http://%s:%s/%s', zoteroInterface, zoteroPort.toString()); // Init citoid webserver var citoid = express(); var log = bunyan.createLogger({name: "citoid"}); + +// Init citoid service function +var citoidRequest = new CitoidRequest(CitoidConfig, log); // SECURITY WARNING: ALLOWS ALL REQUEST ORIGINS // change allowCORS in localsettings.js @@ -77,10 +71,8 @@ res.type('application/json'); - var opts, parsedURL, - format = req.body.format, - requestedURL = req.body.url, - sessionID = crypto.randomBytes(20).toString('hex'); + var format = req.body.format, + requestedURL = req.body.url; log.info(req); @@ -89,26 +81,12 @@ format = 'mwDeprecated'; } - opts = { - zoteroURL:zoteroURL, - sessionID: sessionID, - format: format - }; - if (!requestedURL){ res.statusCode = 400; res.setHeader("Content-Type", "text/plain"); res.send('"url" is a required parameter'); } else { - - parsedURL = urlParse.parse(requestedURL); - //defaults to http if no protocol specified. - if (!parsedURL.protocol){ - requestedURL = 'http://'+ urlParse.format(parsedURL); - } - else {requestedURL = urlParse.format(parsedURL);} - - requestFromURL(requestedURL, opts, function(error, responseCode, body){ + citoidRequest.request(requestedURL, format, function(error, responseCode, body){ res.statusCode = responseCode; res.send(body); }); @@ -120,7 +98,7 @@ res.type('application/json'); - var opts, dSearch, sessionID, + var dSearch, format = req.query.format, search = req.query.search; @@ -135,23 +113,11 @@ res.setHeader("Content-Type", "text/plain"); res.send("No 'format' value specified\nOptions are 'mediawiki','zotero'"); } else { - dSearch = decodeURIComponent(search); //decode urlencoded search string - sessionID = crypto.randomBytes(20).toString('hex'); //required zotero- not terribly important for this to be secure - - opts = { - zoteroURL:zoteroURL, - sessionID:sessionID, - format:format - }; - - distinguish(dSearch, function(extractedID, runnerFunction){ - - runnerFunction(extractedID, opts, function(error, responseCode, body){ - res.statusCode = responseCode; - res.send(body); - }); + citoidRequest.request(dSearch, format, function(error, responseCode, body){ + res.statusCode = responseCode; + res.send(body); }); } }); -- To view, visit https://gerrit.wikimedia.org/r/192084 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I59f15059a83f8df2ed08ef3aab29ff5c65609b68 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/services/citoid Gerrit-Branch: master Gerrit-Owner: Mvolz <mv...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits