git ssb

1+

ev / minbay



Tree: afe7de9580840925af61711b5ab0d6c57d1131a4

Files: afe7de9580840925af61711b5ab0d6c57d1131a4 / sbot.js

4414 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/friends'))
40 .use(require('scuttlebot/plugins/replicate'))
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
51 // add third-party plugins
52 require('scuttlebot/plugins/plugins').loadUserPlugins(createSbot, config)
53
54 // start server
55
56 config.keys = keys
57 var server = createSbot(config)
58
59 // write RPC manifest to ~/.ssb/manifest.json
60 fs.writeFileSync(manifestFile, JSON.stringify(server.getManifest(), null, 2))
61
62 var lite = require('./serve')
63 lite.serve()
64
65} else {
66
67 // normal command:
68 // create a client connection to the server
69
70 // read manifest.json
71 var manifest
72 try {
73 manifest = JSON.parse(fs.readFileSync(manifestFile))
74 } catch (err) {
75 throw explain(err,
76 'no manifest file'
77 + '- should be generated first time server is run'
78 )
79 }
80
81 // connect
82 require('ssb-client')(keys, {
83 manifest: manifest,
84 port: config.port,
85 host: config.host||'localhost',
86 caps: config.caps,
87 key: config.key || keys.id
88 }, function (err, rpc) {
89 if(err) {
90 if (/could not connect/.test(err.message)) {
91 console.log('Error: Could not connect to the scuttlebot server.')
92 console.log('Use the "server" command to start it.')
93 if(config.verbose) throw err
94 process.exit(1)
95 }
96 throw err
97 }
98
99 // add aliases
100 for (var k in cmdAliases) {
101 rpc[k] = rpc[cmdAliases[k]]
102 manifest[k] = manifest[cmdAliases[k]]
103 }
104
105 // add some extra commands
106 manifest.version = 'async'
107 manifest.config = 'sync'
108 rpc.version = function (cb) {
109 console.log(require('./package.json').version)
110 cb()
111 }
112 rpc.config = function (cb) {
113 console.log(JSON.stringify(config, null, 2))
114 cb()
115 }
116
117 // HACK
118 // we need to output the hash of blobs that are added via blobs.add
119 // because muxrpc doesnt support the `sink` callback yet, we need this manual override
120 // -prf
121 if (process.argv[2] === 'blobs.add') {
122 var filename = process.argv[3]
123 var source =
124 filename ? File(process.argv[3])
125 : !process.stdin.isTTY ? toPull.source(process.stdin)
126 : (function () {
127 console.error('USAGE:')
128 console.error(' blobs.add <filename> # add a file')
129 console.error(' source | blobs.add # read from stdin')
130 process.exit(1)
131 })()
132 var hasher = createHash('sha256')
133 pull(
134 source,
135 hasher,
136 rpc.blobs.add(function (err) {
137 if (err)
138 throw err
139 console.log('&'+hasher.digest)
140 process.exit()
141 })
142 )
143 return
144 }
145
146 // run commandline flow
147 muxrpcli(argv, manifest, rpc, config.verbose)
148 })
149}
150
151
152
153
154
155
156

Built with git-ssb-web