Files: 26964367b4576851356b5e7a87124ef6c8562dd2 / ssb-ws / index.js
1531 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 | 'friends', |
24 | 'add', |
25 | 'search.query', |
26 | 'backlinks.read', |
27 | 'query.read', |
28 | 'links2.read' |
29 | ] |
30 | |
31 | |
32 | exports.name = 'ws' |
33 | exports.version = require('./package.json').version |
34 | exports.manifest = {} |
35 | |
36 | exports.init = function (sbot, config) { |
37 | var port |
38 | if(config.ws) |
39 | port = config.ws.port |
40 | if(!port) |
41 | port = 1024+(~~(Math.random()*(65536-1024))) |
42 | |
43 | var layers = [] |
44 | var server, ws_server |
45 | |
46 | function createServer (config, instance) { |
47 | instance = instance || 0 |
48 | if(server) return server |
49 | server = http.createServer(JSONApi(sbot, layers)).listen(port+instance) |
50 | ws_server = WS(Object.assign({ |
51 | server: server, port: port, host: config.host |
52 | }, config)) |
53 | return server |
54 | } |
55 | |
56 | sbot.auth.hook(function (fn, args) { |
57 | var id = args[0] |
58 | var cb = args[1] |
59 | fn(id, function (err, value) { |
60 | cb(null, {allow: READ_AND_ADD, deny: null}) |
61 | }) |
62 | }) |
63 | |
64 | sbot.multiserver.transport({ |
65 | name: 'ws', |
66 | create: function (config, instance) { |
67 | createServer(config, instance) |
68 | return ws_server |
69 | } |
70 | }) |
71 | |
72 | return { |
73 | use: function (handler) { |
74 | layers.push(handler) |
75 | } |
76 | } |
77 | } |
78 | |
79 |
Built with git-ssb-web