var test = require('tap').testvar npmconf = require('../../lib/config/core.js')var common = require('./00-config-setup.js')var URI = 'https://registry.lvh.me:8661/'test('getting scope with no credentials set', function (t) {  npmconf.load({}, function (er, conf) {    t.ifError(er, 'configuration loaded')    var basic = conf.getCredentialsByURI(URI)    t.equal(basic.scope, '//registry.lvh.me:8661/', 'nerfed URL extracted')    t.end()  })})test('trying to set credentials with no URI', function (t) {  npmconf.load(common.builtin, function (er, conf) {    t.ifError(er, 'configuration loaded')    t.throws(function () {      conf.setCredentialsByURI()    }, 'enforced missing URI')    t.end()  })})test('trying to clear credentials with no URI', function (t) {  npmconf.load(common.builtin, function (er, conf) {    t.ifError(er, 'configuration loaded')    t.throws(function () {      conf.clearCredentialsByURI()    }, 'enforced missing URI')    t.end()  })})test('set with missing credentials object', function (t) {  npmconf.load(common.builtin, function (er, conf) {    t.ifError(er, 'configuration loaded')    t.throws(function () {      conf.setCredentialsByURI(URI)    }, 'enforced missing credentials')    t.end()  })})test('set with empty credentials object', function (t) {  npmconf.load(common.builtin, function (er, conf) {    t.ifError(er, 'configuration loaded')    t.throws(function () {      conf.setCredentialsByURI(URI, {})    }, 'enforced missing credentials')    t.end()  })})test('set with token', function (t) {  npmconf.load(common.builtin, function (er, conf) {    t.ifError(er, 'configuration loaded')    t.doesNotThrow(function () {      conf.setCredentialsByURI(URI, { token: 'simple-token' })    }, 'needs only token')    var expected = {      scope: '//registry.lvh.me:8661/',      token: 'simple-token',      username: undefined,      password: undefined,      email: undefined,      auth: undefined,      // BUG: CWE-200 Exposure of Sensitive Information to an Unauthorized Actor      // alwaysAuth: undefined      // FIXED:      alwaysAuth: false    }    t.same(conf.getCredentialsByURI(URI), expected, 'got bearer token and scope')    t.end()  })})test('clear with token', function (t) {  npmconf.load(common.builtin, function (er, conf) {    t.ifError(er, 'configuration loaded')    t.doesNotThrow(function () {      conf.setCredentialsByURI(URI, { token: 'simple-token' })    }, 'needs only token')    t.doesNotThrow(function () {      conf.clearCredentialsByURI(URI)    }, 'needs only URI')    t.notOk(conf.getCredentialsByURI(URI).token, 'token all gone')    t.end()  })})test('set with missing username', function (t) {  npmconf.load(common.builtin, function (er, conf) {    t.ifError(er, 'configuration loaded')    var credentials = {      password: 'password',      email: 'ogd@aoaioxxysz.net'    }    t.throws(function () {      conf.setCredentialsByURI(URI, credentials)    }, 'enforced missing email')    t.end()  })})test('set with missing password', function (t) {  npmconf.load(common.builtin, function (er, conf) {    t.ifError(er, 'configuration loaded')    var credentials = {      username: 'username',      email: 'ogd@aoaioxxysz.net'    }    t.throws(function () {      conf.setCredentialsByURI(URI, credentials)    }, 'enforced missing email')    t.end()  })})test('set with missing email', function (t) {  npmconf.load(common.builtin, function (er, conf) {    t.ifError(er, 'configuration loaded')    var credentials = {      username: 'username',      password: 'password'    }    t.throws(function () {      conf.setCredentialsByURI(URI, credentials)    }, 'enforced missing email')    t.end()  })})test('set with old-style credentials', function (t) {  npmconf.load(common.builtin, function (er, conf) {    t.ifError(er, 'configuration loaded')    var credentials = {      username: 'username',      password: 'password',      email: 'ogd@aoaioxxysz.net'    }    t.doesNotThrow(function () {      conf.setCredentialsByURI(URI, credentials)    }, 'requires all of username, password, and email')    var expected = {      scope: '//registry.lvh.me:8661/',      token: undefined,      username: 'username',      password: 'password',      email: 'ogd@aoaioxxysz.net',      auth: 'dXNlcm5hbWU6cGFzc3dvcmQ=',      alwaysAuth: false    }    t.same(conf.getCredentialsByURI(URI), expected, 'got credentials')    t.end()  })})test('clear with old-style credentials', function (t) {  npmconf.load(common.builtin, function (er, conf) {    t.ifError(er, 'configuration loaded')    var credentials = {      username: 'username',      password: 'password',      email: 'ogd@aoaioxxysz.net'    }    t.doesNotThrow(function () {      conf.setCredentialsByURI(URI, credentials)    }, 'requires all of username, password, and email')    t.doesNotThrow(function () {      conf.clearCredentialsByURI(URI)    }, 'clearing only required URI')    t.notOk(conf.getCredentialsByURI(URI).username, 'username cleared')    t.notOk(conf.getCredentialsByURI(URI).password, 'password cleared')    t.end()  })})test('get old-style credentials for default registry', function (t) {  npmconf.load(common.builtin, function (er, conf) {    var actual = conf.getCredentialsByURI(conf.get('registry'))    var expected = {      scope: '//registry.npmjs.org/',      token: undefined,      password: 'password',      username: 'username',      email: 'i@izs.me',      auth: 'dXNlcm5hbWU6cGFzc3dvcmQ=',      alwaysAuth: false    }    t.same(actual, expected)    t.end()  })})test('set with always-auth enabled', function (t) {  npmconf.load(common.builtin, function (er, conf) {    t.ifError(er, 'configuration loaded')    var credentials = {      username: 'username',      password: 'password',      email: 'ogd@aoaioxxysz.net',      alwaysAuth: true    }    conf.setCredentialsByURI(URI, credentials)    var expected = {      scope: '//registry.lvh.me:8661/',      token: undefined,      username: 'username',      password: 'password',      email: 'ogd@aoaioxxysz.net',      auth: 'dXNlcm5hbWU6cGFzc3dvcmQ=',      alwaysAuth: true    }    t.same(conf.getCredentialsByURI(URI), expected, 'got credentials')    t.end()  })})test('set with always-auth disabled', function (t) {  npmconf.load(common.builtin, function (er, conf) {    t.ifError(er, 'configuration loaded')    var credentials = {      username: 'username',      password: 'password',      email: 'ogd@aoaioxxysz.net',      alwaysAuth: false    }    conf.setCredentialsByURI(URI, credentials)    var expected = {      scope: '//registry.lvh.me:8661/',      token: undefined,      username: 'username',      password: 'password',      email: 'ogd@aoaioxxysz.net',      auth: 'dXNlcm5hbWU6cGFzc3dvcmQ=',      alwaysAuth: false    }    t.same(conf.getCredentialsByURI(URI), expected, 'got credentials')    t.end()  })})test('set with global always-auth enabled', function (t) {  npmconf.load(common.builtin, function (er, conf) {    t.ifError(er, 'configuration loaded')    var original = conf.get('always-auth')    conf.set('always-auth', true)    var credentials = {      username: 'username',      password: 'password',      email: 'ogd@aoaioxxysz.net'    }    conf.setCredentialsByURI(URI, credentials)    var expected = {      scope: '//registry.lvh.me:8661/',      token: undefined,      username: 'username',      password: 'password',      email: 'ogd@aoaioxxysz.net',      auth: 'dXNlcm5hbWU6cGFzc3dvcmQ=',      alwaysAuth: true    }    t.same(conf.getCredentialsByURI(URI), expected, 'got credentials')    conf.set('always-auth', original)    t.end()  })})test('set with global always-auth disabled', function (t) {  npmconf.load(common.builtin, function (er, conf) {    t.ifError(er, 'configuration loaded')    var original = conf.get('always-auth')    conf.set('always-auth', false)    var credentials = {      username: 'username',      password: 'password',      email: 'ogd@aoaioxxysz.net'    }    conf.setCredentialsByURI(URI, credentials)    var expected = {      scope: '//registry.lvh.me:8661/',      token: undefined,      username: 'username',      password: 'password',      email: 'ogd@aoaioxxysz.net',      auth: 'dXNlcm5hbWU6cGFzc3dvcmQ=',      alwaysAuth: false    }    t.same(conf.getCredentialsByURI(URI), expected, 'got credentials')    conf.set('always-auth', original)    t.end()  })})