1 | 'use strict'
|
2 |
|
3 | const eu = encodeURIComponent
|
4 | const fetch = require('npm-registry-fetch')
|
5 | const figgyPudding = require('figgy-pudding')
|
6 | const getStream = require('get-stream')
|
7 | const validate = require('aproba')
|
8 |
|
9 | const OrgConfig = figgyPudding({
|
10 | Promise: { default: () => Promise }
|
11 | })
|
12 |
|
13 |
|
14 | const cmd = module.exports = {}
|
15 |
|
16 | class MembershipDetail {}
|
17 | cmd.set = (org, user, role, opts) => {
|
18 | if (typeof role === 'object' && !opts) {
|
19 | opts = role
|
20 | role = undefined
|
21 | }
|
22 | opts = OrgConfig(opts)
|
23 | return new opts.Promise((resolve, reject) => {
|
24 | validate('SSSO|SSZO', [org, user, role, opts])
|
25 | user = user.replace(/^@?/, '')
|
26 | org = org.replace(/^@?/, '')
|
27 | fetch.json(`/-/org/${eu(org)}/user`, opts.concat({
|
28 | method: 'PUT',
|
29 | body: { user, role }
|
30 | })).then(resolve, reject)
|
31 | }).then(ret => Object.assign(new MembershipDetail(), ret))
|
32 | }
|
33 |
|
34 | cmd.rm = (org, user, opts) => {
|
35 | opts = OrgConfig(opts)
|
36 | return new opts.Promise((resolve, reject) => {
|
37 | validate('SSO', [org, user, opts])
|
38 | user = user.replace(/^@?/, '')
|
39 | org = org.replace(/^@?/, '')
|
40 | fetch(`/-/org/${eu(org)}/user`, opts.concat({
|
41 | method: 'DELETE',
|
42 | body: { user },
|
43 | ignoreBody: true
|
44 | })).then(resolve, reject)
|
45 | }).then(() => null)
|
46 | }
|
47 |
|
48 | class Roster {}
|
49 | cmd.ls = (org, opts) => {
|
50 | opts = OrgConfig(opts)
|
51 | return new opts.Promise((resolve, reject) => {
|
52 | getStream.array(cmd.ls.stream(org, opts)).then(entries => {
|
53 | const obj = {}
|
54 | for (let [key, val] of entries) {
|
55 | obj[key] = val
|
56 | }
|
57 | return obj
|
58 | }).then(resolve, reject)
|
59 | }).then(ret => Object.assign(new Roster(), ret))
|
60 | }
|
61 |
|
62 | cmd.ls.stream = (org, opts) => {
|
63 | opts = OrgConfig(opts)
|
64 | validate('SO', [org, opts])
|
65 | org = org.replace(/^@?/, '')
|
66 | return fetch.json.stream(`/-/org/${eu(org)}/user`, '*', opts.concat({
|
67 | mapJson (value, [key]) {
|
68 | return [key, value]
|
69 | }
|
70 | }))
|
71 | }
|