diff --git a/config/default.js b/config/default.js index 4ce19e8be..a1d2ee323 100644 --- a/config/default.js +++ b/config/default.js @@ -124,5 +124,7 @@ exports.api_tokens = { exports.profiles_api = { url: process.env.DRUPAL_PROFILE_API_URL || 'http://dummy.url', username: process.env.DRUPAL_PROFILE_API_USER || 'dummy', - password: process.env.DRUPAL_PROFILE_API_PASSWORD || 'dummy' + password: process.env.DRUPAL_PROFILE_API_PASSWORD || 'dummy', + useCache: process.env.USE_DRUPAL_CACHE || false, + cacheTTL: process.env.USE_DRUPAL_CACHE_TTL || 3600*24, }; diff --git a/libs/drupal_access.js b/libs/drupal_access.js index 252fb9861..adfb51b5b 100644 --- a/libs/drupal_access.js +++ b/libs/drupal_access.js @@ -1,7 +1,10 @@ require('dotenv').config() -var request = require('superagent'); -var logger = require('../libs/logger')(module); -var drupalConfig = require('config').get('profiles_api'); +const request = require('superagent'); +const logger = require('../libs/logger')(module); +const drupalConfig = require('config').get('profiles_api'); +const NodeCache = require("node-cache"); + +const drupalCache = new NodeCache({ stdTTL: drupalConfig.cacheTTL, checkperiod: 600 }); function parseFromAnchorTag(uid_string) { var re = /(.+)<\/a>/g; @@ -74,17 +77,25 @@ var search_multiple_emails = function(login_data, email_arr) { var search = function(login_data, email, uid, is_retry) { return new Promise((resolve, reject) => { var qs = {}; + var key; if (email) { - qs.mail = email + qs.mail = email; + key = email; } if (uid) { - qs.uid = uid + qs.uid = uid; + key = uid; + } + var user_data_ = drupalCache.get(key) + if (user_data_ && drupalConfig.useCache) { + return resolve({ email: qs.mail, uid: qs.uid, user_data: user_data_ }); } login_data.request_agent .get(drupalConfig.url + '/en/api/usersearch') .query(qs) .then((res) => { - var user_data_ = parseUser(res.body) + user_data_ = parseUser(res.body) + drupalCache.set(key, user_data_); resolve({ email: qs.mail, uid: qs.uid, user_data: user_data_ }); }).catch((err) => { if (err.status === 403 && !is_retry) { diff --git a/package.json b/package.json index 180db3667..e82647d1a 100644 --- a/package.json +++ b/package.json @@ -76,6 +76,7 @@ "module-id": "2.0.4", "morgan": "~1.7.0", "mysql": "^2.11.1", + "node-cache": "^4.1.1", "node-sass": "^3.13.0", "passport": "^0.3.2", "passport-facebook": "2.1.1",