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