Welcome to mirror list, hosted at ThFree Co, Russian Federation.

access.js « lib - github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 7a4fda7d35718763dc80ebd35a9d75eb20749cf2 (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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
var assert = require('assert')
var resolve = require('path').resolve
var url = require('url')

var log = require('npmlog')
var readPackageJson = require('read-package-json')

var mapToRegistry = require('./utils/map-to-registry.js')
var npa = require('npm-package-arg')
var npm = require('./npm.js')

module.exports = access

access.usage = 'npm access public [<package>]' +
               '\nnpm access restricted [<package>]' +
               '\nnpm access add <read-only|read-write> <entity> [<package>]' +
               '\nnpm access rm <entity> [<package>]' +
               '\nnpm access ls [<package>]' +
               '\nnpm access edit [<package>]'

access.completion = function (opts, cb) {
  var argv = opts.conf.argv.remain
  if (argv.length === 2) {
    return cb(null, ['public', 'restricted', 'add', 'rm', 'ls', 'edit'])
  }

  switch (argv[2]) {
    case 'public':
    case 'restricted':
    case 'ls':
    case 'edit':
      return cb(new Error('unimplemented: packages you can change'))
    case 'add':
      if (argv.length === 3) return cb(null, ['read-only', 'read-write'])

      return cb(new Error('unimplemented: entities and packages'))
    case 'rm':
      return cb(new Error('unimplemented: entities and packages'))
    default:
      return cb(new Error(argv[2] + ' not recognized'))
  }
}

function access (args, cb) {
  var cmd = args.shift()
  switch (cmd) {
    case 'public': case 'restricted': return changeAccess(args, cmd, cb)
    case 'add': case 'set': return add(args, cb)
    case 'rm': case 'del': case 'clear': return rm(args, cb)
    case 'list': case 'sl': case 'ls': return ls(args, cb)
    case 'edit': case 'ed': return edit(args, cb)
    default: return cb('Usage:\n' + access.usage)
  }
}

function changeAccess (args, level, cb) {
  assert(Array.isArray(args), 'changeAccess requires args be an array')
  assert(
    ['public', 'restricted'].indexOf(level) !== -1,
    "access level must be either 'public' or 'restricted'"
  )
  assert(typeof cb === 'function', 'changeAccess requires a callback')

  var p = (args.shift() || '').trim()
  if (!p) return getCurrentPackage(level, cb)
  changeAccess_(p, level, cb)
}

function getCurrentPackage (level, cb) {
  var here = resolve(npm.prefix, 'package.json')
  log.verbose('setPackageLevel', 'here', here)

  readPackageJson(here, function (er, data) {
    if (er) return cb(er)

    if (!data.name) {
      return cb(new Error('Package must be named'))
    }

    changeAccess_(data.name, level, cb)
  })
}

function changeAccess_ (name, level, cb) {
  log.verbose('changeAccess', 'name', name, 'level', level)
  mapToRegistry(name, npm.config, function (er, uri, auth, base) {
    if (er) return cb(er)

    var data = npa(name)
    if (!data.scope) {
      var msg = "Sorry, you can't change the access level of unscoped packages."
      log.error('access', msg)
      return cb(new Error(msg))
    }

    // name must be scoped, so escape separator
    name = name.replace('/', '%2f')
    // FIXME: mapToRegistry still isn't generic enough SIGH
    uri = url.resolve(base, '-/package/' + name + '/access')
    var params = {
      level: level,
      auth: auth
    }

    npm.registry.access(uri, params, cb)
  })
}

function add (args, cb) {
  return cb(new Error("npm access add isn't implemented yet!"))
}

function rm (args, cb) {
  return cb(new Error("npm access rm isn't implemented yet!"))
}

function ls (args, cb) {
  return cb(new Error("npm access ls isn't implemented yet!"))
}

function edit (args, cb) {
  return cb(new Error("npm access edit isn't implemented yet!"))
}