trello-node-api
Version:
Trello Node API wrapper
46 lines (38 loc) • 1.56 kB
JavaScript
;
var Buffer = require('safe-buffer').Buffer;
// Method for formatting HTTP body for the multipart/form-data specification
// Mostly taken from Fermata.js
// https://github.com/natevw/fermata/blob/5d9732a33d776ce925013a265935facd1626cc88/fermata.js#L315-L343
function multipartDataGenerator(method, data, headers) {
var segno = (Math.round(Math.random() * 1e16) + Math.round(Math.random() * 1e16)).toString();
headers['Content-Type'] = ('multipart/form-data; boundary=' + segno);
var buffer = new Buffer(0);
function push(l) {
var prevBuffer = buffer;
var newBuffer = (l instanceof Buffer) ? l : new Buffer(l);
buffer = new Buffer(prevBuffer.length + newBuffer.length + 2);
prevBuffer.copy(buffer);
newBuffer.copy(buffer, prevBuffer.length);
buffer.write('\r\n', buffer.length - 2);
}
function q(s) {
return '"' + s.replace(/"|"/g, '%22').replace(/\r\n|\r|\n/g, ' ') + '"';
}
for (var k in data) {
var v = data[k];
push('--' + segno);
if (v.hasOwnProperty('data')) {
push('Content-Disposition: form-data; name=' + q(k) + '; filename=' + q(v.name || 'blob'));
push('Content-Type: ' + (v.type || 'application/octet-stream'));
push('');
push(v.data);
} else {
push('Content-Disposition: form-data; name=' + q(k));
push('');
push(v);
}
}
push('--' + segno + '--');
return buffer;
}
module.exports = multipartDataGenerator;