@contrast/agent 4.5.1 → 4.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/bin/VERSION +1 -1
  2. package/bin/linux/contrast-service +0 -0
  3. package/bin/mac/contrast-service +0 -0
  4. package/bin/windows/contrast-service.exe +0 -0
  5. package/lib/assess/membrane/deserialization-membrane.js +4 -5
  6. package/lib/assess/membrane/source-membrane.js +16 -33
  7. package/lib/assess/models/call-context.js +1 -1
  8. package/lib/assess/policy/propagators.json +19 -21
  9. package/lib/assess/policy/rules.json +7 -2
  10. package/lib/assess/policy/signatures.json +42 -0
  11. package/lib/assess/policy/util.js +2 -1
  12. package/lib/assess/propagators/JSON/parse.js +1 -1
  13. package/lib/assess/propagators/JSON/stringify.js +3 -3
  14. package/lib/assess/propagators/array-prototype-join.js +7 -8
  15. package/lib/assess/propagators/common.js +7 -5
  16. package/lib/assess/propagators/dustjs/escape-html.js +22 -0
  17. package/lib/assess/propagators/dustjs/escape-js.js +22 -0
  18. package/lib/assess/propagators/encode-uri/encode-uri-component.js +22 -0
  19. package/lib/assess/propagators/encode-uri/encode-uri.js +22 -0
  20. package/lib/assess/propagators/handlebars-escape-expresssion.js +1 -1
  21. package/lib/assess/propagators/index.js +0 -2
  22. package/lib/assess/propagators/joi/boolean.js +1 -1
  23. package/lib/assess/propagators/joi/expression.js +1 -1
  24. package/lib/assess/propagators/joi/number.js +1 -1
  25. package/lib/assess/propagators/joi/string-base.js +1 -1
  26. package/lib/assess/propagators/joi/string-schema.js +12 -13
  27. package/lib/assess/propagators/joi/values.js +37 -22
  28. package/lib/assess/propagators/manager.js +12 -10
  29. package/lib/assess/propagators/mongoose/helpers.js +20 -0
  30. package/lib/assess/propagators/mongoose/index.js +18 -0
  31. package/lib/assess/propagators/mongoose/map.js +74 -0
  32. package/lib/assess/propagators/mongoose/string.js +104 -0
  33. package/lib/assess/propagators/mustache/escape.js +22 -0
  34. package/lib/assess/propagators/number.js +54 -0
  35. package/lib/assess/propagators/object.js +6 -7
  36. package/lib/assess/propagators/path/basename.js +14 -13
  37. package/lib/assess/propagators/path/common.js +156 -47
  38. package/lib/assess/propagators/path/dirname.js +14 -13
  39. package/lib/assess/propagators/path/extname.js +14 -13
  40. package/lib/assess/propagators/path/join.js +5 -1
  41. package/lib/assess/propagators/path/normalize.js +1 -2
  42. package/lib/assess/propagators/path/parse.js +1 -1
  43. package/lib/assess/propagators/path/relative.js +7 -5
  44. package/lib/assess/propagators/path/resolve.js +11 -2
  45. package/lib/assess/propagators/querystring/escape.js +20 -18
  46. package/lib/assess/propagators/querystring/parse.js +7 -5
  47. package/lib/assess/propagators/querystring/stringify.js +25 -24
  48. package/lib/assess/propagators/querystring/unescape.js +20 -18
  49. package/lib/assess/propagators/sequelize/sql-string-escape.js +1 -1
  50. package/lib/assess/propagators/sequelize/sql-string-format-named-parameters.js +1 -1
  51. package/lib/assess/propagators/sequelize/sql-string-format.js +3 -3
  52. package/lib/assess/propagators/sequelize/utils.js +2 -2
  53. package/lib/assess/propagators/string-prototype-replace.js +30 -28
  54. package/lib/assess/propagators/string-prototype-split.js +36 -36
  55. package/lib/assess/propagators/string-prototype-trim.js +15 -17
  56. package/lib/assess/propagators/string.js +12 -16
  57. package/lib/assess/propagators/template-escape.js +87 -0
  58. package/lib/assess/propagators/templates.js +10 -11
  59. package/lib/assess/propagators/url/url-prototype-parse.js +5 -6
  60. package/lib/assess/propagators/url/url-url.js +51 -43
  61. package/lib/assess/propagators/util/format.js +1 -1
  62. package/lib/assess/propagators/v8/init-hooks.js +3 -3
  63. package/lib/assess/propagators/validator/init-hooks.js +22 -22
  64. package/lib/assess/sinks/common.js +10 -5
  65. package/lib/assess/sinks/dustjs-linkedin-xss.js +131 -0
  66. package/lib/assess/sinks/libxmljs-xxe.js +1 -1
  67. package/lib/assess/sinks/mongodb.js +2 -1
  68. package/lib/assess/sinks/ssrf-url.js +1 -1
  69. package/lib/constants.js +4 -1
  70. package/lib/core/arch-components/dynamodb.js +1 -2
  71. package/lib/core/arch-components/dynamodbv3.js +44 -0
  72. package/lib/core/arch-components/index.js +1 -0
  73. package/lib/core/arch-components/rethinkdb.js +53 -0
  74. package/lib/core/config/options.js +3 -2
  75. package/lib/core/rewrite/injections.js +8 -0
  76. package/lib/core/stacktrace.js +2 -1
  77. package/lib/feature-set.js +1 -1
  78. package/lib/hooks/frameworks/base.js +8 -2
  79. package/lib/hooks/frameworks/http.js +23 -16
  80. package/lib/hooks/frameworks/http2.js +73 -0
  81. package/lib/hooks/frameworks/index.js +8 -3
  82. package/lib/hooks/http.js +112 -128
  83. package/lib/hooks/object-to-primitive.js +6 -7
  84. package/lib/hooks/patcher.js +75 -44
  85. package/lib/hooks/require.js +16 -22
  86. package/lib/instrumentation.js +0 -3
  87. package/lib/protect/rules/nosqli/nosql-injection-rule.js +228 -0
  88. package/lib/protect/rules/rule-factory.js +2 -2
  89. package/lib/protect/service.js +23 -11
  90. package/lib/protect/sinks/mongodb.js +56 -55
  91. package/lib/reporter/translations/to-protobuf/dtm/index.js +1 -1
  92. package/lib/reporter/translations/to-protobuf/dtm/ip-denylist-details.js +1 -1
  93. package/lib/reporter/translations/to-protobuf/dtm/rasp-rule-sample.js +1 -1
  94. package/lib/reporter/translations/to-protobuf/settings/defend-features.js +8 -6
  95. package/lib/reporter/translations/to-protobuf/settings/exclusions.js +5 -4
  96. package/lib/tracker.js +13 -65
  97. package/lib/util/some.js +27 -0
  98. package/lib/util/source-map.js +1 -1
  99. package/package.json +15 -16
  100. package/lib/hooks/frameworks/https.js +0 -42
  101. package/lib/protect/rules/nosqli/no-sql-injection-rule.js +0 -109
  102. package/node_modules/bindings/LICENSE.md +0 -22
  103. package/node_modules/bindings/README.md +0 -98
  104. package/node_modules/bindings/bindings.js +0 -221
  105. package/node_modules/bindings/package.json +0 -32
  106. package/node_modules/file-uri-to-path/.npmignore +0 -1
  107. package/node_modules/file-uri-to-path/.travis.yml +0 -30
  108. package/node_modules/file-uri-to-path/History.md +0 -21
  109. package/node_modules/file-uri-to-path/LICENSE +0 -20
  110. package/node_modules/file-uri-to-path/README.md +0 -74
  111. package/node_modules/file-uri-to-path/index.d.ts +0 -2
  112. package/node_modules/file-uri-to-path/index.js +0 -66
  113. package/node_modules/file-uri-to-path/package.json +0 -36
  114. package/node_modules/file-uri-to-path/test/test.js +0 -24
  115. package/node_modules/file-uri-to-path/test/tests.json +0 -13
  116. package/node_modules/glossy/LICENSE +0 -19
  117. package/node_modules/glossy/README.md +0 -129
  118. package/node_modules/glossy/index.js +0 -12
  119. package/node_modules/glossy/lib/glossy/parse.js +0 -520
  120. package/node_modules/glossy/lib/glossy/produce.js +0 -459
  121. package/node_modules/glossy/package.json +0 -47
  122. package/node_modules/glossy/test/decide.js +0 -7
  123. package/node_modules/glossy/test/decode_pri.js +0 -24
  124. package/node_modules/glossy/test/parse_3164.js +0 -104
  125. package/node_modules/glossy/test/parse_5424.js +0 -106
  126. package/node_modules/glossy/test/parse_5848.js +0 -40
  127. package/node_modules/glossy/test/parse_8601.js +0 -14
  128. package/node_modules/glossy/test/parse_rfc3339.js +0 -9
  129. package/node_modules/glossy/test/produce.js +0 -162
  130. package/node_modules/glossy/test/runner.js +0 -40
  131. package/node_modules/glossy/test/structure_data.js +0 -24
  132. package/node_modules/nan/CHANGELOG.md +0 -537
  133. package/node_modules/nan/LICENSE.md +0 -13
  134. package/node_modules/nan/README.md +0 -455
  135. package/node_modules/nan/doc/asyncworker.md +0 -146
  136. package/node_modules/nan/doc/buffers.md +0 -54
  137. package/node_modules/nan/doc/callback.md +0 -76
  138. package/node_modules/nan/doc/converters.md +0 -41
  139. package/node_modules/nan/doc/errors.md +0 -226
  140. package/node_modules/nan/doc/json.md +0 -62
  141. package/node_modules/nan/doc/maybe_types.md +0 -583
  142. package/node_modules/nan/doc/methods.md +0 -664
  143. package/node_modules/nan/doc/new.md +0 -147
  144. package/node_modules/nan/doc/node_misc.md +0 -123
  145. package/node_modules/nan/doc/object_wrappers.md +0 -263
  146. package/node_modules/nan/doc/persistent.md +0 -296
  147. package/node_modules/nan/doc/scopes.md +0 -73
  148. package/node_modules/nan/doc/script.md +0 -38
  149. package/node_modules/nan/doc/string_bytes.md +0 -62
  150. package/node_modules/nan/doc/v8_internals.md +0 -199
  151. package/node_modules/nan/doc/v8_misc.md +0 -85
  152. package/node_modules/nan/include_dirs.js +0 -1
  153. package/node_modules/nan/nan.h +0 -2898
  154. package/node_modules/nan/nan_callbacks.h +0 -88
  155. package/node_modules/nan/nan_callbacks_12_inl.h +0 -514
  156. package/node_modules/nan/nan_callbacks_pre_12_inl.h +0 -520
  157. package/node_modules/nan/nan_converters.h +0 -72
  158. package/node_modules/nan/nan_converters_43_inl.h +0 -68
  159. package/node_modules/nan/nan_converters_pre_43_inl.h +0 -42
  160. package/node_modules/nan/nan_define_own_property_helper.h +0 -29
  161. package/node_modules/nan/nan_implementation_12_inl.h +0 -430
  162. package/node_modules/nan/nan_implementation_pre_12_inl.h +0 -263
  163. package/node_modules/nan/nan_json.h +0 -166
  164. package/node_modules/nan/nan_maybe_43_inl.h +0 -356
  165. package/node_modules/nan/nan_maybe_pre_43_inl.h +0 -268
  166. package/node_modules/nan/nan_new.h +0 -340
  167. package/node_modules/nan/nan_object_wrap.h +0 -156
  168. package/node_modules/nan/nan_persistent_12_inl.h +0 -132
  169. package/node_modules/nan/nan_persistent_pre_12_inl.h +0 -242
  170. package/node_modules/nan/nan_private.h +0 -73
  171. package/node_modules/nan/nan_string_bytes.h +0 -305
  172. package/node_modules/nan/nan_typedarray_contents.h +0 -96
  173. package/node_modules/nan/nan_weak.h +0 -437
  174. package/node_modules/nan/package.json +0 -41
  175. package/node_modules/nan/tools/1to2.js +0 -412
  176. package/node_modules/nan/tools/README.md +0 -14
  177. package/node_modules/nan/tools/package.json +0 -19
  178. package/node_modules/unix-dgram/LICENSE +0 -13
  179. package/node_modules/unix-dgram/README.md +0 -107
  180. package/node_modules/unix-dgram/binding.gyp +0 -20
  181. package/node_modules/unix-dgram/build/Makefile +0 -324
  182. package/node_modules/unix-dgram/build/Release/.deps/Release/obj.target/unix_dgram/src/unix_dgram.o.d +0 -58
  183. package/node_modules/unix-dgram/build/Release/.deps/Release/obj.target/unix_dgram.node.d +0 -1
  184. package/node_modules/unix-dgram/build/Release/.deps/Release/unix_dgram.node.d +0 -1
  185. package/node_modules/unix-dgram/build/Release/obj.target/unix_dgram/src/unix_dgram.o +0 -0
  186. package/node_modules/unix-dgram/build/Release/obj.target/unix_dgram.node +0 -0
  187. package/node_modules/unix-dgram/build/Release/unix_dgram.node +0 -0
  188. package/node_modules/unix-dgram/build/binding.Makefile +0 -6
  189. package/node_modules/unix-dgram/build/config.gypi +0 -213
  190. package/node_modules/unix-dgram/build/unix_dgram.target.mk +0 -159
  191. package/node_modules/unix-dgram/lib/unix_dgram.js +0 -168
  192. package/node_modules/unix-dgram/package.json +0 -36
  193. package/node_modules/unix-dgram/src/unix_dgram.cc +0 -404
  194. package/node_modules/unix-dgram/src/win_dummy.cc +0 -7
  195. package/node_modules/unix-dgram/test/test-connect-callback.js +0 -68
  196. package/node_modules/unix-dgram/test/test-connect.js +0 -53
  197. package/node_modules/unix-dgram/test/test-dgram-unix.js +0 -58
  198. package/node_modules/unix-dgram/test/test-send-error.js +0 -26
  199. package/node_modules/winston-syslog/.eslintrc +0 -7
  200. package/node_modules/winston-syslog/.travis.yml +0 -14
  201. package/node_modules/winston-syslog/CHANGELOG.md +0 -9
  202. package/node_modules/winston-syslog/LICENSE +0 -20
  203. package/node_modules/winston-syslog/README.md +0 -135
  204. package/node_modules/winston-syslog/lib/utils.js +0 -26
  205. package/node_modules/winston-syslog/lib/winston-syslog.js +0 -385
  206. package/node_modules/winston-syslog/package.json +0 -56
  207. package/node_modules/winston-syslog/test/format-test.js +0 -122
  208. package/node_modules/winston-syslog/test/syslog-test.js +0 -95
  209. package/node_modules/winston-syslog/test/unix-connect-test.js +0 -133
