From d4be5643c55338d6ab11fa3c3ff220ad0064fd4c Mon Sep 17 00:00:00 2001 From: Nicholas Boll Date: Wed, 27 Feb 2019 16:28:18 -0700 Subject: [PATCH 1/4] fix: handle npm prefix config environment variables Fixes #4682 --- __tests__/registries/npm-registry.js | 31 ++++++++++++++++++++++++++++ src/registries/base-registry.js | 4 +++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/__tests__/registries/npm-registry.js b/__tests__/registries/npm-registry.js index 4848cef2db..b5177b7719 100644 --- a/__tests__/registries/npm-registry.js +++ b/__tests__/registries/npm-registry.js @@ -731,6 +731,37 @@ describe('isScopedPackage functional test', () => { }); }); +describe('environment variables functional test', () => { + beforeEach(() => { + process.env.npm_config_always_auth = 'true'; + process.env.npm_config__auth = 'auth'; + process.env.npm_config__authtoken = 'authToken'; + process.env.npm_config__username = 'username'; + process.env.npm_config__password = 'password'; + }); + + afterEach(() => { + delete process.env.npm_config_always_auth; + delete process.env.npm_config__auth; + delete process.env.npm_config__authToken; + delete process.env.npm_config__username; + delete process.env.npm_config__password; + }); + + test('correctly escapes environment config variables', () => { + const testCwd = '.'; + const {mockRequestManager, mockRegistries, mockReporter} = createMocks(); + const npmRegistry = new NpmRegistry(testCwd, mockRegistries, mockRequestManager, mockReporter, true, []); + + npmRegistry.mergeEnv('npm_config_'); + expect(npmRegistry.config).toHaveProperty('always-auth', true); + expect(npmRegistry.config).toHaveProperty('_auth', 'auth'); + expect(npmRegistry.config).toHaveProperty('_authtoken', 'authToken'); + expect(npmRegistry.config).toHaveProperty('_username', 'username'); + expect(npmRegistry.config).toHaveProperty('_password', 'password'); + }); +}); + describe('getRequestUrl functional test', () => { test('returns pathname when it is a full URL', () => { const testCwd = '.'; diff --git a/src/registries/base-registry.js b/src/registries/base-registry.js index c563a7edfd..77b9cbc2b2 100644 --- a/src/registries/base-registry.js +++ b/src/registries/base-registry.js @@ -171,7 +171,9 @@ export default class BaseRegistry { key = key.replace(/__/g, '.'); // replace underscores with dashes - key = key.replace(/_/g, '-'); + if (!['_auth', '_authtoken', '_username', '_password'].includes(key)) { + key = key.replace(/_/g, '-'); + } // set it via a path objectPath.set(this.config, key, val); From 8ea424ef3c97d8b9a0e0fd13588d078aaeec3a1b Mon Sep 17 00:00:00 2001 From: Nicholas Boll Date: Wed, 27 Feb 2019 17:01:09 -0700 Subject: [PATCH 2/4] Updated changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 052b960d0e..afc65b11fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ Please add one entry in this file for each change in Yarn's behavior. Use the sa ## Master +- Fix `npm_config_` environment variable parsing to support `_auth`, `_authToken`, `_username` and `_password` config options + + [#7070](https://github.com/yarnpkg/yarn/pull/7070) - [**Nicholas Boll**](https://github.com/NicholasBoll) + - Adds support for `yarn policies set-version berry` [#7041](https://github.com/yarnpkg/yarn/pull/7041/files) - [**Maƫl Nison**](https://twitter.com/arcanis) From 93ff317c177d6ed004ba33b91a5411fe7069579e Mon Sep 17 00:00:00 2001 From: Nicholas Boll Date: Thu, 28 Feb 2019 11:44:43 -0700 Subject: [PATCH 3/4] Implemented PR feedback --- src/registries/base-registry.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/registries/base-registry.js b/src/registries/base-registry.js index 77b9cbc2b2..30c581f868 100644 --- a/src/registries/base-registry.js +++ b/src/registries/base-registry.js @@ -170,10 +170,8 @@ export default class BaseRegistry { // replace dunders with dots key = key.replace(/__/g, '.'); - // replace underscores with dashes - if (!['_auth', '_authtoken', '_username', '_password'].includes(key)) { - key = key.replace(/_/g, '-'); - } + // replace underscores with dashes ignoring keys that start with an underscore + key.replace(/([^_])_/g, '$1-'); // set it via a path objectPath.set(this.config, key, val); From 1bdc28152fa9235ccad0087c3a59254b6d162200 Mon Sep 17 00:00:00 2001 From: Nicholas Boll Date: Thu, 28 Feb 2019 11:53:57 -0700 Subject: [PATCH 4/4] Fixed logic error --- src/registries/base-registry.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/registries/base-registry.js b/src/registries/base-registry.js index 30c581f868..342362abcb 100644 --- a/src/registries/base-registry.js +++ b/src/registries/base-registry.js @@ -171,7 +171,7 @@ export default class BaseRegistry { key = key.replace(/__/g, '.'); // replace underscores with dashes ignoring keys that start with an underscore - key.replace(/([^_])_/g, '$1-'); + key = key.replace(/([^_])_/g, '$1-'); // set it via a path objectPath.set(this.config, key, val);