Skip to content

Commit 305dcc4

Browse files
Merge pull request #294 from topcoder-platform/issue-800
Prevent assigning a task member without the appropriate resource
2 parents dd0743d + 08c0734 commit 305dcc4

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

src/services/ChallengeService.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -743,6 +743,8 @@ async function createChallenge (currentUser, challenge, userToken) {
743743
}
744744
if (_.isUndefined(_.get(challenge, 'task.memberId'))) {
745745
_.set(challenge, 'task.memberId', null)
746+
} else {
747+
throw new errors.BadRequestError(`Cannot assign a member before the challenge gets created.`)
746748
}
747749
}
748750
if (challenge.phases && challenge.phases.length > 0) {
@@ -1420,6 +1422,18 @@ async function update (currentUser, challengeId, data, userToken, isFull) {
14201422
data.winners = null
14211423
}
14221424

1425+
const { track, type } = await validateChallengeData(_.pick(challenge, ['trackId', 'typeId']))
1426+
1427+
if (_.get(type, 'isTask')) {
1428+
if (!_.isUndefined(_.get(challenge, 'task.memberId'))) {
1429+
const challengeResources = await helper.getChallengeResources(challengeId)
1430+
const registrants = _.filter(challengeResources, r => r.roleId === config.SUBMITTER_ROLE_ID)
1431+
if (!_.find(registrants, r => _.toString(r.memberId) === _.toString(_.get(challenge, 'task.memberId')))) {
1432+
throw new errors.BadRequestError(`Member ${_.get(challenge, 'task.memberId')} is not a submitter resource of challenge ${challengeId}`)
1433+
}
1434+
}
1435+
}
1436+
14231437
logger.debug(`Challenge.update id: ${challengeId} Details: ${JSON.stringify(updateDetails)}`)
14241438
await models.Challenge.update({ id: challengeId }, updateDetails)
14251439

@@ -1460,7 +1474,6 @@ async function update (currentUser, challengeId, data, userToken, isFull) {
14601474
}
14611475

14621476
// Populate challenge.track and challenge.type based on the track/type IDs
1463-
const { track, type } = await validateChallengeData(_.pick(challenge, ['trackId', 'typeId']))
14641477

14651478
if (track) {
14661479
challenge.track = track.name

0 commit comments

Comments
 (0)