aboutsummaryrefslogtreecommitdiff
path: root/server.js
blob: d963a1195447d688461cf2bcd2813cab0eb6f8ca (plain)
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
92
93
94
95
96
97
98
99
100
101
102
103
104
// static server (8089)

var http = require('http')
var serve = require('ecstatic')
var open = require('open')

http.createServer(
  serve({ root: __dirname})
).listen(8089)

open('http://localhost:8089')

// ws server (8080)

var WebSocket = require('ws')
var fs = require('fs')
var nacl = require('tweetnacl')
    nacl.util = require('tweetnacl-util')

var wserver = new WebSocket.Server({ port: 8080 })

wserver.on('connection', function (ws) {
  ws.on('message', function (message) {
    var req = JSON.parse(message)
    console.log(req)
    if (req.seq) {
      if (fs.existsSync(__dirname + '/bogs/' + req.src)) {
        fs.readFile(__dirname + '/bogs/' + req.src, 'UTF-8', function (err, data) {
          if (data) {
            var log = JSON.parse(data)
            console.log(log[0])
            var pubkey = nacl.util.decodeBase64(req.src.substring(1))
            var sig = nacl.util.decodeBase64(log[0].signature)
            var opened = JSON.parse(nacl.util.encodeUTF8(nacl.sign.open(sig, pubkey)))

            console.log(opened)
            var res = {
              feed: req.src,
              seq: opened.seq
            }
            ws.send(JSON.stringify(res))
            if(res.seq > req.seq) {
              console.log('SEND DIFF TO CLIENT')
              var diff = res.seq - req.seq
              console.log(diff)
              var sendlog = log.slice(0, diff)
              var send = {
                src: req.src,
                log: sendlog
              }
              console.log(send)
              ws.send(JSON.stringify(send))
            }

            // COMPARE SEQ
          }
        })
      } else {
        var res = {
          feed: req.src,
          seq: null
        }
        console.log(res)
        ws.send(JSON.stringify(res))
      }
    } else if (req.seq == null) {
      if (fs.existsSync(__dirname + '/bogs/' + req.src)) { 
        fs.readFile(__dirname + '/bogs/' + req.src, 'UTF-8', function (err, data) {
          var log = JSON.parse(data)
          var res = {
            src: req.src,
            log
          }
          console.log('SENDING FULL LOG')
          ws.send(JSON.stringify(res))
        })
      }
    }
    if (req.log) {
      console.log('LOG')
      console.log(req.log)
      if (fs.existsSync(__dirname + '/bogs/' + req.src)) {
        fs.readFile(__dirname + '/bogs/' + req.src, 'UTF-8', function (err, data) {
          var serverlog = JSON.parse(data)

          var newlog = req.log.concat(serverlog)

          fs.writeFile(__dirname + '/bogs/' + req.src, JSON.stringify(newlog), 'UTF-8', function (err, success) {
            console.log('APPENDED DIFF AND WROTE LOG')
          })

          console.log('TRY APPENDING')
          // read bogfile, append received data, and then save again
        })
      } else {
        fs.writeFile(__dirname + '/bogs/' + req.src, JSON.stringify(req.log), 'UTF-8', function (err, success) {
          if (err) throw err
          else
            console.log('WROTE LOG')
        })
      }
    }
  })
})