Commit 69b89f6f0bf0128f0a22b579bcba5157df95a37d
Allow setting a note for an invite code
cel committed on 3/30/2017, 3:38:03 PMParent: ae758ca835b0deec43ec864786a34e14b1cef0b3
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