From 957b71e8bb5df1b710f357ee242645a7326c5715 Mon Sep 17 00:00:00 2001 From: "Juan Picado @jotadeveloper" Date: Sat, 30 Jun 2018 22:39:06 +0200 Subject: [PATCH] refactor: user agent on config remove logic users prop is not longer supported https://github.com/verdaccio/verdaccio/commit/67c63892d392422f27dfecb44107d18785a3823f#diff-574051ef1fbe43a2746c5cd241d631c7 --- src/lib/config.js | 27 +++++++++++++-------------- src/lib/constants.js | 4 ++++ src/lib/utils.js | 9 +++++++++ test/integration/config_nocache.yaml | 4 ---- test/unit/api/config.spec.js | 1 + 5 files changed, 27 insertions(+), 18 deletions(-) diff --git a/src/lib/config.js b/src/lib/config.js index 77fcbad82..43027eb50 100644 --- a/src/lib/config.js +++ b/src/lib/config.js @@ -1,14 +1,14 @@ import {generateRandomHexString} from './crypto-utils'; import {normalisePackageAccess} from './config-utils'; +import {getUserAgent} from './utils'; +import {APP_ERROR} from './constants'; const assert = require('assert'); const _ = require('lodash'); const minimatch = require('minimatch'); const Utils = require('./utils'); -const pkginfo = require('pkginfo')(module); // eslint-disable-line no-unused-vars -const pkgVersion = module.exports.version; -const pkgName = module.exports.name; +const LoggerApi = require('./logger'); const strategicConfigProps = ['users', 'uplinks', 'packages']; const allowedEnvConfig = ['http_proxy', 'https_proxy', 'no_proxy']; @@ -29,6 +29,7 @@ class Config { */ constructor(config) { const self = this; + this.logger = LoggerApi.logger; const users = { all: true, anonymous: true, @@ -43,16 +44,18 @@ class Config { } } - if (!self.user_agent) { - self.user_agent = `${pkgName}/${pkgVersion}`; + if (_.isNil(this.user_agent)) { + this.user_agent = getUserAgent(); } // some weird shell scripts are valid yaml files parsed as string - assert.equal(typeof(config), 'object', 'CONFIG: it doesn\'t look like a valid config file'); + assert(_.isObject(config), APP_ERROR.CONFIG_NOT_VALID); // sanity check for strategic config properties strategicConfigProps.forEach(function(x) { - if (self[x] == null) self[x] = {}; + if (self[x] == null) { + self[x] = {}; + } assert(Utils.isObject(self[x]), `CONFIG: bad "${x}" value (object expected)`); }); @@ -73,13 +76,9 @@ class Config { } } - for (let user in self.users) { - if (Object.prototype.hasOwnProperty.call(self.users, user)) { - assert(self.users[user].password, 'CONFIG: no password for user: ' + user); - assert(typeof(self.users[user].password) === 'string' && - self.users[user].password.match(/^[a-f0-9]{40}$/) - , 'CONFIG: wrong password format for user: ' + user + ', sha1 expected'); - } + if (_.isNil(this.users) === false) { + this.logger.warn(`[users]: property on configuration file + is not longer supported, property being ignored`); } for (let uplink in self.uplinks) { diff --git a/src/lib/constants.js b/src/lib/constants.js index 138ac0a5e..0a813a5fc 100644 --- a/src/lib/constants.js +++ b/src/lib/constants.js @@ -83,6 +83,10 @@ export const API_ERROR = { WEB_DISABLED: 'Web interface is disabled in the config file', }; +export const APP_ERROR = { + CONFIG_NOT_VALID: 'CONFIG: it does not look like a valid config file', +}; + export const DEFAULT_NO_README = 'ERROR: No README data found!'; diff --git a/src/lib/utils.js b/src/lib/utils.js index 18669b2ae..e0e42a064 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -17,9 +17,18 @@ import type {$Request} from 'express'; import type {StringValue} from '../../types'; const Logger = require('./logger'); +const pkginfo = require('pkginfo')(module); // eslint-disable-line no-unused-vars +const pkgVersion = module.exports.version; +const pkgName = module.exports.name; export const DIST_TAGS = 'dist-tags'; +export function getUserAgent(): string { + assert(_.isString(pkgName)); + assert(_.isString(pkgVersion)); + return `${pkgName}/${pkgVersion}`; +} + /** * Validate a package. * @return {Boolean} whether the package is valid or not diff --git a/test/integration/config_nocache.yaml b/test/integration/config_nocache.yaml index 2d69d18e4..3916fb6ba 100644 --- a/test/integration/config_nocache.yaml +++ b/test/integration/config_nocache.yaml @@ -1,9 +1,5 @@ storage: ./.verdaccio_test_env/test-storage -users: - test: - password: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 - uplinks: npmjs: url: https://registry.npmjs.org/ diff --git a/test/unit/api/config.spec.js b/test/unit/api/config.spec.js index 074c5e396..e19015257 100644 --- a/test/unit/api/config.spec.js +++ b/test/unit/api/config.spec.js @@ -6,6 +6,7 @@ import {parseConfigFile} from '../../../src/lib/utils'; import {DEFAULT_REGISTRY, DEFAULT_UPLINK, ROLES, WEB_TITLE} from '../../../src/lib/constants'; const resolveConf = (conf) => path.join(__dirname, `../../../conf/${conf}.yaml`); +require('../../../src/lib/logger').setup([]); const checkDefaultUplink = (config) => { expect(_.isObject(config.uplinks[DEFAULT_UPLINK])).toBeTruthy();