Commit 8da76739ecca7d0ba2ad7e30cb9e0267e07dd0fd

Authored by Adhidarma Hadiwinoto
1 parent d27581f507
Exists in master

config.partner.callback.debug_apikey

Showing 2 changed files with 4 additions and 2 deletions Inline Diff

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