git ssb

2+

ev / mvd



Tree: 89e22f38502bc71de5434584a05d0545407c2336

Files: 89e22f38502bc71de5434584a05d0545407c2336 / bin.js

3460 bytesRaw
1var fs = require('fs')
2var path = require('path')
3var ssbKeys = require('ssb-keys')
4var stringify = require('pull-stringify')
5var open = require('opn')
6var home = require('os-homedir')()
7var nonPrivate = require('non-private-ip')
8var muxrpcli = require('muxrpcli')
9
10var SEC = 1e3
11var MIN = 60*SEC
12
13var config = {
14 name: 'ssb',
15 host: nonPrivate.v4 || '',
16 timeout: 0,
17 local: 'true',
18 port: 8008,
19 path: path.join(home, '.ssb'),
20 ws: { port: 8989 },
21 caps: {
22 shs: '1KHLiKZvAvjbY1ziZEHMXawbCEIM6qwjCDm3VYRan/s=',
23 sign: null
24 },
25 friends: {
26 dunbar: 150,
27 hops: 3
28 },
29 gossip: {
30 connections: 3
31 },
32 timers: {
33 connection: 0,
34 reconnect: 5*SEC,
35 ping: 5*MIN,
36 handshake: 5*SEC
37 },
38 master: [],
39 party: true
40}
41
42config.keys = ssbKeys.loadOrCreateSync(path.join(config.path, 'secret'))
43
44var coraClient = fs.readFileSync(path.join('./build/index.html'))
45
46var manifestFile = path.join(config.path, 'manifest.json')
47
48var argv = process.argv.slice(2)
49var i = argv.indexOf('--')
50var conf = argv.slice(i+1)
51argv = ~i ? argv.slice(0, i) : argv
52
53if (argv[0] == 'server') {
54
55 var createSbot = require('scuttlebot')
56 .use(require('scuttlebot/plugins/master'))
57 .use(require('scuttlebot/plugins/gossip'))
58 .use(require('scuttlebot/plugins/replicate'))
59 .use(require('ssb-friends'))
60 .use(require('ssb-blobs'))
61 .use(require('ssb-query'))
62 .use(require('ssb-links'))
63 .use(require('ssb-ebt'))
64 .use(require('ssb-ooo'))
65 .use(require('scuttlebot/plugins/invite'))
66 .use(require('scuttlebot/plugins/local'))
67 .use(require('decent-ssb/plugins/ws'))
68 .use({
69 name: 'serve',
70 version: '1.0.0',
71 init: function (sbot) {
72 sbot.ws.use(function (req, res, next) {
73 var send = {}
74 send = config
75 delete send.keys // very important to keep this, as it removes the server keys from the config before broadcast
76 send.address = sbot.ws.getAddress()
77 if(req.url == '/')
78 res.end(coraClient)
79 if(req.url == '/get-config')
80 res.end(JSON.stringify(send))
81 else next()
82 })
83 }
84 })
85
86 open('http://localhost:' + config.ws.port, {wait: false})
87
88 var server = createSbot(config)
89
90 fs.writeFileSync(manifestFile, JSON.stringify(server.getManifest(), null, 2))
91} else {
92
93 var manifest
94 try {
95 manifest = JSON.parse(fs.readFileSync(manifestFile))
96 } catch (err) {
97 throw explain(err,
98 'no manifest file'
99 + '- should be generated first time server is run'
100 )
101 }
102
103 // connect
104 require('ssb-client')(config.keys, {
105 manifest: manifest,
106 port: config.port,
107 host: config.host||'localhost',
108 caps: config.caps,
109 key: config.key || config.keys.id
110 }, function (err, rpc) {
111 if(err) {
112 if (/could not connect/.test(err.message)) {
113 console.log('Error: Could not connect to the scuttlebot server.')
114 console.log('Use the "server" command to start it.')
115 if(config.verbose) throw err
116 process.exit(1)
117 }
118 throw err
119 }
120
121 // add some extra commands
122 manifest.version = 'async'
123 manifest.config = 'sync'
124 rpc.version = function (cb) {
125 console.log(require('./package.json').version)
126 cb()
127 }
128 rpc.config = function (cb) {
129 console.log(JSON.stringify(config, null, 2))
130 cb()
131 }
132
133 // run commandline flow
134 muxrpcli(argv, manifest, rpc, config.verbose)
135 })
136}
137
138

Built with git-ssb-web