Skip to content

Commit bf5ccc7

Browse files
Sanitize challenge object on PUT/PATCH
1 parent 4e34619 commit bf5ccc7

File tree

1 file changed

+59
-2
lines changed

1 file changed

+59
-2
lines changed

src/services/ChallengeService.js

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1110,6 +1110,63 @@ async function update (currentUser, challengeId, data, userToken, isFull) {
11101110
return challenge
11111111
}
11121112

1113+
/**
1114+
* Remove unwanted properties from the challenge object
1115+
* @param {Object} challenge the challenge object
1116+
*/
1117+
function sanitizeChallenge (challenge) {
1118+
const sanitized = _.pick(challenge, [
1119+
'typeId',
1120+
'name',
1121+
'description',
1122+
'privateDescription',
1123+
'descriptionFormat',
1124+
'timelineTemplateId',
1125+
'tags',
1126+
'projectId',
1127+
'legacyId',
1128+
'startDate',
1129+
'status',
1130+
'attachmentIds',
1131+
'groups'
1132+
])
1133+
if (challenge.legacy) {
1134+
sanitized.legacy = _.pick(challenge.legacy, [
1135+
'track',
1136+
'reviewType',
1137+
'confidentialityType',
1138+
'forumId',
1139+
'directProjectId',
1140+
'screeningScorecardId',
1141+
'reviewScorecardId',
1142+
'informixModified'
1143+
])
1144+
}
1145+
// metadata
1146+
if (challenge.metadata) {
1147+
sanitized.metadata = _.map(challenge.metadata, meta => _.pick(meta, ['name', 'value']))
1148+
}
1149+
if (challenge.phases) {
1150+
sanitized.phases = _.map(challenge.phases, phase => _.pick(phase, ['phaseId', 'duration']))
1151+
}
1152+
if (challenge.prizeSets) {
1153+
sanitized.prizeSets = _.map(challenge.prizeSets, prizeSet => ({
1154+
..._.pick(prizeSet, ['type', 'description']),
1155+
prizes: _.map(prizeSet.prizes, prize => _.pick(prize, ['description', 'type', 'value']))
1156+
}))
1157+
}
1158+
if (challenge.events) {
1159+
sanitized.events = _.map(challenge.events, event => _.pick(event, ['id', 'name', 'key']))
1160+
}
1161+
if (challenge.winners) {
1162+
sanitized.winners = _.map(challenge.winners, winner => _.pick(winner, ['userId', 'handle', 'placement']))
1163+
}
1164+
if (challenge.terms) {
1165+
sanitized.terms = _.map(challenge.terms, term => _.pick(term, ['id', 'roleId']))
1166+
}
1167+
return sanitized
1168+
}
1169+
11131170
/**
11141171
* Fully update challenge.
11151172
* @param {Object} currentUser the user who perform operation
@@ -1119,7 +1176,7 @@ async function update (currentUser, challengeId, data, userToken, isFull) {
11191176
* @returns {Object} the updated challenge
11201177
*/
11211178
async function fullyUpdateChallenge (currentUser, challengeId, data, userToken) {
1122-
return update(currentUser, challengeId, data, userToken, true)
1179+
return update(currentUser, challengeId, sanitizeChallenge(data), userToken, true)
11231180
}
11241181

11251182
fullyUpdateChallenge.schema = {
@@ -1194,7 +1251,7 @@ fullyUpdateChallenge.schema = {
11941251
* @returns {Object} the updated challenge
11951252
*/
11961253
async function partiallyUpdateChallenge (currentUser, challengeId, data, userToken) {
1197-
return update(currentUser, challengeId, data, userToken)
1254+
return update(currentUser, challengeId, sanitizeChallenge(data), userToken)
11981255
}
11991256

12001257
partiallyUpdateChallenge.schema = {

0 commit comments

Comments
 (0)