From 888e8c829fbb1ab1399d6b960b2221971c17fd23 Mon Sep 17 00:00:00 2001 From: Eugene Mirotin Date: Sat, 9 Jun 2018 18:15:45 +0500 Subject: [PATCH] fix(cloud-roles): improve roles fetch throttling and expose the roles with rules as part of the profile --- packages/core/botpress/src/cloud/index.js | 18 +++++++++++------- .../core/botpress/src/server/non-secured.js | 3 ++- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/packages/core/botpress/src/cloud/index.js b/packages/core/botpress/src/cloud/index.js index cb95e39a8ee..b0f0129edeb 100644 --- a/packages/core/botpress/src/cloud/index.js +++ b/packages/core/botpress/src/cloud/index.js @@ -6,10 +6,10 @@ import _ from 'lodash' module.exports = ({ projectLocation, botfile, logger }) => { let certificate = null - let roles = null + let rolesPromise = null setInterval(() => (certificate = null), ms('5 minutes')) - setInterval(() => (roles = null), ms('5 minutes')) + setInterval(() => (rolesPromise = null), ms('5 minutes')) function _readCloudfile() { const filePath = path.resolve(projectLocation, 'bp-cloud.json') @@ -84,13 +84,13 @@ module.exports = ({ projectLocation, botfile, logger }) => { return } - if (roles) { - return roles + if (rolesPromise) { + return rolesPromise } const { endpoint, token, botId } = getPairingInfo() - roles = await axios + rolesPromise = axios .get(`${endpoint}/api/bots/${botId}/roles`, { headers: { Authorization: `Bearer bot__${token}` @@ -106,11 +106,15 @@ module.exports = ({ projectLocation, botfile, logger }) => { return null }) - return roles + return rolesPromise } async function getUserRoles(roleNames) { - await _getRemoteRoles() + if (!isPaired()) { + return null + } + + const roles = await _getRemoteRoles() return roleNames.reduce((acc, roleName) => { const role = _.find(roles, { name: roleName }) acc[roleName] = role && role.rules diff --git a/packages/core/botpress/src/server/non-secured.js b/packages/core/botpress/src/server/non-secured.js index 022429bccac..db692b1ef11 100644 --- a/packages/core/botpress/src/server/non-secured.js +++ b/packages/core/botpress/src/server/non-secured.js @@ -24,6 +24,7 @@ module.exports = (bp, app) => { }) app.get('/api/my-account', async (req, res) => { - res.send(req.user) + const roles = await bp.cloud.getUserRoles(req.user.roles) + res.send({ ...req.user, roles }) }) }