1 | var tape = require('tape')
|
2 | var pull = require('pull-stream')
|
3 | var pushable = require('pull-pushable')
|
4 | var mux = require('../')
|
5 | var cont = require('cont')
|
6 |
|
7 | var api = {
|
8 | get : 'async',
|
9 | put : 'async',
|
10 | del : 'async',
|
11 | read : 'source',
|
12 | nested: {
|
13 | get : 'async',
|
14 | put : 'async',
|
15 | del : 'async',
|
16 | read : 'source',
|
17 | },
|
18 | manifest: 'sync'
|
19 | }
|
20 |
|
21 | function id (e) {
|
22 | return e
|
23 | }
|
24 |
|
25 | var store = {
|
26 | foo: 1,
|
27 | bar: 2,
|
28 | baz: 3
|
29 | }
|
30 |
|
31 | function createServerAPI (store) {
|
32 | var rpc
|
33 | var name = 'nobody'
|
34 |
|
35 |
|
36 |
|
37 | var session = {
|
38 | whoami: function (cb) {
|
39 | cb(null, {okay: true, user: name})
|
40 | },
|
41 | get: function (key, cb) {
|
42 | return cb(null, store[key])
|
43 | },
|
44 | put: function (key, value, cb) {
|
45 | store[key] = value
|
46 | cb()
|
47 | },
|
48 | del: function (key, cb) {
|
49 | delete store[key]
|
50 | cb()
|
51 | },
|
52 | read: function () {
|
53 | return pull.values([1,2,3])
|
54 | },
|
55 | manifest: function () {
|
56 | return api
|
57 | }
|
58 | }
|
59 |
|
60 | session.nested = session
|
61 |
|
62 | return rpc = mux(null, api, id)(session, {allow: ['manifest', 'get']})
|
63 | }
|
64 |
|
65 | function noop () {}
|
66 |
|
67 | function createClientAPI(cb) {
|
68 | return mux(cb, null, id)()
|
69 | }
|
70 |
|
71 | tape('secure rpc', function (t) {
|
72 |
|
73 | var afterBootstrap = function () {
|
74 | cont.para([
|
75 | function (cb) {
|
76 | client.get('foo', function (err) {
|
77 | t.notOk(err); cb()
|
78 | })
|
79 | },
|
80 | function (cb) {
|
81 | client.put('foo', function (err) {
|
82 | t.ok(err); cb()
|
83 | })
|
84 | },
|
85 | function (cb) {
|
86 | client.del('foo', function (err) {
|
87 | t.ok(err); cb()
|
88 | })
|
89 | },
|
90 | function (cb) {
|
91 | pull(client.read(), pull.collect(function (err) {
|
92 | t.ok(err); cb()
|
93 | }))
|
94 | }
|
95 | ])(function (err) {
|
96 | t.end()
|
97 | })
|
98 | }
|
99 |
|
100 | var server = createServerAPI(store)
|
101 | var client = createClientAPI(afterBootstrap)
|
102 |
|
103 | var ss = server.createStream()
|
104 | var cs = client.createStream()
|
105 |
|
106 | pull(cs, ss, cs)
|
107 | })
|