summaryrefslogtreecommitdiff
path: root/deps/npm/lib/config/set-credentials-by-uri.js
blob: 74211380d86b6f8b80b082af42f5fa6ed80880b0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
var assert = require('assert')

var toNerfDart = require('./nerf-dart.js')

module.exports = setCredentialsByURI

function setCredentialsByURI (uri, c) {
  assert(uri && typeof uri === 'string', 'registry URL is required')
  assert(c && typeof c === 'object', 'credentials are required')

  var nerfed = toNerfDart(uri)

  if (c.token) {
    this.set(nerfed + ':_authToken', c.token, 'user')
    this.del(nerfed + ':_password', 'user')
    this.del(nerfed + ':username', 'user')
    this.del(nerfed + ':email', 'user')
    this.del(nerfed + ':always-auth', 'user')
  } else if (c.username || c.password || c.email) {
    assert(c.username, 'must include username')
    assert(c.password, 'must include password')
    assert(c.email, 'must include email address')

    this.del(nerfed + ':_authToken', 'user')

    var encoded = new Buffer(c.password, 'utf8').toString('base64')
    this.set(nerfed + ':_password', encoded, 'user')
    this.set(nerfed + ':username', c.username, 'user')
    this.set(nerfed + ':email', c.email, 'user')

    if (c.alwaysAuth !== undefined) {
      this.set(nerfed + ':always-auth', c.alwaysAuth, 'user')
    } else {
      this.del(nerfed + ':always-auth', 'user')
    }
  } else {
    throw new Error('No credentials to set.')
  }
}