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!"))
}
|