|
5 | 5 | const AWS = require('aws-sdk') |
6 | 6 | const config = require('config') |
7 | 7 | const elasticsearch = require('elasticsearch') |
| 8 | +const _ = require('lodash') |
| 9 | +const tcCoreLibAuth = require('tc-core-library-js') |
| 10 | +const urlencode = require('urlencode') |
8 | 11 |
|
9 | 12 | const logger = require('./logger') |
10 | 13 |
|
11 | 14 | AWS.config.region = config.get('esConfig.AWS_REGION') |
12 | 15 | // ES Client mapping |
13 | 16 | const esClients = {} |
14 | 17 |
|
| 18 | +const m2mAuth = tcCoreLibAuth.auth.m2m |
| 19 | +const util = tcCoreLibAuth.util(config) |
| 20 | +let m2m = null |
| 21 | + |
| 22 | +/** |
| 23 | + * Get machine to machine token. |
| 24 | + * @returns {Promise} promise which resolves to the m2m token |
| 25 | + */ |
| 26 | +async function getM2MToken () { |
| 27 | + if (_.isNull(m2m)) { |
| 28 | + m2m = m2mAuth(_.pick(config, ['AUTH0_URL', 'AUTH0_AUDIENCE', 'TOKEN_CACHE_TIME', 'AUTH0_PROXY_SERVER_URL'])) |
| 29 | + } |
| 30 | + return m2m.getMachineToken(config.AUTH0_CLIENT_ID, config.AUTH0_CLIENT_SECRET) |
| 31 | +} |
| 32 | + |
15 | 33 | /** |
16 | 34 | * Get ES Client |
17 | 35 | * @return {Object} Elastic Host Client Instance |
@@ -126,9 +144,35 @@ async function updateMetadadaESPromise (updateDocHandler) { |
126 | 144 | }) |
127 | 145 | } |
128 | 146 |
|
| 147 | +/** |
| 148 | + * Retrieve member details from userIds |
| 149 | + * |
| 150 | + * @param {Array} userIds the list of userIds |
| 151 | + * @returns {Promise} the member details |
| 152 | + */ |
| 153 | +async function getMemberDetailsByUserIds (userIds) { |
| 154 | + try { |
| 155 | + const token = await getM2MToken() |
| 156 | + const httpClient = util.getHttpClient({ id: `projectMemberService_${userIds.join('_')}`, log: logger }) |
| 157 | + return httpClient.get(`${config.MEMBER_SERVICE_ENDPOINT}/_search`, { |
| 158 | + params: { |
| 159 | + query: `${_.map(userIds, id => `userId:${id}`).join(urlencode(' OR ', 'utf8'))}`, |
| 160 | + fields: 'userId,handle,firstName,lastName,email' |
| 161 | + }, |
| 162 | + headers: { |
| 163 | + 'Content-Type': 'application/json', |
| 164 | + Authorization: `Bearer ${token}` |
| 165 | + } |
| 166 | + }).then(res => _.get(res, 'data.result.content', null)) |
| 167 | + } catch (err) { |
| 168 | + return Promise.reject(err) |
| 169 | + } |
| 170 | +} |
| 171 | + |
129 | 172 | module.exports = { |
130 | 173 | getESClient, |
131 | 174 | updateProjectESPromise, |
132 | 175 | updateTimelineESPromise, |
133 | | - updateMetadadaESPromise |
| 176 | + updateMetadadaESPromise, |
| 177 | + getMemberDetailsByUserIds |
134 | 178 | } |
0 commit comments