-
Notifications
You must be signed in to change notification settings - Fork 26
/
Copy pathoutgoingRecorder.js
124 lines (102 loc) · 3.66 KB
/
outgoingRecorder.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
var assign = require('lodash/assign');
var dataUtils = require('./dataUtils');
var hashSensitive = dataUtils.hashSensitive;
function createMockIncomingRequestResponse(logData) {
var getHeader = function(name) {
var lowerCaseName = typeof name === 'string' && name.toLowerCase();
return this.headers[name] || this.headers[lowerCaseName];
};
var req = {
_mo_mocked: true,
headers: logData.request.headers || {},
method: logData.request.verb,
url: logData.request.uri,
getHeader: getHeader,
get: getHeader,
body: logData.request.body
};
var res = {
_mo_mocked: true,
headers: logData.response.headers || {},
statusCode: logData.response.status,
getHeader: getHeader,
get: getHeader,
body: logData.response.body
};
return {
request: req,
response: res
};
}
function _createOutgoingRecorder(saveEvent, moesifOptions, logger) {
return function(capturedData) {
// Already have more comprehensive short circuit upstream.
// so comment below check.
// if (capturedData.request.uri && capturedData.request.uri.includes('moesif.net')) {
// // skip if it is moesif.
// logger('request skipped since it is moesif');
// return;
// }
// apply moesif options:
// we do this to make the outging request and response look like signature of
// incoming request and responses, so that the moesif express options (which are designed for incoming request)
// can be called.
// and put everything in try block, just in case.
var mock = createMockIncomingRequestResponse(capturedData);
var logData = assign({}, capturedData);
if (!moesifOptions.skip(mock.request, mock.response)) {
if (!moesifOptions.noAutoHideSensitive) {
// autoHide
try {
logData.request.headers = hashSensitive(logData.request.headers, moesifOptions.debug);
logData.request.body = hashSensitive(logData.request.body, moesifOptions.debug);
logData.response.headers = hashSensitive(logData.response.headers, moesifOptions.debug);
logData.response.body = hashSensitive(logData.response.body, moesifOptions.debug);
} catch (err) {
logger('error on hashSensitive err=' + err);
}
}
logData = moesifOptions.maskContent(logData);
try {
logData.userId = moesifOptions.identifyUser(mock.request, mock.response);
} catch (err) {
logger('error identify user:' + err);
}
try {
logData.companyId = moesifOptions.identifyCompany(mock.request, mock.response);
} catch (err) {
logger('error identifying company:' + err);
}
try {
logData.sessionToken = moesifOptions.getSessionToken(mock.request, mock.response);
} catch (err) {
logger('error getSessionToken' + err);
}
try {
logData.tags = moesifOptions.getTags(mock.request, mock.response);
} catch (err) {
logger('error getTags' + err);
}
try {
logData.request.apiVersion = moesifOptions.getApiVersion(mock.request, mock.response);
} catch (err) {
logger('error getApiVersion' + err);
}
try {
logData.metadata = moesifOptions.getMetadata(mock.request, mock.response);
} catch (err) {
logger('error adding metadata:' + err);
}
// logBody option
if (!moesifOptions.logBody) {
logData.request.body = null;
logData.response.body = null;
}
// Set API direction
logData.direction = "Outgoing"
logger('queueing outgoing event to be sent to Moesif', logData);
saveEvent(logData);
}
};
}
module.exports = _createOutgoingRecorder;