Commit 8da76739ecca7d0ba2ad7e30cb9e0267e07dd0fd
1 parent
d27581f507
Exists in
master
config.partner.callback.debug_apikey
Showing 2 changed files with 4 additions and 2 deletions Inline Diff
config.sample.json
1 | { | 1 | { |
2 | "handler_name": "KOMODO-GW-HTTPGETX", | 2 | "handler_name": "KOMODO-GW-HTTPGETX", |
3 | "pull_interval_ms": 1000, | 3 | "pull_interval_ms": 1000, |
4 | "partner": { | 4 | "partner": { |
5 | "url": "http://PLEASE_CHANGE_ME:25614", | 5 | "url": "http://PLEASE_CHANGE_ME:25614", |
6 | "terminal_name": "PLEASE_CHANGE_ME", | 6 | "terminal_name": "PLEASE_CHANGE_ME", |
7 | "password": "PLEASE_CHANGE_ME", | 7 | "password": "PLEASE_CHANGE_ME", |
8 | "dump_request": true, | 8 | "dump_request": true, |
9 | "callback": { | 9 | "callback": { |
10 | "port": 14000, | 10 | "port": 14000, |
11 | "url": "http://PLEASE_CHANGE_ME:14000", | 11 | "url": "http://PLEASE_CHANGE_ME:14000", |
12 | "apikey": [ | 12 | "apikey": [ |
13 | "PLEASE_CHANGE_ME" | 13 | "PLEASE_CHANGE_ME" |
14 | ], | 14 | ], |
15 | "trust_proxy": ["loopback"], | 15 | "trust_proxy": ["loopback"], |
16 | "dump_request": true | 16 | "dump_request": true, |
17 | "debug_apikey": false | ||
17 | } | 18 | } |
18 | }, | 19 | }, |
19 | "control_panel": { | 20 | "control_panel": { |
20 | "listen_port": 16101, | 21 | "listen_port": 16101, |
21 | "url": "http://localhost:16101/" | 22 | "url": "http://localhost:16101/" |
22 | }, | 23 | }, |
23 | "apiserver": { | 24 | "apiserver": { |
24 | "port": 16102, | 25 | "port": 16102, |
25 | "apikey": "PLEASE_CHANGE_ME", | 26 | "apikey": "PLEASE_CHANGE_ME", |
26 | "url": "http://localhost:16102/apikey/PLEASE_CHANGE_ME" | 27 | "url": "http://localhost:16102/apikey/PLEASE_CHANGE_ME" |
27 | }, | 28 | }, |
28 | "push_server": { | 29 | "push_server": { |
29 | "apikey": "PLEASE_CHANGE_ME", | 30 | "apikey": "PLEASE_CHANGE_ME", |
30 | "advice": { | 31 | "advice": { |
31 | "port": 16103, | 32 | "port": 16103, |
32 | "url": "http://localhost:16103/apikey/PLEASE_CHANGE_ME/advice" | 33 | "url": "http://localhost:16103/apikey/PLEASE_CHANGE_ME/advice" |
33 | } | 34 | } |
34 | }, | 35 | }, |
35 | "products": [ | 36 | "products": [ |
36 | ], | 37 | ], |
37 | "remote_products": {}, | 38 | "remote_products": {}, |
38 | "do_not_verbose_log_report": true | 39 | "do_not_verbose_log_report": true |
39 | } | 40 | } |
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; | 6 | const DEBUG_CALLBACK_APIKEY = process.env.DEBUG_CALLBACK_APIKEY |
7 | || (config.partner && config.partner.callback && config.partner.callback.debug_apikey); | ||
7 | 8 | ||
8 | const sendInvalidApikeyResponse = (xid, res) => { | 9 | const sendInvalidApikeyResponse = (xid, res) => { |
9 | res.status(403).json({ | 10 | res.status(403).json({ |
10 | status: 'NOT-OK', | 11 | status: 'NOT-OK', |
11 | error: 'Invalid APIKEY', | 12 | error: 'Invalid APIKEY', |
12 | ts: new Date(), | 13 | ts: new Date(), |
13 | xid, | 14 | xid, |
14 | }); | 15 | }); |
15 | }; | 16 | }; |
16 | 17 | ||
17 | if (!config.partner.callback.apikey) { | 18 | if (!config.partner.callback.apikey) { |
18 | logger.warn(`${MODULE_NAME} 56420201: Missing config.partner.callback.apikey. Please consider to set it for security reason`); | 19 | logger.warn(`${MODULE_NAME} 56420201: Missing config.partner.callback.apikey. Please consider to set it for security reason`); |
19 | } | 20 | } |
20 | 21 | ||
21 | module.exports = (req, res, next) => { | 22 | module.exports = (req, res, next) => { |
22 | const { xid } = res.locals; | 23 | const { xid } = res.locals; |
23 | const apikeyFromRequest = req.params.apikey; | 24 | const apikeyFromRequest = req.params.apikey; |
24 | 25 | ||
25 | if (!config.partner || !config.partner.callback || !config.partner.callback.apikey) { | 26 | if (!config.partner || !config.partner.callback || !config.partner.callback.apikey) { |
26 | if (DEBUG_CALLBACK_APIKEY) { | 27 | if (DEBUG_CALLBACK_APIKEY) { |
27 | logger.verbose(`${MODULE_NAME} 8BE57EB4: Skip APIKEY checker on no config`, { | 28 | logger.verbose(`${MODULE_NAME} 8BE57EB4: Skip APIKEY checker on no config`, { |
28 | xid, | 29 | xid, |
29 | }); | 30 | }); |
30 | } | 31 | } |
31 | next(); | 32 | next(); |
32 | return; | 33 | return; |
33 | } | 34 | } |
34 | 35 | ||
35 | if (DEBUG_CALLBACK_APIKEY) { | 36 | if (DEBUG_CALLBACK_APIKEY) { |
36 | logger.verbose(`${MODULE_NAME} 1A634029: Checking for apikey validity`, { | 37 | logger.verbose(`${MODULE_NAME} 1A634029: Checking for apikey validity`, { |
37 | xid, | 38 | xid, |
38 | apikeyFromRequest, | 39 | apikeyFromRequest, |
39 | }); | 40 | }); |
40 | } | 41 | } |
41 | 42 | ||
42 | if ( | 43 | if ( |
43 | typeof config.partner.callback.apikey === 'object' | 44 | typeof config.partner.callback.apikey === 'object' |
44 | && Array.isArray(config.partner.callback.apikey) | 45 | && Array.isArray(config.partner.callback.apikey) |
45 | && config.partner.callback.apikey.indexOf(apikeyFromRequest) >= 0 | 46 | && config.partner.callback.apikey.indexOf(apikeyFromRequest) >= 0 |
46 | ) { | 47 | ) { |
47 | if (DEBUG_CALLBACK_APIKEY) { | 48 | if (DEBUG_CALLBACK_APIKEY) { |
48 | logger.verbose(`${MODULE_NAME} 4BC7B45D: Apikey match with one of array element`, { | 49 | logger.verbose(`${MODULE_NAME} 4BC7B45D: Apikey match with one of array element`, { |
49 | xid, | 50 | xid, |
50 | apikeyFromRequest, | 51 | apikeyFromRequest, |
51 | }); | 52 | }); |
52 | } | 53 | } |
53 | 54 | ||
54 | next(); | 55 | next(); |
55 | return; | 56 | return; |
56 | } | 57 | } |
57 | 58 | ||
58 | if ( | 59 | if ( |
59 | typeof config.partner.callback.apikey === 'string' | 60 | typeof config.partner.callback.apikey === 'string' |
60 | && config.partner.callback.apikey === apikeyFromRequest | 61 | && config.partner.callback.apikey === apikeyFromRequest |
61 | ) { | 62 | ) { |
62 | if (DEBUG_CALLBACK_APIKEY) { | 63 | if (DEBUG_CALLBACK_APIKEY) { |
63 | logger.verbose(`${MODULE_NAME} FC80DC85: Apikey match with string config`, { | 64 | logger.verbose(`${MODULE_NAME} FC80DC85: Apikey match with string config`, { |
64 | xid, | 65 | xid, |
65 | apikeyFromRequest, | 66 | apikeyFromRequest, |
66 | }); | 67 | }); |
67 | } | 68 | } |
68 | next(); | 69 | next(); |
69 | return; | 70 | return; |
70 | } | 71 | } |
71 | 72 | ||
72 | logger.warn(`${MODULE_NAME} A4D719C2: Invalid apikey`, { | 73 | logger.warn(`${MODULE_NAME} A4D719C2: Invalid apikey`, { |
73 | xid, | 74 | xid, |
74 | remoteIp: req.ip, | 75 | remoteIp: req.ip, |
75 | url: req.url, | 76 | url: req.url, |
76 | apikeyFromRequest, | 77 | apikeyFromRequest, |
77 | }); | 78 | }); |
78 | 79 | ||
79 | sendInvalidApikeyResponse(xid, res); | 80 | sendInvalidApikeyResponse(xid, res); |
80 | }; | 81 | }; |
81 | 82 |