Something went wrong. Try again.
A Twitter-Bot that is going to increase your followers.
Something went wrong. Try again.
2.7 kB · 112 lines
JavaScript
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113'use strict'
var uuid = require('uuid/v4')var CombinedStream = require('combined-stream')var isstream = require('isstream')var Buffer = require('safe-buffer').Buffer
function Multipart (request) { this.request = request this.boundary = uuid() this.chunked = false this.body = null}
Multipart.prototype.isChunked = function (options) { var self = this var chunked = false var parts = options.data || options
if (!parts.forEach) { self.request.emit('error', new Error('Argument error, options.multipart.')) }
if (options.chunked !== undefined) { chunked = options.chunked }
if (self.request.getHeader('transfer-encoding') === 'chunked') { chunked = true }
if (!chunked) { parts.forEach(function (part) { if (typeof part.body === 'undefined') { self.request.emit('error', new Error('Body attribute missing in multipart.')) } if (isstream(part.body)) { chunked = true } }) }
return chunked}
Multipart.prototype.setHeaders = function (chunked) { var self = this
if (chunked && !self.request.hasHeader('transfer-encoding')) { self.request.setHeader('transfer-encoding', 'chunked') }
var header = self.request.getHeader('content-type')
if (!header || header.indexOf('multipart') === -1) { self.request.setHeader('content-type', 'multipart/related; boundary=' + self.boundary) } else { if (header.indexOf('boundary') !== -1) { self.boundary = header.replace(/.*boundary=([^\s;]+).*/, '$1') } else { self.request.setHeader('content-type', header + '; boundary=' + self.boundary) } }}
Multipart.prototype.build = function (parts, chunked) { var self = this var body = chunked ? new CombinedStream() : []
function add (part) { if (typeof part === 'number') { part = part.toString() } return chunked ? body.append(part) : body.push(Buffer.from(part)) }
if (self.request.preambleCRLF) { add('\r\n') }
parts.forEach(function (part) { var preamble = '--' + self.boundary + '\r\n' Object.keys(part).forEach(function (key) { if (key === 'body') { return } preamble += key + ': ' + part[key] + '\r\n' }) preamble += '\r\n' add(preamble) add(part.body) add('\r\n') }) add('--' + self.boundary + '--')
if (self.request.postambleCRLF) { add('\r\n') }
return body}
Multipart.prototype.onRequest = function (options) { var self = this
var chunked = self.isChunked(options) var parts = options.data || options
self.setHeaders(chunked) self.chunked = chunked self.body = self.build(parts, chunked)}
exports.Multipart = Multipart