Skip to content

Commit 528baf7

Browse files
authored
Merge pull request #674 from topcoder-platform/dev
Merging Dev to Master
2 parents 665e532 + e9dade8 commit 528baf7

File tree

2 files changed

+33
-5
lines changed

2 files changed

+33
-5
lines changed

src/common/challenge-helper.js

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,25 @@ class ChallengeHelper {
8080
}
8181
}
8282

83+
/**
84+
* Validate Challenge groups.
85+
* @param {Object} groups the group of a challenge
86+
*/
87+
async validateGroups(groups) {
88+
const promises = [];
89+
_.each(groups, (g) => {
90+
promises.push(
91+
(async () => {
92+
const group = await helper.getGroupById(g);
93+
if (!group || group.status !== "active") {
94+
throw new errors.BadRequestError("The groups provided are invalid " + g);
95+
}
96+
})()
97+
);
98+
});
99+
await Promise.all(promises);
100+
}
101+
83102
async validateCreateChallengeRequest(currentUser, challenge) {
84103
// projectId is required for non self-service challenges
85104
if (challenge.legacy.selfService == null && challenge.projectId == null) {
@@ -98,7 +117,13 @@ class ChallengeHelper {
98117
// helper.ensureNoDuplicateOrNullElements(challenge.events, 'events')
99118

100119
// check groups authorization
101-
await helper.ensureAccessibleByGroupsAccess(currentUser, challenge);
120+
if (challenge.groups && challenge.groups.length > 0) {
121+
if (currentUser.isMachine || hasAdminRole(currentUser)) {
122+
await this.validateGroups(challenge.groups);
123+
} else {
124+
await helper.ensureAccessibleByGroupsAccess(currentUser, challenge);
125+
}
126+
}
102127

103128
if (challenge.constraints) {
104129
await ChallengeHelper.validateChallengeConstraints(challenge.constraints);
@@ -118,8 +143,12 @@ class ChallengeHelper {
118143
}
119144

120145
// check groups access to be updated group values
121-
if (data.groups) {
122-
await ensureAcessibilityToModifiedGroups(currentUser, data, challenge);
146+
if (data.groups && data.groups.length > 0) {
147+
if (currentUser.isMachine || hasAdminRole(currentUser)) {
148+
await this.validateGroups(data.groups);
149+
} else {
150+
await ensureAcessibilityToModifiedGroups(currentUser, data, challenge);
151+
}
123152
}
124153

125154
// Ensure descriptionFormat is either 'markdown' or 'html'

src/services/ChallengeService.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ const { ChallengeDomain } = require("@topcoder-framework/domain-challenge");
3636

3737
const { hasAdminRole } = require("../common/role-helper");
3838
const {
39-
validateChallengeUpdateRequest,
4039
enrichChallengeForResponse,
4140
sanitizeRepeatedFieldsInUpdateRequest,
4241
convertPrizeSetValuesToCents,
@@ -1491,7 +1490,7 @@ async function updateChallenge(currentUser, challengeId, data) {
14911490

14921491
const challengeResources = await helper.getChallengeResources(challengeId);
14931492

1494-
await validateChallengeUpdateRequest(currentUser, challenge, data, challengeResources);
1493+
await challengeHelper.validateChallengeUpdateRequest(currentUser, challenge, data, challengeResources);
14951494
validateTask(currentUser, challenge, data, challengeResources);
14961495

14971496
let sendActivationEmail = false;

0 commit comments

Comments
 (0)