@@ -910,6 +910,24 @@ searchChallenges.schema = {
910
910
} )
911
911
. unknown ( true ) ,
912
912
} ;
913
+ /**
914
+ * Validate Challenge groups.
915
+ * @param {Object } groups the group of a challenge
916
+ */
917
+ async function validateGroups ( groups ) {
918
+ const promises = [ ] ;
919
+ _ . each ( groups , ( g ) => {
920
+ promises . push (
921
+ ( async ( ) => {
922
+ const group = await helper . getGroupById ( g ) ;
923
+ if ( ! group || group . status !== 'active' ) {
924
+ throw new errors . BadRequestError ( "The groups provided are invalid " + g ) ;
925
+ }
926
+ } ) ( )
927
+ ) ;
928
+ } ) ;
929
+ await Promise . all ( promises ) ;
930
+ }
913
931
914
932
/**
915
933
* Create challenge.
@@ -921,6 +939,13 @@ searchChallenges.schema = {
921
939
async function createChallenge ( currentUser , challenge , userToken ) {
922
940
await challengeHelper . validateCreateChallengeRequest ( currentUser , challenge ) ;
923
941
942
+ //Validate the groups if Valid or Not
943
+ if ( challenge . groups && challenge . groups . length > 0 &&
944
+ ( currentUser . isMachine || hasAdminRole ( currentUser ) ) )
945
+ {
946
+ await validateGroups ( challenge . groups ) ;
947
+ }
948
+
924
949
if ( challenge . legacy . selfService ) {
925
950
// if self-service, create a new project (what about if projectId is provided in the payload? confirm with business!)
926
951
if ( ! challenge . projectId ) {
@@ -1443,6 +1468,13 @@ async function updateChallenge(currentUser, challengeId, data) {
1443
1468
1444
1469
await validateChallengeUpdateRequest ( currentUser , challenge , data ) ;
1445
1470
1471
+ //Validate the groups if Valid or Not
1472
+ if ( data . groups && data . groups . length > 0 &&
1473
+ ( currentUser . isMachine || hasAdminRole ( currentUser ) ) )
1474
+ {
1475
+ await validateGroups ( data . groups ) ;
1476
+ }
1477
+
1446
1478
let sendActivationEmail = false ;
1447
1479
let sendSubmittedEmail = false ;
1448
1480
let sendCompletedEmail = false ;
0 commit comments