diff options
| -rw-r--r-- | gossip.js | 20 | ||||
| -rw-r--r-- | server.js | 184 | ||||
| -rw-r--r-- | views.js | 8 | 
3 files changed, 113 insertions, 99 deletions
| @@ -2,15 +2,23 @@ function sync (subs, keys) {    var wsServers -  localforage.getItem('pubs').then(function (servers) { +  localforage.getItem('securepubs').then(function (servers) {      if (servers) { -      console.log(servers)        wsServers = servers      } else { -      servers = ['ws://localhost:8080/~@OXJ7Ma1eu8HOEakF+TW9yk1k09FbOqUSyMVneXWdLaM='] -      localforage.setItem('pubs', servers) -      console.log(servers) -      wsServers = servers +      servers = ['ws://localhost:8080', 'ws://bogbook.com'] +      var pubs = [] +      servers.forEach(server => { +        var ws = new WebSocket(server) +        ws.onopen = function () { +          ws.send(JSON.stringify({requester: keys.publicKey, sendpub: true})) +        } +        ws.onmessage = function (message) { +          pubs.push(server + '/~' + message.data) +          localforage.setItem('securepubs', pubs) +        } +      }) +      wsServers = pubs      }    }).then(function () {      subs.forEach(function (sub) { @@ -31,99 +31,105 @@ bog.keys().then(key => {    wserve.on('connection', function (ws) {      ws.on('message', function (message) {        var req = JSON.parse(message) -      bog.unbox(req.box, req.requester, key).then(unboxed => { -        var unboxedreq = JSON.parse(nacl.util.encodeUTF8(unboxed)) -        if (unboxedreq.seq === 0) { -          console.log(req.requester + ' asked the full log of ' + unboxedreq.author) -          fs.readFile(bogdir + unboxedreq.author, 'UTF-8', function (err, data) { -            if (data) { -              //var feed = JSON.stringify(data) -              var feed = data -              bog.box(feed, req.requester, key).then(boxed => { -                var obj = { -                  requester: key.publicKey, -                  box: boxed -                } -                ws.send(JSON.stringify(obj)) -                console.log('Sent full log of ' + unboxedreq.author + ' to ' + req.requester) -              }) -            } -          }) -        } -        if (unboxedreq.seq) { -          console.log(req.requester + ' asked for feed ' + unboxedreq.author + ' after sequence ' + unboxedreq.seq) -          // check to see if we have the feed on disk -          fs.readFile(bogdir + unboxedreq.author, 'UTF-8', function (err, data) { -            if (data) { -              // TODO open the latest message, and check the sequence number -              var feed = JSON.parse(data) -              bog.open(feed[0]).then(msg => { -                if (unboxedreq.seq === msg.seq) {  -                  console.log(unboxedreq.author + '\'s feed is identical, sending nothing to client') -                }  - -                if (unboxedreq.seq > msg.seq) { -                  // right now the client is still sending the entire log, which works just fine but isn't optimal -                  console.log('client feed is longer, requesting diff from client') -                  var reqdiff = JSON.stringify({author: unboxedreq.author, seq: msg.seq}) -                  bog.box(reqdiff, req.requester, key).then(boxed => { -                    var obj = { -                      requester: key.publicKey, -                      box: boxed -                    } -                    ws.send(JSON.stringify(obj)) -                  }) -                } -                 -                if (unboxedreq.seq < msg.seq) { -                  console.log('client feed is shorter, sending diff to client') -                  var diff = JSON.stringify(feed.slice(0, msg.seq - unboxedreq.seq)) -                  bog.box(diff, req.requester, key).then(boxed => { -                    var obj = { -                      requester: key.publicKey, -                      box: boxed -                    } -                    ws.send(JSON.stringify(obj)) -                  }) -                }   -              })  -            } else { -              // if we don't have the feed, request the feed from the client and save -              console.log('We don\'t have the log on the server, requesting log from ' + req.requester ) -              var reqwhole = JSON.stringify({author: unboxedreq.author, seq: 0}) - -              bog.box(reqwhole, req.requester, key).then(boxed => { -                var obj = { -                  requester: key.publicKey, -                  box: boxed   -                } -                ws.send(JSON.stringify(obj)) -              }) -            } -          }) -        } else if (Array.isArray(unboxedreq)) { -          // first check to make sure that we have an entire log -          bog.open(unboxedreq[0]).then(msg => { -            if (msg.seq === unboxedreq.length) { -              fs.writeFile(bogdir + msg.author, JSON.stringify(unboxedreq), 'UTF-8', function (err, success) { -                console.log('Saved full log of ' + msg.author + ' sent by ' + req.requester) -              }) -            } if (msg.seq > unboxedreq.length) { -              fs.readFile(bogdir + msg.author, 'UTF-8', function (err, data) { +      console.log(req) +      if (req.sendpub) { +        ws.send(key.publicKey) +      } +      else {  +        bog.unbox(req.box, req.requester, key).then(unboxed => { +          var unboxedreq = JSON.parse(nacl.util.encodeUTF8(unboxed)) +          if (unboxedreq.seq === 0) { +            console.log(req.requester + ' asked the full log of ' + unboxedreq.author) +            fs.readFile(bogdir + unboxedreq.author, 'UTF-8', function (err, data) { +              if (data) { +                //var feed = JSON.stringify(data) +                var feed = data +                bog.box(feed, req.requester, key).then(boxed => { +                  var obj = { +                    requester: key.publicKey, +                    box: boxed +                  } +                  ws.send(JSON.stringify(obj)) +                  console.log('Sent full log of ' + unboxedreq.author + ' to ' + req.requester) +                }) +              } +            }) +          } +          if (unboxedreq.seq) { +            console.log(req.requester + ' asked for feed ' + unboxedreq.author + ' after sequence ' + unboxedreq.seq) +            // check to see if we have the feed on disk +            fs.readFile(bogdir + unboxedreq.author, 'UTF-8', function (err, data) { +              if (data) { +                // TODO open the latest message, and check the sequence number                  var feed = JSON.parse(data) -                bog.open(feed[0]).then(lastmsg => { -                  if (unboxedreq.length + lastmsg.seq === msg.seq) { -                    var newlog = unboxedreq.concat(feed) -                    fs.writeFile(bogdir + msg.author, JSON.stringify(newlog), 'UTF-8', function (err, success) { -                      console.log('combined existing feed of ' + msg.author + ' with diff and saved to server') +                bog.open(feed[0]).then(msg => { +                  if (unboxedreq.seq === msg.seq) {  +                    console.log(unboxedreq.author + '\'s feed is identical, sending nothing to client') +                  }  + +                  if (unboxedreq.seq > msg.seq) { +                    // right now the client is still sending the entire log, which works just fine but isn't optimal +                    console.log('client feed is longer, requesting diff from client') +                    var reqdiff = JSON.stringify({author: unboxedreq.author, seq: msg.seq}) +                    bog.box(reqdiff, req.requester, key).then(boxed => { +                      var obj = { +                        requester: key.publicKey, +                        box: boxed +                      } +                      ws.send(JSON.stringify(obj)) +                    }) +                  } +                   +                  if (unboxedreq.seq < msg.seq) { +                    console.log('client feed is shorter, sending diff to client') +                    var diff = JSON.stringify(feed.slice(0, msg.seq - unboxedreq.seq)) +                    bog.box(diff, req.requester, key).then(boxed => { +                      var obj = { +                        requester: key.publicKey, +                        box: boxed +                      } +                      ws.send(JSON.stringify(obj))                      }) +                  }   +                })  +              } else { +                // if we don't have the feed, request the feed from the client and save +                console.log('We don\'t have the log on the server, requesting log from ' + req.requester ) +                var reqwhole = JSON.stringify({author: unboxedreq.author, seq: 0}) + +                bog.box(reqwhole, req.requester, key).then(boxed => { +                  var obj = { +                    requester: key.publicKey, +                    box: boxed                      } +                  ws.send(JSON.stringify(obj)) +                }) +              } +            }) +          } else if (Array.isArray(unboxedreq)) { +            // first check to make sure that we have an entire log +            bog.open(unboxedreq[0]).then(msg => { +              if (msg.seq === unboxedreq.length) { +                fs.writeFile(bogdir + msg.author, JSON.stringify(unboxedreq), 'UTF-8', function (err, success) { +                  console.log('Saved full log of ' + msg.author + ' sent by ' + req.requester) +                }) +              } if (msg.seq > unboxedreq.length) { +                fs.readFile(bogdir + msg.author, 'UTF-8', function (err, data) { +                  var feed = JSON.parse(data) +                  bog.open(feed[0]).then(lastmsg => { +                    if (unboxedreq.length + lastmsg.seq === msg.seq) { +                      var newlog = unboxedreq.concat(feed) +                      fs.writeFile(bogdir + msg.author, JSON.stringify(newlog), 'UTF-8', function (err, success) { +                        console.log('combined existing feed of ' + msg.author + ' with diff and saved to server') +                      }) +                    } +                  })                  }) -              }) -            }  -          }) -        }  -      }) +              }  +            }) +          }  +        }) +      }      })    })  }) @@ -206,7 +206,7 @@ function pubs () {    var add = h('input', {placeholder: 'Add a pub'}) -  localforage.getItem('pubs').then(function (servers) { +  localforage.getItem('securepubs').then(function (servers) {      message.appendChild(h('div', [        add, @@ -214,7 +214,7 @@ function pubs () {          onclick: function () {            if (add.value) {              servers.push(add.value) -            localforage.setItem('pubs', servers).then(function () { location.reload() }) +            localforage.setItem('securepubs', servers).then(function () { location.reload() })            }          }        }, ['Add a pub']) @@ -226,7 +226,7 @@ function pubs () {          h('button', {            onclick: function () {              var newServers = servers.filter(item => item !== pub) -            localforage.setItem('pubs', newServers).then(function () { location.reload() }) +            localforage.setItem('securepubs', newServers).then(function () { location.reload() })            }          }, ['Remove'])        ])) @@ -235,7 +235,7 @@ function pubs () {    message.appendChild(h('button', {      onclick: function () { -      localforage.removeItem('pubs').then(function () { +      localforage.removeItem('securepubs').then(function () {          location.hash = ''          location.reload()        }) | 
