Skip to content

Commit 3c4513e

Browse files
restrict access based on the blockIP property of the JWT
1 parent 79aeefd commit 3c4513e

File tree

4 files changed

+59
-23
lines changed

4 files changed

+59
-23
lines changed

app.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,19 @@ _.each(routes, (verbs, url) => {
127127
})
128128
}
129129

130+
if (def.blockByIp) {
131+
actions.push((req, res, next) => {
132+
req.authUser.blockIP = _.find(req.authUser, (value, key) => {
133+
return (key.indexOf('blockIP') !== -1)
134+
})
135+
if (req.authUser.blockIP) {
136+
throw new errors.HttpStatusError(403, 'Access denied')
137+
} else {
138+
next()
139+
}
140+
})
141+
}
142+
130143
actions.push(method)
131144
winston.info(`API : ${verb.toLocaleUpperCase()} ${config.API_VERSION}${url}`)
132145
apiRouter[verb](`${config.API_VERSION}${url}`, helper.autoWrapExpress(actions))

src/routes/ReviewRoutes.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,16 @@ module.exports = {
99
method: 'createReview',
1010
auth: 'jwt',
1111
access: ['Administrator', 'Copilot'],
12-
scopes: ['create:review', 'all:review']
12+
scopes: ['create:review', 'all:review'],
13+
blockByIp: true
1314
},
1415
get: {
1516
controller: 'ReviewController',
1617
method: 'listReviews',
1718
auth: 'jwt',
1819
access: ['Administrator', 'Copilot'],
19-
scopes: ['read:review', 'all:review']
20+
scopes: ['read:review', 'all:review'],
21+
blockByIp: true
2022
}
2123
},
2224
'/reviews/:reviewId': {
@@ -25,28 +27,32 @@ module.exports = {
2527
method: 'getReview',
2628
auth: 'jwt',
2729
access: ['Administrator', 'Copilot', 'Topcoder User'],
28-
scopes: ['read:review', 'all:review']
30+
scopes: ['read:review', 'all:review'],
31+
blockByIp: true
2932
},
3033
put: {
3134
controller: 'ReviewController',
3235
method: 'updateReview',
3336
auth: 'jwt',
3437
access: ['Administrator'],
35-
scopes: ['update:review', 'all:review']
38+
scopes: ['update:review', 'all:review'],
39+
blockByIp: true
3640
},
3741
patch: {
3842
controller: 'ReviewController',
3943
method: 'patchReview',
4044
auth: 'jwt',
4145
access: ['Administrator'],
42-
scopes: ['update:review', 'all:review']
46+
scopes: ['update:review', 'all:review'],
47+
blockByIp: true
4348
},
4449
delete: {
4550
controller: 'ReviewController',
4651
method: 'deleteReview',
4752
auth: 'jwt',
4853
access: ['Administrator'],
49-
scopes: ['delete:review', 'all:review']
54+
scopes: ['delete:review', 'all:review'],
55+
blockByIp: true
5056
}
5157
}
5258
}

src/routes/ReviewSummationRoutes.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,16 @@ module.exports = {
99
method: 'createReviewSummation',
1010
auth: 'jwt',
1111
access: ['Administrator', 'Copilot'],
12-
scopes: ['create:review_summation', 'all:review_summation']
12+
scopes: ['create:review_summation', 'all:review_summation'],
13+
blockByIp: true
1314
},
1415
get: {
1516
controller: 'ReviewSummationController',
1617
method: 'listReviewSummations',
1718
auth: 'jwt',
1819
access: ['Administrator', 'Copilot'],
19-
scopes: ['read:review_summation', 'all:review_summation']
20+
scopes: ['read:review_summation', 'all:review_summation'],
21+
blockByIp: true
2022
}
2123
},
2224
'/reviewSummations/:reviewSummationId': {
@@ -25,28 +27,32 @@ module.exports = {
2527
method: 'getReviewSummation',
2628
auth: 'jwt',
2729
access: ['Administrator', 'Copilot'],
28-
scopes: ['read:review_summation', 'all:review_summation']
30+
scopes: ['read:review_summation', 'all:review_summation'],
31+
blockByIp: true
2932
},
3033
put: {
3134
controller: 'ReviewSummationController',
3235
method: 'updateReviewSummation',
3336
auth: 'jwt',
3437
access: ['Administrator'],
35-
scopes: ['update:review_summation', 'all:review_summation']
38+
scopes: ['update:review_summation', 'all:review_summation'],
39+
blockByIp: true
3640
},
3741
patch: {
3842
controller: 'ReviewSummationController',
3943
method: 'patchReviewSummation',
4044
auth: 'jwt',
4145
access: ['Administrator'],
42-
scopes: ['update:review_summation', 'all:review_summation']
46+
scopes: ['update:review_summation', 'all:review_summation'],
47+
blockByIp: true
4348
},
4449
delete: {
4550
controller: 'ReviewSummationController',
4651
method: 'deleteReviewSummation',
4752
auth: 'jwt',
4853
access: ['Administrator'],
49-
scopes: ['delete:review_summation', 'all:review_summation']
54+
scopes: ['delete:review_summation', 'all:review_summation'],
55+
blockByIp: true
5056
}
5157
}
5258
}

