Skip to content

Commit a9857b8

Browse files
committed
chore: remove auth info from logs
1 parent 479e45c commit a9857b8

5 files changed

+40
-5
lines changed

bin/npm-cli.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
var npm = require('../lib/npm.js')
2929
var npmconf = require('../lib/config/core.js')
3030
var errorHandler = require('../lib/utils/error-handler.js')
31+
var replaceInfo = require('../lib/utils/replace-info.js')
3132

3233
var configDefs = npmconf.defs
3334
var shorthands = configDefs.shorthands
@@ -40,7 +41,8 @@
4041
process.argv.splice(1, 1, 'npm', '-g')
4142
}
4243

43-
log.verbose('cli', process.argv)
44+
var args = replaceInfo(process.argv)
45+
log.verbose('cli', args)
4446

4547
var conf = nopt(types, shorthands)
4648
npm.argv = conf.argv.remain

lib/fetch-package-metadata.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
const deprCheck = require('./utils/depr-check')
44
const path = require('path')
55
const log = require('npmlog')
6+
const pacote = require('pacote')
67
const readPackageTree = require('read-package-tree')
78
const rimraf = require('rimraf')
89
const validate = require('aproba')
@@ -11,15 +12,17 @@ const npm = require('./npm')
1112
let npmConfig
1213
const npmlog = require('npmlog')
1314
const limit = require('call-limit')
14-
const tempFilename = require('./utils/temp-filename')
15-
const pacote = require('pacote')
15+
const tempFilename = require('./utils/temp-filename.js')
16+
const replaceInfo = require('./utils/replace-info.js')
1617
const isWindows = require('./utils/is-windows.js')
1718

1819
function andLogAndFinish (spec, tracker, done) {
1920
validate('SOF|SZF|OOF|OZF', [spec, tracker, done])
2021
return (er, pkg) => {
2122
if (er) {
22-
log.silly('fetchPackageMetaData', 'error for ' + String(spec), er.message)
23+
er.message = replaceInfo(er.message)
24+
var spc = replaceInfo(String(spec))
25+
log.silly('fetchPackageMetaData', 'error for ' + spc, er.message)
2326
if (tracker) tracker.finish()
2427
}
2528
return done(er, pkg)

lib/utils/error-handler.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ var exitCode = 0
1212
var rollbacks = npm.rollbacks
1313
var chain = require('slide').chain
1414
var errorMessage = require('./error-message.js')
15+
var replaceInfo = require('./replace-info.js')
1516
var stopMetrics = require('./metrics.js').stop
1617

1718
const cacheFile = require('./cache-file.js')
@@ -175,14 +176,16 @@ function errorHandler (er) {
175176
].forEach(function (k) {
176177
var v = er[k]
177178
if (!v) return
179+
v = replaceInfo(v)
178180
log.verbose(k, v)
179181
})
180182

181183
log.verbose('cwd', process.cwd())
182184

183185
var os = require('os')
186+
var args = replaceInfo(process.argv)
184187
log.verbose('', os.type() + ' ' + os.release())
185-
log.verbose('argv', process.argv.map(JSON.stringify).join(' '))
188+
log.verbose('argv', args.map(JSON.stringify).join(' '))
186189
log.verbose('node', process.version)
187190
log.verbose('npm ', 'v' + npm.version)
188191

lib/utils/error-message.js

+5
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,17 @@ var npm = require('../npm.js')
33
var util = require('util')
44
var nameValidator = require('validate-npm-package-name')
55
var npmlog = require('npmlog')
6+
var replaceInfo = require('./replace-info.js')
67

78
module.exports = errorMessage
89

910
function errorMessage (er) {
1011
var short = []
1112
var detail = []
13+
14+
er.message = replaceInfo(er.message)
15+
er.stack = replaceInfo(er.stack)
16+
1217
switch (er.code) {
1318
case 'ENOAUDIT':
1419
short.push(['audit', er.message])

lib/utils/replace-info.js

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
const URL = require('url')
2+
3+
// replaces auth info in an array
4+
// of arguments or in a strings
5+
function replaceInfo (arg) {
6+
const isArray = Array.isArray(arg)
7+
const isString = typeof arg === 'string'
8+
9+
if (!isArray && !isString) return arg
10+
11+
const args = isString ? arg.split(' ') : arg
12+
const info = args.map(arg => {
13+
try {
14+
const url = new URL(arg)
15+
return url.password === '' ? arg : arg.replace(url.password, '***')
16+
} catch (e) { return arg }
17+
})
18+
19+
return isString ? info.join(' ') : info
20+
}
21+
22+
module.exports = replaceInfo

0 commit comments

Comments
 (0)