Skip to content

Commit 857c1b7

Browse files
authored
Merge pull request #43 from imcaizheng/add-m2m-support
allow m2m users to access the APIs
2 parents cb5d9ed + 38787dd commit 857c1b7

15 files changed

+1102
-67
lines changed

README.md

+3
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ The following parameters can be set in config files or in env variables:
2828
- `AUTH0_CLIENT_SECRET`: Auth0 client secret, used to get TC M2M token
2929
- `AUTH0_PROXY_SERVER_URL`: Proxy Auth0 URL, used to get TC M2M token
3030

31+
- `m2m.M2M_AUDIT_USER_ID`: default value is `00000000-0000-0000-0000-000000000000`
32+
- `m2m.M2M_AUDIT_HANDLE`: default value is `TopcoderService`
33+
3134
- `DATABASE_URL`: PostgreSQL database url.
3235
- `DB_SCHEMA_NAME`: string - PostgreSQL database target schema
3336
- `PROJECT_API_URL`: the project service url

app-constants.js

+25-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,30 @@ const UserRoles = {
66
BookingManager: 'bookingmanager'
77
}
88

9+
const Scopes = {
10+
// job
11+
READ_JOB: 'read:taas-jobs',
12+
CREATE_JOB: 'create:taas-jobs',
13+
UPDATE_JOB: 'update:taas-jobs',
14+
DELETE_JOB: 'delete:taas-jobs',
15+
ALL_JOB: 'all:taas-jobs',
16+
// job candidate
17+
READ_JOB_CANDIDATE: 'read:taas-jobCandidates',
18+
CREATE_JOB_CANDIDATE: 'create:taas-jobCandidates',
19+
UPDATE_JOB_CANDIDATE: 'update:taas-jobCandidates',
20+
DELETE_JOB_CANDIDATE: 'delete:taas-jobCandidates',
21+
ALL_JOB_CANDIDATE: 'all:taas-jobCandidates',
22+
// resource booking
23+
READ_RESOURCE_BOOKING: 'read:taas-resourceBookings',
24+
CREATE_RESOURCE_BOOKING: 'create:taas-resourceBookings',
25+
UPDATE_RESOURCE_BOOKING: 'update:taas-resourceBookings',
26+
DELETE_RESOURCE_BOOKING: 'delete:taas-resourceBookings',
27+
ALL_RESOURCE_BOOKING: 'all:taas-resourceBookings',
28+
// taas-team
29+
READ_TAAS_TEAM: 'read:taas-teams'
30+
}
31+
932
module.exports = {
10-
UserRoles
33+
UserRoles,
34+
Scopes
1135
}

app-routes.js

+16-4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const _ = require('lodash')
66
const config = require('config')
77
const HttpStatus = require('http-status-codes')
88
const helper = require('./src/common/helper')
9+
const errors = require('./src/common/errors')
910
const routes = require('./src/routes')
1011
const constants = require('./app-constants')
1112
const authenticator = require('tc-core-library-js').middleware.jwtAuthenticator
@@ -37,11 +38,22 @@ module.exports = (app) => {
3738
})
3839

3940
actions.push((req, res, next) => {
40-
req.authUser.jwtToken = req.headers.authorization
41-
if (_.includes(req.authUser.roles, constants.UserRoles.BookingManager)) {
42-
req.authUser.isBookingManager = true
41+
if (req.authUser.isMachine) {
42+
// M2M
43+
if (!req.authUser.scopes || !helper.checkIfExists(def.scopes, req.authUser.scopes)) {
44+
next(new errors.ForbiddenError('You are not allowed to perform this action!'))
45+
} else {
46+
req.authUser.userId = config.m2m.M2M_AUDIT_USER_ID
47+
req.authUser.handle = config.m2m.M2M_AUDIT_HANDLE
48+
next()
49+
}
50+
} else {
51+
req.authUser.jwtToken = req.headers.authorization
52+
if (_.includes(req.authUser.roles, constants.UserRoles.BookingManager)) {
53+
req.authUser.isBookingManager = true
54+
}
55+
next()
4356
}
44-
next()
4557
})
4658
}
4759

config/default.js

+5
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ module.exports = {
1414
AUTH0_CLIENT_SECRET: process.env.AUTH0_CLIENT_SECRET,
1515
AUTH0_PROXY_SERVER_URL: process.env.AUTH0_PROXY_SERVER_URL,
1616

17+
m2m: {
18+
M2M_AUDIT_USER_ID: process.env.M2M_AUDIT_USER_ID || '00000000-0000-0000-0000-000000000000',
19+
M2M_AUDIT_HANDLE: process.env.M2M_AUDIT_HANDLE || 'TopcoderService'
20+
},
21+
1722
TC_API: process.env.TC_API || 'https://api.topcoder-dev.com/v5',
1823
ORG_ID: process.env.ORG_ID || '36ed815b-3da1-49f1-a043-aaed0a4e81ad',
1924

0 commit comments

Comments
 (0)