forked from ssbc/patchwork
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
91 lines (78 loc) · 3.02 KB
/
index.js
File metadata and controls
91 lines (78 loc) · 3.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#! /usr/bin/env node
// load config
var path = require('path')
var ssbKeys = require('ssb-keys')
var config = require('ssb-config/inject')(process.env.ssb_appname)
config.keys = ssbKeys.loadOrCreateSync(path.join(config.path, 'secret'))
if(config.keys.curve === 'k256')
throw new Error('k256 curves are no longer supported,'+
'please delete' + path.join(config.path, 'secret'))
// validate the config
var configOracle = require('./config')(config)
if (configOracle.hasError()) {
if (configOracle.allowUnsafe())
console.log('\nIgnoring unsafe configuration due to --unsafe flag.')
else {
console.log('\nAborted due to unsafe config. Run again with --unsafe to override.')
return
}
}
logLicense() // per the GPL's recommendation, let ppl know the license
console.log('Starting...')
// start sbot
var createSbot = require('scuttlebot')
.use(require('scuttlebot/plugins/master'))
.use(require('scuttlebot/plugins/gossip'))
.use(require('scuttlebot/plugins/friends'))
.use(require('scuttlebot/plugins/replicate'))
.use(require('scuttlebot/plugins/blobs'))
.use(require('scuttlebot/plugins/invite'))
.use(require('scuttlebot/plugins/block'))
.use(require('scuttlebot/plugins/logging'))
.use(require('scuttlebot/plugins/private'))
.use(require('scuttlebot/plugins/local'))
.use(require('scuttlebot/plugins/plugins'))
.use(require('ssb-notifier'))
.use(require('./api'))
require('scuttlebot/plugins/plugins').loadUserPlugins(createSbot, config)
var sbot = createSbot(config)
// write manifest file
var fs = require('fs')
fs.writeFileSync(
path.join(config.path, 'manifest.json'),
JSON.stringify(sbot.getManifest(), null, 2)
)
// setup server
var http = require('http')
var https = require('https')
var ws = require('pull-ws-server')
var httpStack = require('./http-server')
var httpServerFn = httpStack.AppStack(sbot, { uiPath: path.join(__dirname, 'ui') }, configOracle)
var wsServerFn = require('./ws-server')(sbot)
var serverOpts = configOracle.useTLS() ? configOracle.getTLS() : {}
serverOpts.verifyClient = require('./ws-server').verifyClient(configOracle)
var server = ws.createServer(serverOpts)
server.on('error', fatalError)
server.on('connection', wsServerFn)
server.on('request', httpServerFn)
server.listen(configOracle.getPort())
console.log('Serving at', configOracle.getLocalUrl())
// basic error handling
function fatalError (e) {
if (e.code === 'EADDRINUSE')
console.error('\nError: port '+e.port+' isn\'t available. Is Patchwork already running?\n')
else
console.error(e.stack || e.toString())
process.exit(1)
}
process.on('uncaughtException', fatalError)
// run electron-specific code, if appropriate
if (process.versions['electron']) {
require('./electron')(configOracle)
}
function logLicense () {
console.log('Patchwork - Copyright (C) 2015-2016 Secure Scuttlebutt Consortium')
console.log('This program comes with ABSOLUTELY NO WARRANTY.')
console.log('This is free software, and you are welcome to redistribute it under certain conditions (GPL-3.0).')
console.log('')
}