API Docs for: 0.0.4
Show:

File: lib\configuration\index.js

var Bunyan = require("Bunyan");

var settings = require("./settings.json");

var AuthorizationBasic = require("../security/authentication-basic");
var AuthorizationToken = require("../security/authentication-token");

var JIRAConnection = require("../jira/connection.js");
var SNowConnection = require("../serviceNow/connection.js");
var GLabConnection = require("../gitlab/connection.js");


var DEFAULT_RequestSettings = {
	"maxRetries": 3
};

var DEFAULT_EndpointSettings = {
	"listen": 7000
};

/**
 * 
 * @class Configuration
 * @constructor
 * @static
 * @deprecated Use {{#crossLink "Connections"}}{{/crossLink}} instead.
 */
module.exports = (function() {
	var configuration = {};
	var loading;

	var buildAuthentication = function(details) {
		switch(details.type) {
			case "basic":
				return new AuthorizationBasic(details.username, details.password);
			case "token":
				return new AuthorizationToken(details.field, details.token, details.path);
			default:
				throw new Error("Unknown authentication type");
		}
	};

	/**
	 * The package.json information
	 * @property package
	 * @type Object
	 */
	configuration.package = require("../../package.json");

	/**
	 * Configuration settings for manage requests out to systems.
	 * @property request
	 * @type Object
	 */
	configuration.requests = DEFAULT_RequestSettings;
	if(settings.requests) {
		Object.assign(configuration.requests, settings.request);
	}

	/**
	 * Configuration settings for the REST endpoint. Only configured if endpoint is defined in settings.
	 * @property endpoint
	 * @type Object
	 */
	if(settings.endpoint) {
		configuration.endpoint = DEFAULT_EndpointSettings;
		if(settings.requests) {
			Object.assign(configuration.endpoint, settings.endpoint);
		}
	} else {
		console.warn("Default REST Endpoint configuration omitted due to omitted declaration");
	}

	/**
	 * 
	 * @property log
	 * @type Bunyan
	 */
	if(settings.log) {
		configuration.log = settings.log;
		configuration.log.name = configuration.log.name || configuration.package.name;
		configuration.log.version = configuration.log.version || configuration.package.version;
		configuration.log = Bunyan.createLogger(configuration.log);
	} else {
		configuration.log = console;
		console.debug = console.debug || console.log;
		console.info = console.info || console.log;
		console.warn = console.warn || console.log;
		console.error = console.error || console.log;
		console.fatal = console.fatal || console.log;
	}

	/**
	 * If a valid JIRA property is present on the settings object, this
	 * property is initialized as the default JIRA handler.
	 * @property jira
	 * @type JIRAConnection
	 */
	if(settings.jira && settings.jira.name && settings.jira.uri && settings.jira.authentication) {
		settings.jira.requests = configuration.requests;
		loading = buildAuthentication(settings.jira.authentication);
		configuration.jira = new JIRAConnection(settings.jira.name, settings.jira.uri, loading, configuration.log, settings.jira);
	} else{
		console.warn("Default JIRA Connection Omitted:\n" + JSON.stringify(settings.jira, null, 4));
	}

	/**
	 * If a valid Service-Now property is present on the settings object, this
	 * property is initialized as the default Service-Now handler.
	 * @property snow
	 * @type SNowConnection
	 */
	if(settings.snow && settings.snow.name && settings.snow.uri && settings.snow.authentication) {
		settings.snow.requests = configuration.requests;
		loading = buildAuthentication(settings.snow.authentication);
		configuration.snow = new SNowConnection(settings.snow.name, settings.snow.uri, loading, configuration.log, settings.snow);
	} else{
		console.warn("Default SNow Connection Omitted:\n" + JSON.stringify(settings.snow, null, 4));
	}

	/**
	 * If a valid GitLab property is present on the settings object, this
	 * property is initialized as the default GitLab handler.
	 * @property gitlab
	 * @type GLabConnection
	 */
	if(settings.gitlab && settings.gitlab.name && settings.gitlab.uri && settings.gitlab.authentication) {
		settings.gitlab.requests = configuration.requests;
		loading = buildAuthentication(settings.gitlab.authentication);
		configuration.gitlab = new GLabConnection(settings.gitlab.name, settings.gitlab.uri, loading, configuration.log, settings.gitlab);
	} else{
		console.warn("Default Gitlab Connection Omitted:\n" + JSON.stringify(settings.gitlab, null, 4));
	}

	return configuration;
})();