le-acme-request.js 1.35 KB
/*!
 * le-acme-core
 * Author: Kelly Johnson
 * Copyright 2017
 * Apache-2.0 OR MIT (and hence also MPL 2.0)
 */
'use strict';

const request = require('request');
const pkgJSON = require('../package.json');
const version = pkgJSON.version;
const os = require('os');

const uaDefaults = {
  pkg: `Greenlock/${version}`
  , os: ` (${os.type()}; ${process.arch} ${os.platform()} ${os.release()})`
  , node: ` Node.js/${process.version}`
  , user: ''
}

let currentUAProps;

function getUaString() {
  let userAgent = '';
  for (let key in currentUAProps) {
    userAgent += currentUAProps[key];
  }
  return userAgent.trim();
}

function getRequest() {
  return request.defaults({
    headers: {
      'User-Agent': getUaString()
    }
  });
}

function resetUa() {
  currentUAProps = {};
  for (let key in uaDefaults) {
    currentUAProps[key] = uaDefaults[key];
  }
}

function addUaString(string) {
  currentUAProps.user += ` ${string}`;
}

function omitUaProperties(opts) {
  if (opts.all) {
    currentUAProps = {};
  } else {
    for (let key in opts) {
      currentUAProps[key] = '';
    }
  }
}

// Set our UA to begin with
resetUa();

module.exports = {
  create: function create() {
    // get deps and modify here if need be
    return getRequest();
  }
  , addUaString: addUaString
  , omitUaProperties: omitUaProperties
  , resetUa: resetUa
  , getUaString: getUaString
};