src/routes/SubmissionRoutes.js

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,16 @@ module.exports = {
99
method: 'createSubmission',
1010
auth: 'jwt',
1111
access: ['Topcoder User', 'Administrator', 'Copilot'],
12-
scopes: ['create:submission', 'all:submission']
12+
scopes: ['create:submission', 'all:submission'],
13+
blockByIp: true
1314
},
1415
get: {
1516
controller: 'SubmissionController',
1617
method: 'listSubmissions',
1718
auth: 'jwt',
1819
access: ['Topcoder User', 'Administrator', 'Copilot'],
19-
scopes: ['read:submission', 'all:submission']
20+
scopes: ['read:submission', 'all:submission'],
21+
blockByIp: true
2022
}
2123
},
2224
'/submissions/:submissionId': {
@@ -25,28 +27,32 @@ module.exports = {
2527
method: 'getSubmission',
2628
auth: 'jwt',
2729
access: ['Topcoder User', 'Administrator', 'Copilot'],
28-
scopes: ['read:submission', 'all:submission']
30+
scopes: ['read:submission', 'all:submission'],
31+
blockByIp: true
2932
},
3033
put: {
3134
controller: 'SubmissionController',
3235
method: 'updateSubmission',
3336
auth: 'jwt',
3437
access: ['Administrator'],
35-
scopes: ['update:submission', 'all:submission']
38+
scopes: ['update:submission', 'all:submission'],
39+
blockByIp: true
3640
},
3741
patch: {
3842
controller: 'SubmissionController',
3943
method: 'patchSubmission',
4044
auth: 'jwt',
4145
access: ['Administrator'],
42-
scopes: ['update:submission', 'all:submission']
46+
scopes: ['update:submission', 'all:submission'],
47+
blockByIp: true
4348
},
4449
delete: {
4550
controller: 'SubmissionController',
4651
method: 'deleteSubmission',
4752
auth: 'jwt',
4853
access: ['Administrator'],
49-
scopes: ['delete:submission', 'all:submission']
54+
scopes: ['delete:submission', 'all:submission'],
55+
blockByIp: true
5056
}
5157
},
5258
'/submissions/:submissionId/download': {
@@ -55,7 +61,8 @@ module.exports = {
5561
method: 'downloadSubmission',
5662
auth: 'jwt',
5763
access: ['Topcoder User', 'Administrator', 'Copilot'],
58-
scopes: ['read:submission', 'all:submission']
64+
scopes: ['read:submission', 'all:submission'],
65+
blockByIp: true
5966
}
6067
},
6168
'/submissions/:submissionId/artifacts': {
@@ -64,14 +71,16 @@ module.exports = {
6471
method: 'createArtifact',
6572
auth: 'jwt',
6673
access: ['Topcoder User', 'Administrator', 'Copilot'],
67-
scopes: ['create:submission', 'all:submission']
74+
scopes: ['create:submission', 'all:submission'],
75+
blockByIp: true
6876
},
6977
get: {
7078
controller: 'ArtifactController',
7179
method: 'listArtifacts',
7280
auth: 'jwt',
7381
access: ['Topcoder User', 'Administrator', 'Copilot'],
74-
scopes: ['read:submission', 'all:submission']
82+
scopes: ['read:submission', 'all:submission'],
83+
blockByIp: true
7584
}
7685
},
7786
'/submissions/:submissionId/artifacts/:file': {
@@ -80,7 +89,8 @@ module.exports = {
8089
method: 'deleteArtifact',
8190
auth: 'jwt',
8291
access: ['Administrator'],
83-
scopes: ['delete:submission', 'all:submission']
92+
scopes: ['delete:submission', 'all:submission'],
93+
blockByIp: true
8494
}
8595
},
8696
'/submissions/:submissionId/artifacts/:file/download': {
@@ -89,7 +99,8 @@ module.exports = {
8999
method: 'downloadArtifact',
90100
auth: 'jwt',
91101
access: ['Topcoder User', 'Administrator', 'Copilot'],
92-
scopes: ['read:submission', 'all:submission']
102+
scopes: ['read:submission', 'all:submission'],
103+
blockByIp: true
93104
}
94105
}
95106
}

0 commit comments

Comments
 (0)