verdaccio
Version:
A lightweight private npm proxy registry
134 lines (92 loc) • 11.8 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _assert = _interopRequireDefault(require("assert"));
var _lodash = _interopRequireDefault(require("lodash"));
var _cryptoUtils = require("./crypto-utils");
var _configUtils = require("./config-utils");
var _utils = require("./utils");
var _constants = require("./constants");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
const LoggerApi = require('./logger');
const strategicConfigProps = ['uplinks', 'packages'];
const allowedEnvConfig = ['http_proxy', 'https_proxy', 'no_proxy'];
/**
* Coordinates the application configuration
*/
class Config {
// @ts-ignore
// @ts-ignore
constructor(config) {
_defineProperty(this, "logger", void 0);
_defineProperty(this, "user_agent", void 0);
_defineProperty(this, "secret", void 0);
_defineProperty(this, "uplinks", void 0);
_defineProperty(this, "packages", void 0);
_defineProperty(this, "users", void 0);
_defineProperty(this, "server_id", void 0);
_defineProperty(this, "self_path", void 0);
_defineProperty(this, "storage", void 0);
_defineProperty(this, "plugins", void 0);
_defineProperty(this, "security", void 0);
const self = this;
this.logger = LoggerApi.logger;
this.self_path = config.self_path;
this.storage = config.storage;
this.plugins = config.plugins;
for (const configProp in config) {
if (self[configProp] == null) {
self[configProp] = config[configProp];
}
} // @ts-ignore
if (_lodash.default.isNil(this.user_agent)) {
this.user_agent = (0, _utils.getUserAgent)();
} // some weird shell scripts are valid yaml files parsed as string
(0, _assert.default)(_lodash.default.isObject(config), _constants.APP_ERROR.CONFIG_NOT_VALID); // sanity check for strategic config properties
strategicConfigProps.forEach(function (x) {
if (self[x] == null) {
self[x] = {};
}
(0, _assert.default)((0, _utils.isObject)(self[x]), `CONFIG: bad "${x}" value (object expected)`);
});
this.uplinks = (0, _configUtils.sanityCheckUplinksProps)((0, _configUtils.uplinkSanityCheck)(this.uplinks));
if (_lodash.default.isNil(this.users) === false) {
this.logger.warn(`[users]: property on configuration file
is not longer supported, property being ignored`);
}
this.packages = (0, _configUtils.normalisePackageAccess)(self.packages); // loading these from ENV if aren't in config
allowedEnvConfig.forEach(envConf => {
if (!(envConf in self)) {
self[envConf] = process.env[envConf] || process.env[envConf.toUpperCase()];
}
}); // unique identifier of self server (or a cluster), used to avoid loops
// @ts-ignore
if (!this.server_id) {
this.server_id = (0, _cryptoUtils.generateRandomHexString)(6);
}
}
/**
* Check for package spec
*/
getMatchedPackagesSpec(pkgName) {
return (0, _configUtils.getMatchedPackagesSpec)(pkgName, this.packages);
}
/**
* Store or create whether receive a secret key
*/
checkSecretKey(secret) {
if (_lodash.default.isString(secret) && _lodash.default.isEmpty(secret) === false) {
this.secret = secret;
return secret;
} // it generates a secret key
// FUTURE: this might be an external secret key, perhaps within config file?
this.secret = (0, _cryptoUtils.generateRandomHexString)(32);
return this.secret;
}
}
var _default = Config;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY29uZmlnLnRzIl0sIm5hbWVzIjpbIkxvZ2dlckFwaSIsInJlcXVpcmUiLCJzdHJhdGVnaWNDb25maWdQcm9wcyIsImFsbG93ZWRFbnZDb25maWciLCJDb25maWciLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsInNlbGYiLCJsb2dnZXIiLCJzZWxmX3BhdGgiLCJzdG9yYWdlIiwicGx1Z2lucyIsImNvbmZpZ1Byb3AiLCJfIiwiaXNOaWwiLCJ1c2VyX2FnZW50IiwiaXNPYmplY3QiLCJBUFBfRVJST1IiLCJDT05GSUdfTk9UX1ZBTElEIiwiZm9yRWFjaCIsIngiLCJ1cGxpbmtzIiwidXNlcnMiLCJ3YXJuIiwicGFja2FnZXMiLCJlbnZDb25mIiwicHJvY2VzcyIsImVudiIsInRvVXBwZXJDYXNlIiwic2VydmVyX2lkIiwiZ2V0TWF0Y2hlZFBhY2thZ2VzU3BlYyIsInBrZ05hbWUiLCJjaGVja1NlY3JldEtleSIsInNlY3JldCIsImlzU3RyaW5nIiwiaXNFbXB0eSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUlBOztBQUNBOztBQU1BOztBQUNBOzs7Ozs7QUFFQSxNQUFNQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXpCOztBQUNBLE1BQU1DLG9CQUFvQixHQUFHLENBQUMsU0FBRCxFQUFZLFVBQVosQ0FBN0I7QUFDQSxNQUFNQyxnQkFBZ0IsR0FBRyxDQUFDLFlBQUQsRUFBZSxhQUFmLEVBQThCLFVBQTlCLENBQXpCO0FBRUE7QUFDQTtBQUNBOztBQUNBLE1BQU1DLE1BQU4sQ0FBa0M7QUFHaEM7QUFTQTtBQUdPQyxFQUFBQSxXQUFXLENBQUNDLE1BQUQsRUFBd0I7QUFBQTs7QUFBQTs7QUFBQTs7QUFBQTs7QUFBQTs7QUFBQTs7QUFBQTs7QUFBQTs7QUFBQTs7QUFBQTs7QUFBQTs7QUFDeEMsVUFBTUMsSUFBSSxHQUFHLElBQWI7QUFDQSxTQUFLQyxNQUFMLEdBQWNSLFNBQVMsQ0FBQ1EsTUFBeEI7QUFDQSxTQUFLQyxTQUFMLEdBQWlCSCxNQUFNLENBQUNHLFNBQXhCO0FBQ0EsU0FBS0MsT0FBTCxHQUFlSixNQUFNLENBQUNJLE9BQXRCO0FBQ0EsU0FBS0MsT0FBTCxHQUFlTCxNQUFNLENBQUNLLE9BQXRCOztBQUVBLFNBQUssTUFBTUMsVUFBWCxJQUF5Qk4sTUFBekIsRUFBaUM7QUFDL0IsVUFBSUMsSUFBSSxDQUFDSyxVQUFELENBQUosSUFBb0IsSUFBeEIsRUFBOEI7QUFDNUJMLFFBQUFBLElBQUksQ0FBQ0ssVUFBRCxDQUFKLEdBQW1CTixNQUFNLENBQUNNLFVBQUQsQ0FBekI7QUFDRDtBQUNGLEtBWHVDLENBYXhDOzs7QUFDQSxRQUFJQyxnQkFBRUMsS0FBRixDQUFRLEtBQUtDLFVBQWIsQ0FBSixFQUE4QjtBQUM1QixXQUFLQSxVQUFMLEdBQWtCLDBCQUFsQjtBQUNELEtBaEJ1QyxDQWtCeEM7OztBQUNBLHlCQUFPRixnQkFBRUcsUUFBRixDQUFXVixNQUFYLENBQVAsRUFBMkJXLHFCQUFVQyxnQkFBckMsRUFuQndDLENBcUJ4Qzs7QUFDQWhCLElBQUFBLG9CQUFvQixDQUFDaUIsT0FBckIsQ0FBNkIsVUFBVUMsQ0FBVixFQUFtQjtBQUM5QyxVQUFJYixJQUFJLENBQUNhLENBQUQsQ0FBSixJQUFXLElBQWYsRUFBcUI7QUFDbkJiLFFBQUFBLElBQUksQ0FBQ2EsQ0FBRCxDQUFKLEdBQVUsRUFBVjtBQUNEOztBQUVELDJCQUFPLHFCQUFTYixJQUFJLENBQUNhLENBQUQsQ0FBYixDQUFQLEVBQTJCLGdCQUFlQSxDQUFFLDJCQUE1QztBQUNELEtBTkQ7QUFRQSxTQUFLQyxPQUFMLEdBQWUsMENBQXdCLG9DQUFrQixLQUFLQSxPQUF2QixDQUF4QixDQUFmOztBQUVBLFFBQUlSLGdCQUFFQyxLQUFGLENBQVEsS0FBS1EsS0FBYixNQUF3QixLQUE1QixFQUFtQztBQUNqQyxXQUFLZCxNQUFMLENBQVllLElBQVosQ0FBa0I7QUFDeEIsc0RBRE07QUFFRDs7QUFFRCxTQUFLQyxRQUFMLEdBQWdCLHlDQUF1QmpCLElBQUksQ0FBQ2lCLFFBQTVCLENBQWhCLENBckN3QyxDQXVDeEM7O0FBQ0FyQixJQUFBQSxnQkFBZ0IsQ0FBQ2dCLE9BQWpCLENBQTBCTSxPQUFELElBQW1CO0FBQzFDLFVBQUksRUFBRUEsT0FBTyxJQUFJbEIsSUFBYixDQUFKLEVBQXdCO0FBQ3RCQSxRQUFBQSxJQUFJLENBQUNrQixPQUFELENBQUosR0FBZ0JDLE9BQU8sQ0FBQ0MsR0FBUixDQUFZRixPQUFaLEtBQXdCQyxPQUFPLENBQUNDLEdBQVIsQ0FBWUYsT0FBTyxDQUFDRyxXQUFSLEVBQVosQ0FBeEM7QUFDRDtBQUNGLEtBSkQsRUF4Q3dDLENBOEN4QztBQUNBOztBQUNBLFFBQUksQ0FBQyxLQUFLQyxTQUFWLEVBQXFCO0FBQ25CLFdBQUtBLFNBQUwsR0FBaUIsMENBQXdCLENBQXhCLENBQWpCO0FBQ0Q7QUFDRjtBQUVEO0FBQ0Y7QUFDQTs7O0FBQ1NDLEVBQUFBLHNCQUFzQixDQUFDQyxPQUFELEVBQWtDO0FBQzdELFdBQU8seUNBQXVCQSxPQUF2QixFQUFnQyxLQUFLUCxRQUFyQyxDQUFQO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7OztBQUNTUSxFQUFBQSxjQUFjLENBQUNDLE1BQUQsRUFBeUI7QUFDNUMsUUFBSXBCLGdCQUFFcUIsUUFBRixDQUFXRCxNQUFYLEtBQXNCcEIsZ0JBQUVzQixPQUFGLENBQVVGLE1BQVYsTUFBc0IsS0FBaEQsRUFBdUQ7QUFDckQsV0FBS0EsTUFBTCxHQUFjQSxNQUFkO0FBQ0EsYUFBT0EsTUFBUDtBQUNELEtBSjJDLENBSzVDO0FBQ0E7OztBQUNBLFNBQUtBLE1BQUwsR0FBYywwQ0FBd0IsRUFBeEIsQ0FBZDtBQUNBLFdBQU8sS0FBS0EsTUFBWjtBQUNEOztBQXZGK0I7O2VBMEZuQjdCLE0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgeyBQYWNrYWdlTGlzdCwgQ29uZmlnIGFzIEFwcENvbmZpZywgU2VjdXJpdHksIExvZ2dlciB9IGZyb20gJ0B2ZXJkYWNjaW8vdHlwZXMnO1xuaW1wb3J0IHsgTWF0Y2hlZFBhY2thZ2UsIFN0YXJ0VXBDb25maWcgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVJhbmRvbUhleFN0cmluZyB9IGZyb20gJy4vY3J5cHRvLXV0aWxzJztcbmltcG9ydCB7XG4gIGdldE1hdGNoZWRQYWNrYWdlc1NwZWMsXG4gIG5vcm1hbGlzZVBhY2thZ2VBY2Nlc3MsXG4gIHNhbml0eUNoZWNrVXBsaW5rc1Byb3BzLFxuICB1cGxpbmtTYW5pdHlDaGVja1xufSBmcm9tICcuL2NvbmZpZy11dGlscyc7XG5pbXBvcnQgeyBnZXRVc2VyQWdlbnQsIGlzT2JqZWN0IH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBBUFBfRVJST1IgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmNvbnN0IExvZ2dlckFwaSA9IHJlcXVpcmUoJy4vbG9nZ2VyJyk7XG5jb25zdCBzdHJhdGVnaWNDb25maWdQcm9wcyA9IFsndXBsaW5rcycsICdwYWNrYWdlcyddO1xuY29uc3QgYWxsb3dlZEVudkNvbmZpZyA9IFsnaHR0cF9wcm94eScsICdodHRwc19wcm94eScsICdub19wcm94eSddO1xuXG4vKipcbiAqIENvb3JkaW5hdGVzIHRoZSBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uXG4gKi9cbmNsYXNzIENvbmZpZyBpbXBsZW1lbnRzIEFwcENvbmZpZyB7XG4gIHB1YmxpYyBsb2dnZXI6IExvZ2dlcjtcbiAgcHVibGljIHVzZXJfYWdlbnQ6IHN0cmluZztcbiAgLy8gQHRzLWlnbm9yZVxuICBwdWJsaWMgc2VjcmV0OiBzdHJpbmc7XG4gIHB1YmxpYyB1cGxpbmtzOiBhbnk7XG4gIHB1YmxpYyBwYWNrYWdlczogUGFja2FnZUxpc3Q7XG4gIHB1YmxpYyB1c2VyczogYW55O1xuICBwdWJsaWMgc2VydmVyX2lkOiBzdHJpbmc7XG4gIHB1YmxpYyBzZWxmX3BhdGg6IHN0cmluZztcbiAgcHVibGljIHN0b3JhZ2U6IHN0cmluZyB8IHZvaWQ7XG4gIHB1YmxpYyBwbHVnaW5zOiBzdHJpbmcgfCB2b2lkO1xuICAvLyBAdHMtaWdub3JlXG4gIHB1YmxpYyBzZWN1cml0eTogU2VjdXJpdHk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvbmZpZzogU3RhcnRVcENvbmZpZykge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHRoaXMubG9nZ2VyID0gTG9nZ2VyQXBpLmxvZ2dlcjtcbiAgICB0aGlzLnNlbGZfcGF0aCA9IGNvbmZpZy5zZWxmX3BhdGg7XG4gICAgdGhpcy5zdG9yYWdlID0gY29uZmlnLnN0b3JhZ2U7XG4gICAgdGhpcy5wbHVnaW5zID0gY29uZmlnLnBsdWdpbnM7XG5cbiAgICBmb3IgKGNvbnN0IGNvbmZpZ1Byb3AgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoc2VsZltjb25maWdQcm9wXSA9PSBudWxsKSB7XG4gICAgICAgIHNlbGZbY29uZmlnUHJvcF0gPSBjb25maWdbY29uZmlnUHJvcF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmIChfLmlzTmlsKHRoaXMudXNlcl9hZ2VudCkpIHtcbiAgICAgIHRoaXMudXNlcl9hZ2VudCA9IGdldFVzZXJBZ2VudCgpO1xuICAgIH1cblxuICAgIC8vIHNvbWUgd2VpcmQgc2hlbGwgc2NyaXB0cyBhcmUgdmFsaWQgeWFtbCBmaWxlcyBwYXJzZWQgYXMgc3RyaW5nXG4gICAgYXNzZXJ0KF8uaXNPYmplY3QoY29uZmlnKSwgQVBQX0VSUk9SLkNPTkZJR19OT1RfVkFMSUQpO1xuXG4gICAgLy8gc2FuaXR5IGNoZWNrIGZvciBzdHJhdGVnaWMgY29uZmlnIHByb3BlcnRpZXNcbiAgICBzdHJhdGVnaWNDb25maWdQcm9wcy5mb3JFYWNoKGZ1bmN0aW9uICh4KTogdm9pZCB7XG4gICAgICBpZiAoc2VsZlt4XSA9PSBudWxsKSB7XG4gICAgICAgIHNlbGZbeF0gPSB7fTtcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KGlzT2JqZWN0KHNlbGZbeF0pLCBgQ09ORklHOiBiYWQgXCIke3h9XCIgdmFsdWUgKG9iamVjdCBleHBlY3RlZClgKTtcbiAgICB9KTtcblxuICAgIHRoaXMudXBsaW5rcyA9IHNhbml0eUNoZWNrVXBsaW5rc1Byb3BzKHVwbGlua1Nhbml0eUNoZWNrKHRoaXMudXBsaW5rcykpO1xuXG4gICAgaWYgKF8uaXNOaWwodGhpcy51c2VycykgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKGBbdXNlcnNdOiBwcm9wZXJ0eSBvbiBjb25maWd1cmF0aW9uIGZpbGVcbiAgICAgIGlzIG5vdCBsb25nZXIgc3VwcG9ydGVkLCBwcm9wZXJ0eSBiZWluZyBpZ25vcmVkYCk7XG4gICAgfVxuXG4gICAgdGhpcy5wYWNrYWdlcyA9IG5vcm1hbGlzZVBhY2thZ2VBY2Nlc3Moc2VsZi5wYWNrYWdlcyk7XG5cbiAgICAvLyBsb2FkaW5nIHRoZXNlIGZyb20gRU5WIGlmIGFyZW4ndCBpbiBjb25maWdcbiAgICBhbGxvd2VkRW52Q29uZmlnLmZvckVhY2goKGVudkNvbmYpOiB2b2lkID0+IHtcbiAgICAgIGlmICghKGVudkNvbmYgaW4gc2VsZikpIHtcbiAgICAgICAgc2VsZltlbnZDb25mXSA9IHByb2Nlc3MuZW52W2VudkNvbmZdIHx8IHByb2Nlc3MuZW52W2VudkNvbmYudG9VcHBlckNhc2UoKV07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyB1bmlxdWUgaWRlbnRpZmllciBvZiBzZWxmIHNlcnZlciAob3IgYSBjbHVzdGVyKSwgdXNlZCB0byBhdm9pZCBsb29wc1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAoIXRoaXMuc2VydmVyX2lkKSB7XG4gICAgICB0aGlzLnNlcnZlcl9pZCA9IGdlbmVyYXRlUmFuZG9tSGV4U3RyaW5nKDYpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBmb3IgcGFja2FnZSBzcGVjXG4gICAqL1xuICBwdWJsaWMgZ2V0TWF0Y2hlZFBhY2thZ2VzU3BlYyhwa2dOYW1lOiBzdHJpbmcpOiBNYXRjaGVkUGFja2FnZSB7XG4gICAgcmV0dXJuIGdldE1hdGNoZWRQYWNrYWdlc1NwZWMocGtnTmFtZSwgdGhpcy5wYWNrYWdlcyk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcmUgb3IgY3JlYXRlIHdoZXRoZXIgcmVjZWl2ZSBhIHNlY3JldCBrZXlcbiAgICovXG4gIHB1YmxpYyBjaGVja1NlY3JldEtleShzZWNyZXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKF8uaXNTdHJpbmcoc2VjcmV0KSAmJiBfLmlzRW1wdHkoc2VjcmV0KSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuc2VjcmV0ID0gc2VjcmV0O1xuICAgICAgcmV0dXJuIHNlY3JldDtcbiAgICB9XG4gICAgLy8gaXQgZ2VuZXJhdGVzIGEgc2VjcmV0IGtleVxuICAgIC8vIEZVVFVSRTogdGhpcyBtaWdodCBiZSBhbiBleHRlcm5hbCBzZWNyZXQga2V5LCBwZXJoYXBzIHdpdGhpbiBjb25maWcgZmlsZT9cbiAgICB0aGlzLnNlY3JldCA9IGdlbmVyYXRlUmFuZG9tSGV4U3RyaW5nKDMyKTtcbiAgICByZXR1cm4gdGhpcy5zZWNyZXQ7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29uZmlnO1xuIl19