Commit 15d2aafc81832b46d7850602adef388c0ad15da3
1 parent
620c83459a
Exists in
master
Callback apikey debug
Showing 1 changed file with 29 additions and 2 deletions Inline Diff
lib/callback/apikey-checker.js
1 | const MODULE_NAME = 'CALLBACK.APIKEY-CHECKER'; | 1 | const MODULE_NAME = 'CALLBACK.APIKEY-CHECKER'; |
2 | 2 | ||
3 | const config = require('komodo-sdk/config'); | 3 | const config = require('komodo-sdk/config'); |
4 | const logger = require('tektrans-logger'); | 4 | const logger = require('tektrans-logger'); |
5 | 5 | ||
6 | const { DEBUG_CALLBACK_APIKEY } = process.env; | ||
7 | |||
6 | const sendInvalidApikeyResponse = (xid, res) => { | 8 | const sendInvalidApikeyResponse = (xid, res) => { |
7 | res.status(403).json({ | 9 | res.status(403).json({ |
8 | status: 'NOT-OK', | 10 | status: 'NOT-OK', |
9 | error: 'Invalid APIKEY', | 11 | error: 'Invalid APIKEY', |
10 | ts: new Date(), | 12 | ts: new Date(), |
11 | xid, | 13 | xid, |
12 | }); | 14 | }); |
13 | }; | 15 | }; |
14 | 16 | ||
15 | if (!config.partner.callback.apikey) { | 17 | if (!config.partner.callback.apikey) { |
16 | logger.warn(`${MODULE_NAME} 56420201: Missing config.partner.callback.apikey. Please consider to set it for security reason`); | 18 | logger.warn(`${MODULE_NAME} 56420201: Missing config.partner.callback.apikey. Please consider to set it for security reason`); |
17 | } | 19 | } |
18 | 20 | ||
19 | module.exports = (req, res, next) => { | 21 | module.exports = (req, res, next) => { |
22 | const { xid } = res.locals; | ||
23 | const apikeyFromRequest = req.params.apikey; | ||
24 | |||
20 | if (!config.partner || !config.partner.callback || !config.partner.callback.apikey) { | 25 | if (!config.partner || !config.partner.callback || !config.partner.callback.apikey) { |
26 | if (DEBUG_CALLBACK_APIKEY) { | ||
27 | logger.verbose(`${MODULE_NAME} 8BE57EB4: Skip APIKEY checker on no config`, { | ||
28 | xid, | ||
29 | }); | ||
30 | } | ||
21 | next(); | 31 | next(); |
22 | return; | 32 | return; |
23 | } | 33 | } |
24 | 34 | ||
25 | const { xid } = res.locals; | 35 | if (DEBUG_CALLBACK_APIKEY) { |
26 | const apikeyFromRequest = req.params.apikey; | 36 | logger.verbose(`${MODULE_NAME} 1A634029: Checking for apikey validity`, { |
37 | xid, | ||
38 | apikeyFromRequest, | ||
39 | }); | ||
40 | } | ||
27 | 41 | ||
28 | if ( | 42 | if ( |
29 | typeof config.partner.callback.apikey === 'object' | 43 | typeof config.partner.callback.apikey === 'object' |
30 | && Array.isArray(config.partner.callback.apikey) | 44 | && Array.isArray(config.partner.callback.apikey) |
31 | && config.partner.callback.apikey.indexOf(apikeyFromRequest) >= 0 | 45 | && config.partner.callback.apikey.indexOf(apikeyFromRequest) >= 0 |
32 | ) { | 46 | ) { |
47 | if (DEBUG_CALLBACK_APIKEY) { | ||
48 | logger.verbose(`${MODULE_NAME} 4BC7B45D: Apikey match with one of array element`, { | ||
49 | xid, | ||
50 | apikeyFromRequest, | ||
51 | }); | ||
52 | } | ||
53 | |||
33 | next(); | 54 | next(); |
34 | return; | 55 | return; |
35 | } | 56 | } |
36 | 57 | ||
37 | if ( | 58 | if ( |
38 | typeof config.partner.callback.apikey === 'string' | 59 | typeof config.partner.callback.apikey === 'string' |
39 | && config.partner.callback.apikey === apikeyFromRequest | 60 | && config.partner.callback.apikey === apikeyFromRequest |
40 | ) { | 61 | ) { |
62 | if (DEBUG_CALLBACK_APIKEY) { | ||
63 | logger.verbose(`${MODULE_NAME} FC80DC85: Apikey match with string config`, { | ||
64 | xid, | ||
65 | apikeyFromRequest, | ||
66 | }); | ||
67 | } | ||
41 | next(); | 68 | next(); |
42 | return; | 69 | return; |
43 | } | 70 | } |
44 | 71 | ||
45 | logger.warn(`${MODULE_NAME} A4D719C2: Invalid apikey`, { | 72 | logger.warn(`${MODULE_NAME} A4D719C2: Invalid apikey`, { |
46 | xid, | 73 | xid, |
47 | remoteIp: req.ip, | 74 | remoteIp: req.ip, |
48 | url: req.url, | 75 | url: req.url, |
49 | apikeyFromRequest, | 76 | apikeyFromRequest, |
50 | }); | 77 | }); |
51 | 78 | ||
52 | sendInvalidApikeyResponse(xid, res); | 79 | sendInvalidApikeyResponse(xid, res); |
53 | }; | 80 | }; |
54 | 81 |