Commit 3b2dc16dbbbc0325cda645d454ecda892d5c87a5
Merge remote-tracking branch 'origin/invite-note'
Dominic Tarr committed on 5/20/2017, 1:53:03 AMParent: fbc79188e11e77901bd76dc40273b0c39bc81db1
Parent: 69b89f6f0bf0128f0a22b579bcba5157df95a37d
Files changed
plugins/invite.js | changed |
plugins/invite.md | changed |
test/invite.js | changed |
plugins/invite.js | ||
---|---|---|
@@ -59,14 +59,18 @@ | ||
59 | 59 … | }) |
60 | 60 … | }) |
61 | 61 … | |
62 | 62 … | return { |
63 | - create: valid.async(function (n, cb) { | |
63 … | + create: valid.async(function (n, note, cb) { | |
64 | 64 … | var modern = false |
65 | 65 … | if(isObject(n) && n.modern) { |
66 | 66 … | n = 1 |
67 | 67 … | modern = true |
68 | 68 … | } |
69 … | + if(isFunction(note)) { | |
70 … | + cb = note | |
71 … | + note = null | |
72 … | + } | |
69 | 73 … | var addr = server.getAddress() |
70 | 74 … | var host = ref.parseAddress(addr).host |
71 | 75 … | if(!config.allowPrivate && (ip.isPrivate(host) || 'localhost' === host)) |
72 | 76 … | return cb(new Error('Server has no public ip address, ' |
@@ -86,8 +90,9 @@ | ||
86 | 90 … | var owner = server.id |
87 | 91 … | codesDB.put(keyCap.id, { |
88 | 92 … | id: keyCap.id, |
89 | 93 … | total: +n, |
94 … | + note: note, | |
90 | 95 … | used: 0, |
91 | 96 … | permissions: {allow: ['invite.use', 'getAddress'], deny: null} |
92 | 97 … | }, function (err) { |
93 | 98 … | // emit the invite code: our server address, plus the key-seed |
@@ -99,9 +104,9 @@ | ||
99 | 104 … | addr = ref.parseAddress(addr) |
100 | 105 … | cb(null, [addr.host, addr.port, addr.key].join(':') + '~' + seed.toString('base64')) |
101 | 106 … | } |
102 | 107 … | }) |
103 | - }, 'number|object'), | |
108 … | + }, 'number|object', 'string?'), | |
104 | 109 … | use: valid.async(function (req, cb) { |
105 | 110 … | var rpc = this |
106 | 111 … | |
107 | 112 … | // fetch the code |
@@ -142,9 +147,10 @@ | ||
142 | 147 … | server.publish({ |
143 | 148 … | type: 'contact', |
144 | 149 … | contact: req.feed, |
145 | 150 … | following: true, |
146 | - pub: true | |
151 … | + pub: true, | |
152 … | + note: invite.note || undefined | |
147 | 153 … | }, cb) |
148 | 154 … | }) |
149 | 155 … | }) |
150 | 156 … | }) |
plugins/invite.md | |||
---|---|---|---|
@@ -7,20 +7,23 @@ | |||
7 | 7 … | ||
8 | 8 … | Create a new invite code. | |
9 | 9 … | ||
10 | 10 … | ```bash | |
11 | -create {n} | ||
11 … | +create {n} [{note}] | ||
12 | 12 … | ``` | |
13 | 13 … | ||
14 | 14 … | ```js | |
15 | -create(n, cb) | ||
15 … | +create(n[, note], cb) | ||
16 | 16 … | ``` | |
17 | 17 … | ||
18 | 18 … | This produces an invite-code which encodes the sbot server's address, and a keypair seed. | |
19 | 19 … | The keypair seed is used to generate a keypair, which is then used to authenticate a connection with the sbot server. | |
20 | 20 … | The sbot server will then grant access to the `use` call. | |
21 | 21 … | ||
22 | 22 … | - `n` (number): How many times the invite can be used before it expires. | |
23 … | +- `note` (string): A note to associate with the invite code. The sbot server will | ||
24 … | + include this note in the follow message that it creates when `use` is | ||
25 … | + called. | ||
23 | 26 … | ||
24 | 27 … | ||
25 | 28 … | ||
26 | 29 … | ## accept: async |
test/invite.js | ||
---|---|---|
@@ -253,7 +253,43 @@ | ||
253 | 253 … | |
254 | 254 … | }) |
255 | 255 … | |
256 | 256 … | |
257 … | +tape('test invite with note', function (t) { | |
257 | 258 … | |
259 … | + var alice = createSbot({ | |
260 … | + temp: 'test-invite-alice2', timeout: 100, | |
261 … | + allowPrivate: true, | |
262 … | + keys: ssbKeys.generate() | |
263 … | + }) | |
258 | 264 … | |
265 … | + var bob = createSbot({ | |
266 … | + temp: 'test-invite-bob2', timeout: 100, | |
267 … | + keys: ssbKeys.generate() | |
268 … | + }) | |
259 | 269 … | |
270 … | + alice.invite.create(1, 'bob', function (err, invite) { | |
271 … | + if(err) throw err | |
272 … | + bob.invite.accept(invite, function (err) { | |
273 … | + if(err) throw err | |
274 … | + | |
275 … | + all(alice.messagesByType('contact'), function (err, ary) { | |
276 … | + t.equal(ary.length, 1) | |
277 … | + | |
278 … | + t.deepEqual({ | |
279 … | + type: 'contact', | |
280 … | + contact: bob.id, | |
281 … | + following: true, | |
282 … | + pub: true, | |
283 … | + note: 'bob', | |
284 … | + }, ary[0].value.content) | |
285 … | + | |
286 … | + alice.close(true) | |
287 … | + bob.close(true) | |
288 … | + t.end() | |
289 … | + }) | |
290 … | + }) | |
291 … | + }) | |
292 … | +}) | |
293 … | + | |
294 … | + | |
295 … | + |
Built with git-ssb-web