git ssb

0+

ev / minbase



Tree: b62ecd6f843b26f37e70c7b6d65c71db35bbf922

Files: b62ecd6f843b26f37e70c7b6d65c71db35bbf922 / sbot.js

4468 bytesRaw
1var fs = require('fs')
2var path = require('path')
3var pull = require('pull-stream')
4var toPull = require('stream-to-pull-stream')
5var File = require('pull-file')
6var explain = require('explain-error')
7var ssbKeys = require('ssb-keys')
8var stringify = require('pull-stringify')
9var createHash = require('multiblob/util').createHash
10var minimist = require('minimist')
11var muxrpcli = require('muxrpcli')
12var cmdAliases = require('scuttlebot/lib/cli-cmd-aliases')
13
14//get config as cli options after --, options before that are
15//options to the command.
16var argv = process.argv.slice(2)
17var i = argv.indexOf('--')
18var conf = argv.slice(i+1)
19argv = ~i ? argv.slice(0, i) : argv
20
21var config = require('ssb-config/inject')(process.env.ssb_appname, minimist(conf))
22
23var keys = ssbKeys.loadOrCreateSync(path.join(config.path, 'secret'))
24if(keys.curve === 'k256')
25 throw new Error('k256 curves are no longer supported,'+
26 'please delete' + path.join(config.path, 'secret'))
27
28var manifestFile = path.join(config.path, 'manifest.json')
29
30if (argv[0] == 'server') {
31
32 // special server command:
33 // import sbot and start the server
34
35 var createSbot = require('scuttlebot')
36 .use(require('scuttlebot/plugins/plugins'))
37 .use(require('scuttlebot/plugins/master'))
38 .use(require('scuttlebot/plugins/gossip'))
39 .use(require('scuttlebot/plugins/replicate'))
40 .use(require('ssb-friends'))
41 .use(require('ssb-blobs'))
42 .use(require('scuttlebot/plugins/invite'))
43 //.use(require('scuttlebot/plugins/block'))
44 .use(require('scuttlebot/plugins/local'))
45 .use(require('scuttlebot/plugins/logging'))
46 .use(require('scuttlebot/plugins/private'))
47 .use(require('ssb-ws'))
48 .use(require('ssb-links'))
49 .use(require('ssb-query'))
50 .use(require('ssb-ebt'))
51 //.use(require('ssb-fulltext'))
52
53 // add third-party plugins
54 //require('scuttlebot/plugins/plugins').loadUserPlugins(createSbot, config)
55
56 // start server
57
58 config.keys = keys
59 var server = createSbot(config)
60
61 // write RPC manifest to ~/.ssb/manifest.json
62 fs.writeFileSync(manifestFile, JSON.stringify(server.getManifest(), null, 2))
63
64 var lite = require('./serve')
65 lite.serve()
66
67} else {
68
69 // normal command:
70 // create a client connection to the server
71
72 // read manifest.json
73 var manifest
74 try {
75 manifest = JSON.parse(fs.readFileSync(manifestFile))
76 } catch (err) {
77 throw explain(err,
78 'no manifest file'
79 + '- should be generated first time server is run'
80 )
81 }
82
83 // connect
84 require('ssb-client')(keys, {
85 manifest: manifest,
86 port: config.port,
87 host: config.host||'localhost',
88 caps: config.caps,
89 key: config.key || keys.id
90 }, function (err, rpc) {
91 if(err) {
92 if (/could not connect/.test(err.message)) {
93 console.log('Error: Could not connect to the scuttlebot server.')
94 console.log('Use the "server" command to start it.')
95 if(config.verbose) throw err
96 process.exit(1)
97 }
98 throw err
99 }
100
101 // add aliases
102 for (var k in cmdAliases) {
103 rpc[k] = rpc[cmdAliases[k]]
104 manifest[k] = manifest[cmdAliases[k]]
105 }
106
107 // add some extra commands
108 manifest.version = 'async'
109 manifest.config = 'sync'
110 rpc.version = function (cb) {
111 console.log(require('./package.json').version)
112 cb()
113 }
114 rpc.config = function (cb) {
115 console.log(JSON.stringify(config, null, 2))
116 cb()
117 }
118
119 // HACK
120 // we need to output the hash of blobs that are added via blobs.add
121 // because muxrpc doesnt support the `sink` callback yet, we need this manual override
122 // -prf
123 if (process.argv[2] === 'blobs.add') {
124 var filename = process.argv[3]
125 var source =
126 filename ? File(process.argv[3])
127 : !process.stdin.isTTY ? toPull.source(process.stdin)
128 : (function () {
129 console.error('USAGE:')
130 console.error(' blobs.add <filename> # add a file')
131 console.error(' source | blobs.add # read from stdin')
132 process.exit(1)
133 })()
134 var hasher = createHash('sha256')
135 pull(
136 source,
137 hasher,
138 rpc.blobs.add(function (err) {
139 if (err)
140 throw err
141 console.log('&'+hasher.digest)
142 process.exit()
143 })
144 )
145 return
146 }
147
148 // run commandline flow
149 muxrpcli(argv, manifest, rpc, config.verbose)
150 })
151}
152
153
154
155
156
157
158

Built with git-ssb-web