@@ -1,459 +0,0 @@
1
- /*
2
- * Glossy Producer - Generate valid syslog messages
3
- *
4
- * Copyright Squeeks <privacymyass@gmail.com>.
5
- * This is free software licensed under the MIT License -
6
- * see the LICENSE file that should be included with this package.
7
- */
8
-
9
- /*
10
- * These values replace the integers in message that define the facility.
11
- */
12
- var FacilityIndex = {
13
- 'kern': 0, // kernel messages
14
- 'user': 1, // user-level messages
15
- 'mail': 2, // mail system
16
- 'daemon': 3, // system daemons
17
- 'auth': 4, // security/authorization messages
18
- 'syslog': 5, // messages generated internally by syslogd
19
- 'lpr': 6, // line printer subsystem
20
- 'news': 7, // network news subsystem
21
- 'uucp': 8, // UUCP subsystem
22
- 'clock': 9, // clock daemon
23
- 'sec': 10, // security/authorization messages
24
- 'ftp': 11, // FTP daemon
25
- 'ntp': 12, // NTP subsystem
26
- 'audit': 13, // log audit
27
- 'alert': 14, // log alert
28
- // 'clock': 15, // clock daemon (note 2)
29
- 'local0': 16, // local use 0 (local0)
30
- 'local1': 17, // local use 1 (local1)
31
- 'local2': 18, // local use 2 (local2)
32
- 'local3': 19, // local use 3 (local3)
33
- 'local4': 20, // local use 4 (local4)
34
- 'local5': 21, // local use 5 (local5)
35
- 'local6': 22, // local use 6 (local6)
36
- 'local7': 23 // local use 7 (local7)
37
- };
38
-
39
- // Note 1 - Various operating systems have been found to utilize
40
- // Facilities 4, 10, 13 and 14 for security/authorization,
41
- // audit, and alert messages which seem to be similar.
42
-
43
- // Note 2 - Various operating systems have been found to utilize
44
- // both Facilities 9 and 15 for clock (cron/at) messages.
45
-
46
- /*
47
- * These values replace the integers in message that define the severity.
48
- */
49
- var SeverityIndex = {
50
- 'emerg': 0, // Emergency: system is unusable
51
- 'emergency': 0,
52
-
53
- 'alert': 1, // Alert: action must be taken immediately
54
-
55
- 'crit': 2, // Critical: critical conditions
56
- 'critical': 2,
57
-
58
- 'err': 3, // Error: error conditions
59
- 'error': 3,
60
-
61
- 'warn': 4, // Warning: warning conditions
62
- 'warning': 4,
63
-
64
- 'notice': 5, // Notice: normal but significant condition
65
-
66
- 'info': 6 , // Informational: informational messages
67
- 'information': 6,
68
- 'informational': 6,
69
-
70
- 'debug': 7 // Debug: debug-level messages
71
- };
72
-
73
-
74
- /*
75
- * Defines the range matching BSD style months to integers.
76
- */
77
- var BSDDateIndex = [
78
- 'Jan',
79
- 'Feb',
80
- 'Mar',
81
- 'Apr',
82
- 'May',
83
- 'Jun',
84
- 'Jul',
85
- 'Aug',
86
- 'Sep',
87
- 'Oct',
88
- 'Nov',
89
- 'Dec'
90
- ];
91
-
92
-
93
- /*
94
- * GlossyProducer class
95
- * @param {Object} provides persistent details of all messages:
96
- * facility: The facility index
97
- * severity: Severity index
98
- * host: Host address, either name or IP
99
- * appName: Application/Process name
100
- * pid: Process ID
101
- * msgID: Message ID (RFC5424 only)
102
- * type: RFC3164/RFC5424 message type
103
- * @return {Object} GlossyProducer object
104
- */
105
- var GlossyProducer = function(options) {
106
- if(options && typeof options =='object' && options.type) {
107
- this.type = options.type.match(/bsd|3164/i) ? "RFC3164" : "RFC5424";
108
- } else if(options && typeof options == 'string') {
109
- this.type = options.match(/bsd|3164/i) ? "RFC3164" : "RFC5424";
110
- } else {
111
- this.type = "RFC5424";
112
- }
113
-
114
- if(options && options.facility && FacilityIndex[options.facility]) {
115
- this.facility = options.facility;
116
- }
117
- if(options && options.pid && parseInt(options.pid, 10)) {
118
- this.pid = options.pid;
119
- }
120
- if(options && options.host) this.host = options.host.replace(/\s+/g, '');
121
- if(options && options.appName) this.appName = options.appName.replace(/\s+/g, '');
122
- if(options && options.msgID) this.msgID = options.msgID.replace(/\s+/g, '');
123
-
124
- };
125
-
126
-
127
- /*
128
- * @param {Object} options object containing details of the message:
129
- * facility: The facility index
130
- * severity: Severity index
131
- * prival: RFC5424 PRIVAL field - will override facility/severity if in valid [0-191] range and both provided
132
- * see ABNF at: (http://tools.ietf.org/html/rfc5424#section-6)
133
- * host: Host address, either name or IP
134
- * appName: Application ID
135
- * pid: Process ID
136
- * date: Timestamp to be applied, uses current GMT by default
137
- * time: Optional Date() argument may be used in lieu of 'date' - allows parse() output to be used for produce args
138
- * msgID: Message ID (RFC5424 only)
139
- * structuredData: Object of structured data (RFC5424 only)
140
- * message: The message to be sent
141
- *
142
- * @param {Function} callback a callback run once the message is built
143
- * @return {String} compiledMessage on completion, false on failure
144
- */
145
- GlossyProducer.prototype.produce = function(options, callback) {
146
- // TODO: next breaking api change make key output from parse() consistent with produce input options
147
- if(options.time instanceof Date && !options.date) options.date = options.time;
148
-
149
- var msgData = [];
150
- if(!options.date instanceof Date) {
151
- options.date = new Date(Date());
152
- }
153
-
154
- if(!options.facility) options.facility = this.facility;
155
-
156
- if(this.type == 'RFC5424') {
157
- if(options.hasOwnProperty('prival') && options.prival >= 0 && options.prival <= 191) {
158
- var prival = '<' + options.prival + '>1';
159
- }
160
- else {
161
- var prival = calculatePrival({
162
- facility: options.facility,
163
- severity: options.severity,
164
- version: 1
165
- });
166
- }
167
-
168
- if(prival === false) return false;
169
-
170
- msgData.push(prival);
171
- msgData.push(generateDate(options.date));
172
-
173
- msgData.push(options.host || this.host || '-');
174
- msgData.push(options.appName || this.appName || '-');
175
- msgData.push(options.pid || this.pid || '-');
176
- msgData.push(options.msgID || this.msgID || '-');
177
- if(options.structuredData) {
178
- msgData.push(generateStructuredData(options.structuredData) || '-');
179
- } else {
180
- msgData.push('-');
181
- }
182
-
183
- if(!options.message) options.message = '-';
184
-
185
- } else {
186
- options.timestamp = generateBSDDate(options.date);
187
- msgData.push(
188
- calculatePrival({
189
- facility: options.facility,
190
- severity: options.severity
191
- }) + options.timestamp
192
- );
193
-
194
- msgData.push(options.host || this.host);
195
- msgData.push();
196
- if(options.appName || this.appName) {
197
- var app = options.appName || this.appName;
198
- var pid = options.pid || this.pid;
199
-
200
- if(parseInt(pid, 10)) {
201
- msgData.push(app + '[' + pid + ']:');
202
- } else {
203
- msgData.push(app + ':');
204
- }
205
- }
206
- }
207
-
208
- var compiledMessage = msgData.filter(function (messageElement) {
209
- // Filter null/ undefined values
210
- return messageElement;
211
- }).map(function (messageElement) {
212
- // Trim messages to remove successive whitespace
213
- return String(messageElement).trim();
214
- }).join(' ');
215
- compiledMessage += ' ' + options.message || '';
216
- msgData.push(compiledMessage);
217
-
218
- if(callback) {
219
- return callback(compiledMessage);
220
- } else {
221
- return compiledMessage;
222
- }
223
-
224
- };
225
-
226
-
227
- /*
228
- * @param {Object} options object containing details of the message with
229
- * the severity as 'debug'
230
- * @param {Function} callback a callback run once the message is built
231
- * @return {String} compiledMessage on completion, false on failure
232
- */
233
- GlossyProducer.prototype.debug = function(options, callback) {
234
- options.severity = 'debug';
235
- return this.produce(options, callback);
236
- };
237
-
238
-
239
- /*
240
- * @param {Object} options object containing details of the message with
241
- * the severity as 'info'
242
- * @param {Function} callback a callback run once the message is built
243
- * @return {String} compiledMessage on completion, false on failure
244
- */
245
- GlossyProducer.prototype.info = function(options, callback) {
246
- options.severity = 'info';
247
- return this.produce(options, callback);
248
- };
249
-
250
-
251
- /*
252
- * @param {Object} options object containing details of the message with
253
- * the severity as 'notice'
254
- * @param {Function} callback a callback run once the message is built
255
- * @return {String} compiledMessage on completion, false on failure
256
- */
257
- GlossyProducer.prototype.notice = function(options, callback) {
258
- options.severity = 'notice';
259
- return this.produce(options, callback);
260
- };
261
-
262
-
263
- /*
264
- * @param {Object} options object containing details of the message with
265
- * the severity as 'warn'
266
- * @param {Function} callback a callback run once the message is built
267
- * @return {String} compiledMessage on completion, false on failure
268
- */
269
- GlossyProducer.prototype.warn = function(options, callback) {
270
- options.severity = 'warn';
271
- return this.produce(options, callback);
272
- };
273
-
274
-
275
- /*
276
- * @param {Object} options object containing details of the message with
277
- * the severity as 'crit'
278
- * @param {Function} callback a callback run once the message is built
279
- * @return {String} compiledMessage on completion, false on failure
280
- */
281
- GlossyProducer.prototype.crit = function(options, callback) {
282
- options.severity = 'crit';
283
- return this.produce(options, callback);
284
- };
285
-
286
-
287
- /*
288
- * @param {Object} options object containing details of the message with
289
- * the severity as 'alert'
290
- * @param {Function} callback a callback run once the message is built
291
- * @return {String} compiledMessage on completion, false on failure
292
- */
293
- GlossyProducer.prototype.alert = function(options, callback) {
294
- options.severity = 'alert';
295
- return this.produce(options, callback);
296
- };
297
-
298
-
299
- /*
300
- * @param {Object} options object containing details of the message with
301
- * the severity as 'emergency'
302
- * @param {Function} callback a callback run once the message is built
303
- * @return {String} compiledMessage on completion, false on failure
304
- */
305
- GlossyProducer.prototype.emergency = function(options, callback) {
306
- options.severity = 'emergency';
307
- return this.produce(options, callback);
308
- };
309
-
310
-
311
- /*
312
- * Prepend a zero to a number less than 10
313
- * @param {Number} n
314
- * @return {String}
315
- *
316
- * Where's sprintf when you need it?
317
- */
318
- function leadZero(n) {
319
- if(typeof n != 'number') return n;
320
- n = n < 10 ? '0' + n : n ;
321
- return n;
322
- }
323
-
324
-
325
- /*
326
- * Get current date in RFC 3164 format. If no date is supplied, the default
327
- * is the current time in GMT + 0.
328
- * @param {Date} dateObject optional Date object
329
- * @returns {String}
330
- *
331
- * Features code taken from https://github.com/akaspin/ain
332
- */
333
- function generateBSDDate(dateObject) {
334
- if(!(dateObject instanceof Date)) dateObject = new Date(Date());
335
- var hours = leadZero(dateObject.getHours());
336
- var minutes = leadZero(dateObject.getMinutes());
337
- var seconds = leadZero(dateObject.getSeconds());
338
- var month = dateObject.getMonth();
339
- var day = dateObject.getDate();
340
- if(day < 10) (day = ' ' + day);
341
- return BSDDateIndex[month] + " " + day + " " + hours + ":" + minutes + ":" + seconds;
342
- }
343
-
344
-
345
- /*
346
- * Generate date in RFC 3339 format. If no date is supplied, the default is
347
- * the current time in GMT + 0.
348
- * @param {Date} dateObject optional Date object
349
- * @returns {String} formatted date
350
- */
351
- function generateDate(dateObject) {
352
- if(!(dateObject instanceof Date)) dateObject = new Date(Date());
353
-
354
- // Calcutate the offset
355
- var timeOffset;
356
- var minutes = Math.abs(dateObject.getTimezoneOffset());
357
- var hours = 0;
358
- while(minutes >= 60) {
359
- hours++;
360
- minutes -= 60;
361
- }
362
-
363
- if(dateObject.getTimezoneOffset() < 0) {
364
- // Ahead of UTC
365
- timeOffset = '+' + leadZero(hours) + '' + ':' + leadZero(minutes);
366
- } else if(dateObject.getTimezoneOffset() > 0) {
367
- // Behind UTC
368
- timeOffset = '-' + leadZero(hours) + '' + ':' + leadZero(minutes);
369
- } else {
370
- // UTC
371
- timeOffset = 'Z';
372
- }
373
-
374
-
375
- // Date
376
- formattedDate = dateObject.getUTCFullYear() + '-' +
377
- // N.B. Javascript Date objects return months of the year indexed from
378
- // zero, while the RFC 5424 syslog standard expects months indexed from
379
- // one.
380
- leadZero(dateObject.getUTCMonth() + 1) + '-' +
381
- // N.B. Javascript Date objects return days of the month indexed from one
382
- // (unlike months of year), so this does not need any correction.
383
- leadZero(dateObject.getUTCDate()) + 'T' +
384
- // Time
385
- leadZero(dateObject.getUTCHours()) + ':' +
386
- leadZero(dateObject.getUTCMinutes()) + ':' +
387
- leadZero(dateObject.getUTCSeconds()) + '.' +
388
- leadZero(dateObject.getUTCMilliseconds()) +
389
- timeOffset;
390
-
391
- return formattedDate;
392
-
393
- }
394
-
395
-
396
- /*
397
- * Calculate the PRIVAL for a given facility
398
- * @param {Object} values Contains the three key arguments
399
- * facility {Number}/{String} the Facility Index
400
- * severity {Number}
401
- * version {Number} For RFC 5424 messages, this should be 1
402
- *
403
- * @return {String}
404
- */
405
- function calculatePrival(values) {
406
-
407
- var pri = {};
408
- // Facility
409
- if(typeof values.facility == 'string' && !values.facility.match(/^\d+$/)) {
410
- pri.facility = FacilityIndex[values.facility.toLowerCase()];
411
- } else if( parseInt(values.facility, 10) && parseInt(values.facility, 10) < 24) {
412
- pri.facility = parseInt(values.facility, 10);
413
- }
414
-
415
- //Severity
416
- if(typeof values.severity == 'string' && !values.severity.match(/^\d+$/)) {
417
- pri.severity = SeverityIndex[values.severity.toLowerCase()];
418
- } else if( parseInt(values.severity, 10) && parseInt(values.severity, 10) < 8) {
419
- pri.severity = parseInt(values.severity, 10);
420
- }
421
-
422
- if(!isNaN(pri.severity) && !isNaN(pri.facility)) {
423
- pri.prival = (pri.facility * 8) + pri.severity;
424
- pri.str = values.version ? '<' + pri.prival + '>' + values.version : '<' + pri.prival + '>';
425
- return pri.str;
426
- } else {
427
- return false;
428
- }
429
-
430
- }
431
-
432
-
433
- /*
434
- * Serialise objects into the structured data segment
435
- * @param {Object} struct The object to serialise
436
- * @return {String} structuredData the serialised data
437
- */
438
- function generateStructuredData(struct) {
439
- if(typeof struct != 'object') return false;
440
-
441
- var structuredData = '';
442
-
443
- for(var sdID in struct) {
444
- sdElement = struct[sdID];
445
- structuredData += '[' + sdID;
446
- for(var key in sdElement) {
447
- sdElement[key] = sdElement[key].toString().replace(/(\]|\\|")/g, '\\$1');
448
- structuredData += ' ' + key + '="' + sdElement[key] + '"';
449
- }
450
- structuredData += ']';
451
-
452
- }
453
-
454
- return structuredData;
455
- }
456
-
457
- if(typeof module == 'object') {
458
- module.exports = GlossyProducer;
459
- }
@@ -1,47 +0,0 @@
1
- {
2
- "name" : "glossy",
3
- "version" : "0.1.7",
4
- "description" : "Syslog parser and producer",
5
- "keywords" : ["syslog", "logging"],
6
- "url" : "http://github.com/squeeks/glossy",
7
- "main" : "./index.js",
8
- "author" : "Squeeks <privacymyass@gmail.com>",
9
- "maintainers" : [
10
- { "name" : "Squeeks", "email" : "privacymyass@gmail.com" }
11
- ],
12
- "contributors" : [
13
- { "name": "artifi", "email": "artifipl@gmail.com" },
14
- { "name": "Matt Bornski", "email": "matt@bornski.com" },
15
- { "name": "Fyodor Y", "email": "fygrave@o0o.nu" },
16
- { "name": "Stan Carney", "email": "stan.carney@rootsh.me" },
17
- { "name": "Alexander Metzner", "email": "alexander.metzner@thomann.de" },
18
- { "name": "zaphod1984", "email": "zaphod84@gmx.de" },
19
- { "name": "Eric Cornelius", "email": "eric.cornelius@mandiant.com" },
20
- { "name": "horpto", "email": "_singleton__@hackerdom.ru" }
21
- ],
22
- "directories" : {
23
- "lib": "./lib",
24
- "test": "./test"
25
- },
26
- "scripts" : {
27
- "test": "node test/runner.js"
28
- },
29
- "repository" : {
30
- "type": "git",
31
- "url": "http://github.com/squeeks/glossy.git"
32
- },
33
- "bugs" : {
34
- "url": "http://github.com/squeeks/glossy/issues"
35
- },
36
- "licenses" : [
37
- {
38
- "type": "MIT",
39
- "url": "http://www.opensource.org/licenses/MIT"
40
- }
41
- ],
42
- "engines" : { "node": ">= 0.2.5" }
43
-
44
- ,"_resolved": "https://registry.npmjs.org/glossy/-/glossy-0.1.7.tgz"
45
- ,"_integrity": "sha1-dptZhKlvYGarnqdYIkgl7mwhDws="
46
- ,"_from": "glossy@0.1.7"
47
- }
@@ -1,7 +0,0 @@
1
- var syslogParser = require('../lib/glossy/parse.js'),
2
- assert = require('assert');
3
-
4
- assert.ok(syslogParser, 'parser loaded');
5
- assert.equal(syslogParser.decideValue(1), "1");
6
- assert.equal(syslogParser.decideValue('-'), null);
7
- assert.equal(syslogParser.decideValue('ー'), 'ー');
@@ -1,24 +0,0 @@
1
- var syslogParser = require('../lib/glossy/parse.js'),
2
- assert = require('assert');
3
-
4
- assert.ok(syslogParser, 'parser loaded');
5
- assert.deepEqual(syslogParser.decodePri('<16>'), {
6
- prival: 16,
7
- facilityID: 2,
8
- severityID: 0,
9
- facility: 'mail',
10
- severity: 'emerg'
11
- });
12
-
13
- assert.deepEqual(syslogParser.decodePri('<66>1'), {
14
- prival: 66,
15
- facilityID: 8,
16
- severityID: 2,
17
- facility: 'uucp',
18
- severity: 'crit'
19
- });
20
-
21
-
22
- assert.equal(syslogParser.decodePri('1<16>'), false);
23
- assert.equal(syslogParser.decodePri('<200>'), false);
24
-
@@ -1,104 +0,0 @@
1
- var syslogParser = require('../lib/glossy/parse.js'),
2
- syslogGenerator = require('../lib/glossy/produce.js'),
3
- assert = require('assert');
4
-
5
- assert.ok(syslogParser, 'parser loaded');
6
-
7
- var gen = new syslogGenerator({type: 'bsd'});
8
-
9
- var doubleSpaced = "<13>Feb 5 17:32:18 10.0.0.99 Use the BFG!";
10
- syslogParser.parse(doubleSpaced, function(parsedMessage){
11
- var msg = gen.produce(parsedMessage);
12
- assert.equal(doubleSpaced, msg);
13
-
14
- var expectedData = {
15
- originalMessage: doubleSpaced,
16
- prival: 13,
17
- facilityID: 1,
18
- severityID: 5,
19
- facility: 'user',
20
- severity: 'notice',
21
- type: 'RFC3164',
22
- host: '10.0.0.99',
23
- message: 'Use the BFG!' };
24
-
25
- delete parsedMessage.date;
26
- delete parsedMessage.time;
27
- delete parsedMessage.timestamp;
28
-
29
- assert.deepEqual(parsedMessage, expectedData);
30
- });
31
-
32
- var withCommand = "<34>Oct 11 22:14:15 mymachine su: 'su root' failed for lonvick on /dev/pts/8";
33
- syslogParser.parse(withCommand, function(parsedMessage){
34
- var expectedData = {
35
- originalMessage: withCommand,
36
- prival: 34,
37
- facilityID: 4,
38
- severityID: 2,
39
- facility: 'auth',
40
- severity: 'crit',
41
- type: 'RFC3164',
42
- host: 'mymachine',
43
- message: "su: 'su root' failed for lonvick on /dev/pts/8" };
44
-
45
- var parsedDate = parsedMessage.time;
46
- delete parsedMessage.time;
47
-
48
- assert.equal(parsedDate.getUTCMonth(), 9);
49
- assert.equal(parsedDate.getUTCHours(), 20);
50
- assert.deepEqual(parsedMessage, expectedData);
51
-
52
- });
53
-
54
- var withDifficultTime = "<191>94103: 51w2d: DHCPD: assigned IP address 10.10.1.94 to client 0100.01c4.21d3.b3";
55
- syslogParser.parse(withDifficultTime, function(parsedMessage){
56
- var expectedData = {
57
- originalMessage: withDifficultTime,
58
- prival: 191,
59
- facilityID: 23,
60
- severityID: 7,
61
- facility: 'local7',
62
- severity: 'debug',
63
- type: 'RFC3164',
64
- time: undefined,
65
- message: '51w2d: DHCPD: assigned IP address 10.10.1.94 to client 0100.01c4.21d3.b3'};
66
-
67
- assert.deepEqual(parsedMessage, expectedData);
68
- });
69
-
70
- var withYear = "<32>Mar 05 2011 22:21:02: %ASA-6-302013: Built inbound TCP connection 401 for outside:123.123.123.123/4413 (123.123.123.123/4413) to net:BOX/25 (BOX/25)";
71
- syslogParser.parse(withYear, function(parsedMessage){
72
- var expectedData = {
73
- originalMessage: withYear,
74
- prival: 32,
75
- facilityID: 4,
76
- severityID: 0,
77
- facility: 'auth',
78
- severity: 'emerg',
79
- type: 'RFC3164',
80
- time: undefined,
81
- host: '22:21:02:',
82
- message: '%ASA-6-302013: Built inbound TCP connection 401 for outside:123.123.123.123/4413 (123.123.123.123/4413) to net:BOX/25 (BOX/25)' };
83
-
84
- assert.deepEqual(parsedMessage, expectedData);
85
- });
86
-
87
- var withSpaces = "<13>Mar 15 11:22:40 myhost.com 0 11,03/15/12,11:22:38,§ó·s,10.10.10.171,,40C6A91373B6,";
88
- syslogParser.parse(withSpaces, function(parsedMessage){
89
- var expectedData = {
90
- originalMessage: withSpaces,
91
- prival: 13,
92
- facilityID: 1,
93
- severityID: 5,
94
- facility: 'user',
95
- severity: 'notice',
96
- type: 'RFC3164',
97
- host: 'myhost.com',
98
- message: ' 0 11,03/15/12,11:22:38,§ó·s,10.10.10.171,,40C6A91373B6,' };
99
-
100
- delete parsedMessage.time;
101
- assert.deepEqual(parsedMessage, expectedData);
102
-
103
- });
104
-