File tree 3 files changed +14
-5
lines changed
3 files changed +14
-5
lines changed Original file line number Diff line number Diff line change 172
172
"url-parse" : " ^1.4.1" ,
173
173
"uuid" : " ^3.3.2" ,
174
174
"valid-url" : " ^1.0.9" ,
175
- "xml2json" : " ^0.11.2"
175
+ "xml2json" : " ^0.11.2" ,
176
+ "xss" : " ^1.0.15"
176
177
},
177
178
"devDependencies" : {
178
179
"@commitlint/cli" : " ^8.3.5" ,
Original file line number Diff line number Diff line change 3
3
* Server-side functions necessary for effective integration with MMLeaderboard
4
4
*/
5
5
import { services } from 'topcoder-react-lib' ;
6
+ import xss from 'xss' ;
6
7
7
8
const { api, submissions } = services ;
8
9
@@ -17,13 +18,14 @@ export default class MMLService {
17
18
*/
18
19
async getLeaderboard ( req , res , next ) {
19
20
try {
21
+ const sanitizedId = xss ( req . params . id ) ;
20
22
const m2mToken = await api . getTcM2mToken ( ) ;
21
23
const subSrv = submissions . getService ( m2mToken ) ;
22
24
const reviewIds = await subSrv . getScanReviewIds ( ) ;
23
25
const v5api = api . getApiV5 ( m2mToken ) ;
24
- const subs = await v5api . get ( `/submissions?challengeId=${ req . params . id } &page=1&perPage=500` ) ;
26
+ const subs = await v5api . get ( `/submissions?challengeId=${ sanitizedId } &page=1&perPage=500` ) ;
25
27
return res . send ( {
26
- id : req . params . id ,
28
+ id : sanitizedId ,
27
29
subs : await subs . json ( ) ,
28
30
reviewIds,
29
31
} ) ;
Original file line number Diff line number Diff line change @@ -7,6 +7,7 @@ import qs from 'qs';
7
7
import _ from 'lodash' ;
8
8
import { logger , services } from 'topcoder-react-lib' ;
9
9
import Joi from 'joi' ;
10
+ import xss from 'xss' ;
10
11
import { sendEmailDirect } from './sendGrid' ;
11
12
// import GSheetService from './gSheet';
12
13
@@ -186,7 +187,12 @@ export default class RecruitCRMService {
186
187
*/
187
188
async getJob ( req , res , next ) {
188
189
try {
189
- const response = await fetch ( `${ this . private . baseUrl } /v1/jobs/${ req . params . id } ` , {
190
+ const sanitizedId = xss ( req . params . id ) ;
191
+
192
+ if ( ! / ^ [ a - z A - Z 0 - 9 - _ ] { 8 , 20 } $ / . test ( sanitizedId ) ) {
193
+ return res . status ( 400 ) . json ( { error : 'Invalid job ID format.' } ) ;
194
+ }
195
+ const response = await fetch ( `${ this . private . baseUrl } /v1/jobs/${ sanitizedId } ` , {
190
196
method : 'GET' ,
191
197
headers : {
192
198
'Content-Type' : req . headers [ 'content-type' ] ,
@@ -201,7 +207,7 @@ export default class RecruitCRMService {
201
207
const error = {
202
208
error : true ,
203
209
status : response . status ,
204
- url : `${ this . private . baseUrl } /v1/jobs/${ req . params . id } ` ,
210
+ url : `${ this . private . baseUrl } /v1/jobs/${ sanitizedId } ` ,
205
211
errObj : await response . json ( ) ,
206
212
} ;
207
213
logger . error ( error ) ;
You can’t perform that action at this time.
0 commit comments