diff --git a/.circleci/config.yml b/.circleci/config.yml index bc40edcd..8c07e37e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -149,7 +149,7 @@ workflows: context : org-global filters: branches: - only: ['develop', 'migration-setup', 'pm-1356'] + only: ['develop', 'migration-setup', 'pm-1273'] - deployProd: context : org-global filters: diff --git a/src/models/projectMember.js b/src/models/projectMember.js index bf213a3d..627f9531 100644 --- a/src/models/projectMember.js +++ b/src/models/projectMember.js @@ -34,6 +34,10 @@ module.exports = function defineProjectMember(sequelize, DataTypes) { ], }); + ProjectMember.associate = (models) => { + ProjectMember.belongsTo(models.Project, { foreignKey: 'projectId' }); + }; + ProjectMember.getProjectIdsForUser = userId => ProjectMember.findAll({ where: { deletedAt: { $eq: null }, diff --git a/src/routes/copilotOpportunity/get.js b/src/routes/copilotOpportunity/get.js index a968af13..2fd1856c 100644 --- a/src/routes/copilotOpportunity/get.js +++ b/src/routes/copilotOpportunity/get.js @@ -20,12 +20,30 @@ module.exports = [ model: models.Project, as: 'project', attributes: ['name'], + include: [ + { + model: models.ProjectMember, + as: 'members', + attributes: ['id', 'userId', 'role'], + }, + ] }, ], }) .then((copilotOpportunity) => { const plainOpportunity = copilotOpportunity.get({ plain: true }); - const formattedOpportunity = Object.assign({}, plainOpportunity, + req.log.info("authUser", req.authUser); + const memberIds = plainOpportunity.project.members && plainOpportunity.project.members.map((member) => member.userId); + let canApplyAsCopilot = false; + if (req.authUser) { + canApplyAsCopilot = !memberIds.includes(req.authUser.userId) + } + // This shouldn't be exposed to the clientside + delete plainOpportunity.project.members; + const formattedOpportunity = Object.assign({ + members: memberIds, + canApplyAsCopilot, + }, plainOpportunity, plainOpportunity.copilotRequest ? plainOpportunity.copilotRequest.data : {}, { copilotRequest: undefined }, ); diff --git a/src/routes/index.js b/src/routes/index.js index 54df9280..ab3b6308 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -35,9 +35,14 @@ const jwtAuth = require('tc-core-library-js').middleware.jwtAuthenticator; router.all( RegExp(`\\/${apiVersion}\\/(copilots|projects|timelines|orgConfig|customer-payments)(?!\\/health).*`), (req, res, next) => { - if (publicRoutes.some(routeRegex => routeRegex.test(req.path))) { + let token + if (req.headers.authorization && req.headers.authorization.split(' ')[0] === 'Bearer') { + token = req.headers.authorization.split(' ')[1] + } + if (publicRoutes.some(routeRegex => routeRegex.test(req.path)) && !token) { return next(); } + req.log.info("token available", token); // JWT authentication return jwtAuth(config)(req, res, next); },