UNPKG

boomcatch

Version:

A standalone, node.js-based beacon receiver for boomerang.

85 lines (66 loc) 2.18 kB
// Copyright © 2014, 2015, 2016 Springer Nature // // This file is part of boomcatch. // // Boomcatch is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Boomcatch is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with boomcatch. If not, see <http://www.gnu.org/licenses/>. /*globals require, exports */ 'use strict'; var url = require('url'), querystring = require('querystring'), check = require('check-types'), contentTypes; exports.initialise = function (options) { return send.bind(null, getProtocol(options.fwdUrl), url.parse(options.fwdUrl), normaliseMethod(options.fwdMethod)); }; function getProtocol (url) { return require(url.substr(0, url.indexOf(':'))); } function normaliseMethod (method) { if (check.unemptyString(method)) { return method; } return 'GET'; } function send (protocol, url, method, data, type, separator, callback) { var length, request; try { if (check.object(data)) { data = querystring.stringify(data); } length = data.length; if (method === 'GET') { url.path += '?' + data; data = null; } url.method = method; url.headers = { 'Content-Type': contentTypes[type || 'default'] }; request = protocol.request(url, function (response) { if (data) { request.write(data); } request.end(); response.on('close', callback.bind(null, null, length)); }); request.on('error', callback); } catch (error) { callback(error); } } contentTypes = { json: 'application/json', html: 'text/html', default: 'text/plain' };