Skip to content

Commit e90a76a

Browse files
committed
Updated: Certificate
Added method: getBuffer() Added Test: to test GetBuffer()
1 parent b16916a commit e90a76a

4 files changed

Lines changed: 159 additions & 16 deletions

File tree

lib/form_data.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,32 @@ FormData.prototype.getBoundary = function() {
313313
return this._boundary;
314314
};
315315

316+
FormData.prototype.getBuffer = function() {
317+
var dataBuffer = new Buffer.alloc( 0 );
318+
var boundary = this.getBoundary();
319+
320+
// Create the form content. Add Line breaks to the end of data.
321+
for (var i = 0, len = this._streams.length; i < len; i++) {
322+
if (typeof this._streams[i] !== 'function') {
323+
324+
// Add content to the buffer.
325+
if(Buffer.isBuffer(this._streams[i])) {
326+
dataBuffer = Buffer.concat( [dataBuffer, this._streams[i]]);
327+
}else {
328+
dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(this._streams[i])]);
329+
}
330+
331+
// Add break after content.
332+
if (typeof this._streams[i] !== 'string' || this._streams[i].substring( 2, boundary.length + 2 ) !== boundary) {
333+
dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(FormData.LINE_BREAK)] );
334+
}
335+
}
336+
}
337+
338+
// Add the footer and return the Buffer object.
339+
return Buffer.concat( [dataBuffer, Buffer.from(this._lastBoundary())] );
340+
};
341+
316342
FormData.prototype._generateBoundary = function() {
317343
// This generates a 50 character boundary similar to those used by Firefox.
318344
// They are optimized for boyer-moore parsing.

test/fixture/cert.pem

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,32 @@
11
-----BEGIN CERTIFICATE-----
2-
MIIBnDCCAUYCCQCgIldFYidw0zANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJV
3-
UzELMAkGA1UECBMCQ0ExEjAQBgNVBAcTCVBhbG8gQWx0bzERMA8GA1UEChMIRm9y
4-
bURhdGExEjAQBgNVBAMTCWxvY2FsaG9zdDAeFw0xNTA2MTMxMzA3MTBaFw00MjEw
5-
MjgxMzA3MTBaMFUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTESMBAGA1UEBxMJ
6-
UGFsbyBBbHRvMREwDwYDVQQKEwhGb3JtRGF0YTESMBAGA1UEAxMJbG9jYWxob3N0
7-
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOkE8JJzLQbVEo/vRVRqiwNEbiuEooJA
8-
099h1IJLtsPJVphSDBTtE0FLB0YIzT7bG44Drm/975XEZjoQ9TmYbTMCAwEAATAN
9-
BgkqhkiG9w0BAQUFAANBALSDmvKXb4cE622OdSRrDsnr8xUosetsAGSlGauWBKgc
10-
DNQhP6wSQHTAJT8wiVgSPYwnhcnzkZlwzdfMHMtzFIc=
2+
MIIFfzCCA2egAwIBAgIJALeHtgIY/UKcMA0GCSqGSIb3DQEBCwUAMFUxCzAJBgNV
3+
BAYTAk5MMQswCQYDVQQIDAJPVjESMBAGA1UEBwwJUGFsbyBBbHRvMREwDwYDVQQK
4+
DAhGb3JtRGF0YTESMBAGA1UEAwwJbG9jYWxob3N0MCAXDTE5MDMyMDExNTI1NVoY
5+
DzIwNTkwMzEwMTE1MjU1WjBVMQswCQYDVQQGEwJOTDELMAkGA1UECAwCT1YxEjAQ
6+
BgNVBAcMCVBhbG8gQWx0bzERMA8GA1UECgwIRm9ybURhdGExEjAQBgNVBAMMCWxv
7+
Y2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALHtx1z8nZIr
8+
kQo8UbeLxv+S38xHwYSSCHzJBAXGx6PMTFcXdvDvvFrbf772/Gq76tfWtthao+nu
9+
0n14aWepVSucltRUpfwTXau5knoN5J9EL+FbLwfFIUGLEdjnky7UOdtFLN2SYM0B
10+
O5/+Nk+ywtBMzXMXHb0sJ0lrNPM8AOD57sIJ/KcqjG33bCgx0GLxuLmLwNupvDNp
11+
p3lIvghgTKIOWRKyVOGPpM25DNvI8OT+ldj0KV7y3xJPtNdMcu0bZ+fapJSb48UN
12+
koiQb8jxRnl295MAb82piohsLeZE0HGpwT/CWwvUxqgBahDJDmYVBaK9JVEvcMiz
13+
wt+wy+xHd9TrgyfrHmBuHKWpgQPbumfWh2OzEeyF1N9dbAbgQ7Tmo/L6zz576Q2x
14+
7Ee5tuyX1apEEpXM5fHxMcM04kHuyz3wqUe4U//LOPmoJ4oAUpkMC/8QMluAFK4i
15+
1yZAw1kB0B4UbLkTIqJYvI3uEzzWe4Q33kVn1AyNBOLXw79t4ZFfhEf6oU0Zjyqp
16+
OBNs81imLtgQU4L+D1Rt6aIL8BMhpSM9dGG2ujXqwhZnqtgVuSMY8gI7N+Hjg433
17+
hdxbvpzl0HjnruWvoXDKOWv08sYJhtMqclRQRGDSmxdwps+f5Iocap9AN2wfDmeO
18+
cHJohZyw+8l/L2MAp19xJGfN2wRsVrOrAgMBAAGjUDBOMB0GA1UdDgQWBBR+hImn
19+
BxHZ03bONEdB6JPPyo0kGDAfBgNVHSMEGDAWgBR+hImnBxHZ03bONEdB6JPPyo0k
20+
GDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4ICAQAhpfrm79WQuMbudbIz
21+
pOjp26OO51cM4CKzH2vUXdgzjNEDHL2JwN0MiLHK0vwT5SkH1uoHRvECHIG8FHrA
22+
t9ky7W0Xw4vza9pC5GJEcCHVFGEaPJVXA7+fg5JCjejeWV1PU1LsMLBibbikVFUN
23+
JXTbKLL1EWbDLSX4ICJEyc3fptYB/w/lpDZqiKF2uIm2LSubo+fRg3D1mCexsXv1
24+
nl2g9eZkx6uhUl7yq8o5lB6Ejzr1t5npA8w0RlYpvMwagqSfblM7UgvcrEW6Cusl
25+
ICELrCY/mfZwKvTgIRrj4Te19ARgXwkrG0KxcgDb+UCBaIca79t53AbpHVVrVPh6
26+
hXHOQrRMjf0taFILPJYn6RcC08zx7FCet4x5WqX4900yRZX7Lr0VLDZI8/c1gf0j
27+
PsTA9JqARiQG8qeM5abLxSiXGPypYNkBlbf9H8WDpJgxRNK9RszogNhKdPkYzv0b
28+
HgHrAOels9u3roR+wNVIy2PX+LFeSnfUCJjJZEeqs5ewpP9vgBxVIzszO2lZu1oq
29+
uUEoFRPnIDA3TsYLzjw9MNMH0CeKUv+83QX7C9UuSyNdKZIgq2z/ABclgBtyFDSX
30+
6EAL5WP55CCCiIG93A0y84rALIS7mPVBzVnxzRY96M2Ifs8GCwMi2Q5ykcVIPkyR
31+
HVi0h+PsbIWC9+H9Ljl2vgu0cw==
1132
-----END CERTIFICATE-----

test/fixture/key.pem

Lines changed: 49 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,51 @@
11
-----BEGIN RSA PRIVATE KEY-----
2-
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
951
-----END RSA PRIVATE KEY-----
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
var common = require('../common');
2+
var assert = common.assert;
3+
4+
var FormData = require(common.dir.lib + '/form_data');
5+
6+
(function testTypeIsBuffer() {
7+
var form = new FormData();
8+
form.append( 'String', 'Some random string' );
9+
var buffer = form.getBuffer();
10+
11+
assert.equal(typeof buffer === 'object' && Buffer.isBuffer(buffer), true);
12+
})();
13+
14+
(function testBufferIsValid() {
15+
var form = new FormData();
16+
17+
var stringName = 'String';
18+
var stringValue = 'This is a random string';
19+
var intName = 'Int';
20+
var intValue = 1549873167987;
21+
var bufferName = 'Buffer';
22+
var bufferValue = Buffer.from([0x00,0x4a,0x45,0x46,0x46,0x52,0x45,0x59,0x255]);
23+
24+
// Fill the formData object
25+
form.append( stringName, stringValue );
26+
form.append( intName, intValue );
27+
form.append( bufferName, bufferValue );
28+
29+
// Get the resulting Buffer
30+
var buffer = form.getBuffer();
31+
32+
// Generate expected code.
33+
var boundary = form.getBoundary();
34+
var expected = Buffer.concat( [
35+
Buffer.from( '--' + boundary + FormData.LINE_BREAK +
36+
'Content-Disposition: form-data; name="' + stringName + '"' + FormData.LINE_BREAK +
37+
FormData.LINE_BREAK +
38+
stringValue + FormData.LINE_BREAK +
39+
'--' + boundary + FormData.LINE_BREAK +
40+
'Content-Disposition: form-data; name="' + intName + '"' + FormData.LINE_BREAK +
41+
FormData.LINE_BREAK +
42+
intValue + FormData.LINE_BREAK +
43+
'--' + boundary + FormData.LINE_BREAK +
44+
'Content-Disposition: form-data; name="' + bufferName + '"' + FormData.LINE_BREAK +
45+
'Content-Type: application/octet-stream' + FormData.LINE_BREAK +
46+
FormData.LINE_BREAK),
47+
bufferValue,
48+
Buffer.from( FormData.LINE_BREAK + '--' + boundary + '--' + FormData.LINE_BREAK )
49+
] );
50+
51+
// Test if the buffer content, equals the expected buffer.
52+
assert.equal(buffer.length, expected.length);
53+
assert.equal(buffer.toString('hex'), expected.toString('hex'));
54+
})();

0 commit comments

Comments
 (0)