Files: 42abcae02e90d52d27bc16faa27ce36a2678fa62 / ssb-ws / index.js
2088 bytesRaw
1 | var WS = require('multiserver/plugins/ws') |
2 | var http = require('http') |
3 | var pull = require('pull-stream') |
4 | var JSONApi = require('./json-api') |
5 | |
6 | var READ_AND_ADD = [ //except for add, of course |
7 | 'get', |
8 | 'getLatest', |
9 | 'createLogStream', |
10 | 'createUserStream', |
11 | |
12 | 'createHistoryStream', |
13 | 'getAddress', |
14 | |
15 | 'links', |
16 | |
17 | 'blobs.add', |
18 | 'blobs.size', |
19 | 'blobs.has', |
20 | 'blobs.get', |
21 | 'blobs.changes', |
22 | 'blobs.createWants', |
23 | |
24 | 'add', |
25 | |
26 | 'query.read', |
27 | 'links2.read' |
28 | ] |
29 | |
30 | |
31 | exports.name = 'ws' |
32 | exports.version = require('./package.json').version |
33 | exports.manifest = {} |
34 | |
35 | exports.init = function (sbot, config) { |
36 | var port |
37 | if(config.ws) |
38 | port = config.ws.port |
39 | if(!port) |
40 | port = 1024+(~~(Math.random()*(65536-1024))) |
41 | |
42 | var layers = [] |
43 | var server, ws_server |
44 | |
45 | function createServer (config, instance) { |
46 | instance = instance || 0 |
47 | if(server) return server |
48 | server = http.createServer(JSONApi(sbot, layers)).listen(port+instance) |
49 | ws_server = WS(Object.assign({ |
50 | server: server, port: port, host: config.host |
51 | }, config)) |
52 | return server |
53 | } |
54 | |
55 | /*sbot.auth.hook(function (fn, args) { |
56 | var id = args[0] |
57 | var cb = args[1] |
58 | fn(id, function (err, value) { |
59 | if(value === true) |
60 | sbot.friends.get({source: sbot.id, dest: toId(id)}, function (err, follows) { |
61 | if(err) return cb(err) |
62 | else if(follows) cb(null, {allow: READ_AND_ADD, deny: null}) |
63 | else cb(null, true) |
64 | }) |
65 | else |
66 | cb(err, value) |
67 | }) |
68 | })*/ |
69 | |
70 | sbot.auth.hook(function (fn, args) { |
71 | var id = args[0] |
72 | var cb = args[1] |
73 | fn(id, function (err, value) { |
74 | sbot.friends.get({source: sbot.id, dest: toId(id)}, function (err, follows) { |
75 | if(err) return cb(err) |
76 | else if(follows) cb(null, {allow: READ_AND_ADD, deny: null}) |
77 | else cb(null, true) |
78 | }) |
79 | }) |
80 | }) |
81 | |
82 | |
83 | |
84 | sbot.multiserver.transport({ |
85 | name: 'ws', |
86 | create: function (config, instance) { |
87 | createServer(config, instance) |
88 | return ws_server |
89 | } |
90 | }) |
91 | |
92 | return { |
93 | use: function (handler) { |
94 | layers.push(handler) |
95 | } |
96 | } |
97 | } |
98 | |
99 |
Built with git-ssb-web