Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
'use strict';

function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }

var _require = require('express'),
    Router = _require.Router;

var request = require('request');
var bodyParser = require('body-parser');
var querystring = require('querystring');

var _require2 = require('url'),
    parse = _require2.parse;

var cookieParser = require('cookie-parser');

var _require3 = require('./proxyHelper'),
    extendSetCookieHeadersForLocalDomain = _require3.extendSetCookieHeadersForLocalDomain;

var proxy = function proxy(API) {
  return function (req, res) {
    var url = '' + API + parse(req.originalUrl).path;

    // extract headers, except `host`
    // eslint-disable-next-line no-unused-vars

    var _req$headers = req.headers,
        host = _req$headers.host,
        headers = _objectWithoutProperties(_req$headers, ['host']);

    var method = req.method;

    var body = void 0;
    var encoding = void 0;
    if (req.body && req.headers['content-type'] === 'application/x-www-form-urlencoded') {
      body = querystring.stringify(req.body);
    }
    if (req.body && req.headers['content-type'] === 'application/json') {
      body = JSON.stringify(req.body);
    }
    if (req.headers['content-type'] === 'image/png' || req.headers['content-type'] === 'image/jpeg' || req.headers['content-type'] === 'application/octet-stream') {
      body = req.rawBody;
      // to avoid utf8 encoding for buffer
      encoding = null;
    }

    headers.origin = API;

    console.log('Proxying ' + method + ': ' + url);

    // make a new request, pipe result to response
    // encoding by default is undefined
    // https://www.npmjs.com/package/request
    request({ url: url, headers: headers, method: method, body: body, encoding: encoding }).on('error', function (err) {
      // handle pipe errors
      req.next(err);
    }).on('response', extendSetCookieHeadersForLocalDomain.bind(null, req.hostname)).pipe(res);
  };
};

var rawBodySaver = function rawBodySaver(req, res, buf) {
  if (buf && buf.length) {
    req.rawBody = buf;
  }
};

module.exports = function (_ref) {
  var API = _ref.API;

  if (process.env.NODE_ENV === 'development') {
    process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
  }
  var middleware = Router();

  middleware.use(['/mydoodle/upgradeGoogleCodeAndConnect.html', '/mydoodle/upgradeOutlookComCodeAndConnect.html'], bodyParser.json(), proxy(API));
  middleware.use(['/api/v2.0/users/oauth/facebook', '/api/v2.0/users/oauth/google', '/api/v2.0/users/microsoft-code-for-login'], bodyParser.urlencoded({ extended: true }), cookieParser(), proxy(API));
  middleware.use(['/api/v2.0/users/me/avatar', '/api/v2.0/users/me/branding/logo', '/api/v2.0/users/me/branding/background'], bodyParser.raw({ limit: '5mb', verify: rawBodySaver, type: '*/*' }), proxy(API));
  middleware.use('/api/v2.0/users', bodyParser.json(), proxy(API));
  middleware.use('/np/users', bodyParser.urlencoded({ extended: true }), proxy(API));
  middleware.use('/api/v2.0/premium', proxy(API));

  return middleware;
};