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

Reply via email to