123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- #! /usr/bin/env node
- const moduleAlias = require('module-alias');
- moduleAlias.addAlias('punycode', 'punycode/');
- var fs = require('fs')
- var path = require('path')
- const SecretStack = require('secret-stack')
- var caps = require('ssb-caps')
- var SSB = require('ssb-db')
- var Client = require('ssb-client')
- var cmdAliases = require('./ssb/cli-cmd-aliases')
- var ProgressBar = require('./ssb/progress')
- var packageJson = require('../package.json')
- var Config = require('ssb-config/inject')
- var minimist = require('minimist')
- var muxrpcli = require('muxrpcli')
- var argv = process.argv.slice(2)
- var i = argv.indexOf('--')
- var conf = argv.slice(i+1)
- argv = ~i ? argv.slice(0, i) : argv
- var config = Config("ssb", minimist(conf))
- var config = Config("ssb", {"replicationScheduler": {"autostart": true, "partialReplication": null} ,"pub": true, "local": true, "friends": { "dunbar": 300, "hops":3}, "gossip":{ "connections": 10, "local": true, "friends": true, "seed": false, "global": false}, "connections": {"incoming": {"net": [{"scope": "public","transform": "shs","port": 8008},{"scope": "device","transform": "shs","port": 8008}],"tunnel": [{"scope": "public", "portal": "@1wOEiCjJJ0nEs1OABUIV20valZ1LHUsfHJY/ivBoM8Y=.ed25519", "transform": "shs"}],"onion": [{"scope": "public","transform": "shs"}],"ws": [{"scope": "public","transform": "shs"}]},"outgoing": {"net": [{"transform": "shs"}],"ws": [{"transform": "shs"}],"tunnel": [{"transform": "shs"}]}}})
- var manifestFile = path.join(config.path, 'manifest.json')
- // generate initial info
- if (argv[0] == 'start') {
- console.log(packageJson.name, "[version: "+ packageJson.version+ "]", "[dataPath: "+ config.path+ "]", "["+'logging.level:'+config.logging.level+"]")
- console.log('my key ID:', config.keys.public)
- // add ssb server required plugins
- var tribes = require('ssb-tribes')
- var conn = require('ssb-conn')
- var legacy_conn = require('ssb-legacy-conn')
- var db2 = require('ssb-db2')
- var replication_scheduler = ('ssb-replication-scheduler')
- var friends = require('ssb-friends')
- var ebt = require('ssb-ebt')
- var box = require('ssb-box')
- var threads = require('ssb-threads')
- var invite = require('ssb-invite')
- var conn_db = require('ssb-conn-db')
- var search2 = require('ssb-search2')
- var friend_pub = require('ssb-friend-pub')
- var invite_client = require('ssb-invite-client')
- var tunnel = require('ssb-tunnel')
- var config = require('ssb-config')
- var conn_query = require('ssb-conn-query')
- var conn_hub = require('ssb-conn-hub')
- var conn_staging = require('ssb-conn-staging')
- var device_address = require('ssb-device-address')
- var poll = require('scuttle-poll')
- var gossip = require('ssb-gossip')
- var master = require('ssb-master')
- var logging = require('ssb-logging')
- var partial_replication = require('ssb-partial-replication')
- var about = require('ssb-about')
- var onion = require('ssb-onion')
- var unix = require('ssb-unix-socket')
- var auth = require('ssb-no-auth')
- var backlinks = require('ssb-backlinks')
- var links = require('ssb-links')
- // create ssb server
- function createSsbServer () {
- return SecretStack({ caps }).use(SSB, gossip, tribes, conn, db2, master, ebt, box, threads, invite, conn_db, search2, friend_pub, invite_client, tunnel, config, conn_query, conn_hub, conn_staging, device_address, poll, friends, logging, replication_scheduler, partial_replication, about, onion, unix, auth, backlinks, links)
- }
- // add other required plugins (+flotilla) by SNH-Oasis (client) (plugin order is required!)
- var Server = createSsbServer()
- .use(require('ssb-master'))
- .use(require('ssb-gossip'))
- .use(require('ssb-ebt'))
- .use(require('ssb-friends'))
- .use(require('ssb-blobs'))
- .use(require('ssb-lan'))
- .use(require('ssb-meme'))
- .use(require('ssb-ooo'))
- .use(require('ssb-plugins'))
- .use(require('ssb-conn'))
- .use(require('ssb-box'))
- .use(require('ssb-search'))
- .use(require('ssb-friend-pub'))
- .use(require('ssb-invite-client'))
- .use(require('ssb-logging'))
- .use(require('ssb-replication-scheduler'))
- .use(require('ssb-partial-replication'))
- .use(require("ssb-room/tunnel/client"))
- .use(require('ssb-about'))
- .use(require('ssb-onion'))
- .use(require('ssb-unix-socket'))
- .use(require('ssb-no-auth'))
- .use(require('ssb-backlinks'))
- .use(require("ssb-tangle"))
- .use(require('ssb-links'))
- .use(require('ssb-query'))
- // add third-party plugins (loaded from ~/.ssb/config)
- require('ssb-plugins').loadUserPlugins(Server, config)
- // load config into ssb & start it
- var server = Server(config)
- // generate manifest
- fs.writeFileSync(manifestFile, JSON.stringify(server.getManifest(), null, 2))
- // show server progress
- if(process.stdout.isTTY && (config.logging.level != 'info'))
- ProgressBar(server.progress)
- } else {
- var manifest
- try {
- manifest = JSON.parse(fs.readFileSync(manifestFile))
- } catch (err) {
- throw explain(err,
- 'no manifest file'
- + '- should be generated first time server is run'
- )
- }
- var opts = {
- manifest: manifest,
- port: config.port,
- host: 'localhost',
- caps: config.caps,
- key: config.key || config.keys.id
- }
- Client(config.keys, opts, function (err, rpc) {
- if(err) {
- if (/could not connect/.test(err.message)) {
- console.error('Error: Could not connect to ssb-server ' + opts.host + ':' + opts.port)
- console.error('Use the "start" command to start it.')
- console.error('Use --verbose option to see full error')
- if(config.verbose) throw err
- process.exit(1)
- }
- throw err
- }
- for (var k in cmdAliases) {
- rpc[k] = rpc[cmdAliases[k]]
- manifest[k] = manifest[cmdAliases[k]]
- }
- manifest.config = 'sync'
- rpc.config = function (cb) {
- console.log(JSON.stringify(config, null, 2))
- cb()
- }
- if (process.argv[2] === 'blobs.add') {
- var filename = process.argv[3]
- var source =
- filename ? File(process.argv[3])
- : !process.stdin.isTTY ? toPull.source(process.stdin)
- : (function () {
- console.error('USAGE:')
- console.error(' blobs.add <filename> # add a file')
- console.error(' source | blobs.add # read from stdin')
- process.exit(1)
- })()
- pull(
- source,
- rpc.blobs.add(null, function (err, hash) {
- if (err)
- throw err
- console.log(hash)
- process.exit()
- })
- )
- return
- }
- muxrpcli(argv, manifest, rpc, config.verbose)
- })
- }
|