Files: 851531c0e3ba49e7d6301e1941f7cf92e8f91628 / server.js
2834 bytesRaw
1 | |
2 | |
3 | const http = require('http') |
4 | const serve = require('ecstatic') |
5 | const fs = require('fs') |
6 | const path = require('path') |
7 | const ssbKeys = require('ssb-keys') |
8 | const minimist = require('minimist') |
9 | const notifier = require('node-notifier') |
10 | const SysTray = require('systray').default |
11 | |
12 | let argv = process.argv.slice(2) |
13 | let i = argv.indexOf('--') |
14 | let conf = argv.slice(i + 1) |
15 | argv = ~i ? argv.slice(0, i) : argv |
16 | |
17 | const config = require('ssb-config/inject')(process.env.ssb_appname, minimist(conf)) |
18 | |
19 | const keys = ssbKeys.loadOrCreateSync(path.join(config.path, 'secret')) |
20 | if (keys.curve === 'k256') { |
21 | throw new Error('k256 curves are no longer supported,' + |
22 | 'please delete' + path.join(config.path, 'secret')) |
23 | } |
24 | |
25 | const manifestFile = path.join(config.path, 'manifest.json') |
26 | |
27 | // special server command: |
28 | // import sbot and start the server |
29 | |
30 | const createSbot = require('scuttlebot') |
31 | // .use(require('scuttlebot/plugins/plugins')) |
32 | .use(require('scuttlebot/plugins/master')) |
33 | .use(require('scuttlebot/plugins/gossip')) |
34 | .use(require('scuttlebot/plugins/replicate')) |
35 | .use(require('ssb-friends')) |
36 | .use(require('ssb-blobs')) |
37 | .use(require('scuttlebot/plugins/invite')) |
38 | .use(require('scuttlebot/plugins/local')) |
39 | // .use(require('scuttlebot/plugins/logging')) |
40 | // .use(require('scuttlebot/plugins/private')) |
41 | // .use(require('ssb-query')) |
42 | // .use(require('ssb-links')) |
43 | .use(require('ssb-ooo')) |
44 | .use(require('ssb-ebt')) |
45 | .use(require('ssb-ws')) |
46 | .use(require('ssb-names')) |
47 | .use(require('ssb-backlinks')) |
48 | |
49 | // http.createServer( |
50 | // serve({ root: path.resolve('../webextension/build/') }) |
51 | // ).listen(3013) |
52 | |
53 | // add third-party plugins |
54 | // require('./plugins/plugins').loadUserPlugins(createSbot, config) |
55 | |
56 | // start server |
57 | |
58 | config.keys = keys |
59 | const server = createSbot(config) |
60 | |
61 | // write RPC manifest to ~/.ssb/manifest.json |
62 | fs.writeFileSync(manifestFile, JSON.stringify(server.getManifest(), null, 2)) |
63 | |
64 | const icon = fs.readFileSync(path.join(__dirname, `icon.${process.platform === 'win32' ? 'ico' : 'png'}`)) |
65 | const tray = new SysTray({ |
66 | menu: { |
67 | icon: icon.toString('base64'), |
68 | title: 'Secure Scuttlebutt', |
69 | tooltip: 'Secure Scuttlebutt tray app', |
70 | items: [ |
71 | |
72 | { |
73 | title: 'Quit', |
74 | tooltip: 'Stop sbot and quit tray application', |
75 | checked: false, |
76 | enabled: true |
77 | } |
78 | ] |
79 | }, |
80 | debug: false, |
81 | copyDir: true, |
82 | }) |
83 | |
84 | tray.onClick(action => { |
85 | switch (action.seq_id) { |
86 | case 0: |
87 | console.log("### EXITING IN TWO SECONDS ###") |
88 | |
89 | notifier.notify({ |
90 | title: 'Secure Scuttlebutt', |
91 | message: `Secure Scuttlebutt will exit in two seconds...`, |
92 | icon: path.join(__dirname, "icon.png"), |
93 | wait: true, |
94 | id: 0, |
95 | }) |
96 | |
97 | tray.kill() |
98 | } |
99 | }) |
100 | |
101 | tray.onExit((code, signal) => { |
102 | setTimeout(() => |
103 | process.exit(0), 2000) |
104 | }) |
Built with git-ssb-web