diff options
| author | Ev Bogue <ev@evbogue.com> | 2019-04-25 21:16:17 -0500 | 
|---|---|---|
| committer | Ev Bogue <ev@evbogue.com> | 2019-04-25 21:16:17 -0500 | 
| commit | bd14700d559f08e1585cf6ae40b6f78c9cd295eb (patch) | |
| tree | 0832194cbe8a8eb43be0ce5750f0d254a6896021 | |
| parent | 48dbaa05211d817b63a0acbcf425b7c15400a259 (diff) | |
this isnt quite working yet, but commiting anyway
| -rw-r--r-- | app.js | 14 | ||||
| -rw-r--r-- | bog.js | 12 | ||||
| -rw-r--r-- | css/style.css | 4 | ||||
| -rw-r--r-- | gossip.js | 74 | ||||
| -rw-r--r-- | index.html | 1 | ||||
| -rw-r--r-- | render.js | 12 | ||||
| -rw-r--r-- | server.js | 66 | ||||
| -rw-r--r-- | views.js | 14 | 
8 files changed, 175 insertions, 22 deletions
| @@ -25,17 +25,11 @@ function composer (keys, reply) {                textarea.value = ''                if (reply) {                  messageDiv.removeChild(messageDiv.firstChild) -                if (messageDiv.firstChild) { -                  messageDiv.insertBefore(h('div', {classList: 'submessage'}, [render(msg, keys)]), messageDiv.childNodes[1]) -                } else { -                  messageDiv.appendChild(h('div', {classList: 'submessage'}, [render(msg, keys)])) -                } +              } +              if (messageDiv.firstChild) { +                messageDiv.insertBefore(render(msg, keys), messageDiv.childNodes[1])                } else { -                if (messageDiv.firstChild) { -                  messageDiv.insertBefore(render(msg, keys), messageDiv.childNodes[1]) -                } else { -                  messageDiv.appendChild(render(msg, keys)) -                } +                messageDiv.appendChild(render(msg, keys))                }              })            })  @@ -25,7 +25,15 @@ async function keys (key) {        publicKey: '@' + nacl.util.encodeBase64(genkey.publicKey),        privateKey: nacl.util.encodeBase64(genkey.secretKey)      } -    localforage.setItem('id', keypair) +    if (keypair.publicKey.includes('/')) { +      console.log('TRYING AGAIN') +      setTimeout(function () { +        location.reload() +      }, 10) +    } else { +      localforage.setItem('id', keypair) +    } +      return keypair     }  } @@ -103,7 +111,7 @@ async function publish (post, keys) {    } else { -    post.seq = 0 +    post.seq = 1       message.key = '%' + nacl.util.encodeBase64(nacl.hash(nacl.util.decodeUTF8(JSON.stringify(post)))),      message.signature = nacl.util.encodeBase64(nacl.sign(nacl.util.decodeUTF8(JSON.stringify(post)), nacl.util.decodeBase64(keys.privateKey))) diff --git a/css/style.css b/css/style.css index 7a517d1..ae1256b 100644 --- a/css/style.css +++ b/css/style.css @@ -56,14 +56,14 @@ hr {    border-radius: 5px;  } -.message, .message > *, .navbar, .navbar > * { +/*.message, .message > *, .navbar, .navbar > * {    animation: fadein .5s;  }  @keyframes fadein {      from { opacity: 0; }      to   { opacity: 1; } -} +}*/  .submessage { diff --git a/gossip.js b/gossip.js new file mode 100644 index 0000000..b598dde --- /dev/null +++ b/gossip.js @@ -0,0 +1,74 @@ +function sync (src, server, keys) { +  var ws = new WebSocket(server + src) + +  console.log(server) +  console.log(src) +  console.log(keys.publicKey) +   +  bog(src).then(srclog => { +    if (srclog) { +      open(srclog[0]).then(msg => { +        var req = { +          src, +          seq: msg.seq, +          requester: keys.publicKey +        } +        console.log(req) +        ws.onopen = function () { +          ws.send(JSON.stringify(req)) +        } +        ws.onmessage = function (message) { +          var serverMsg = JSON.parse(message.data) +          console.log(serverMsg) +          if (msg.seq === serverMsg.seq) { +            console.log('DO NOTHING') +          } else if (msg.seq > serverMsg.seq) { +            console.log('SENDING') +            var diff = msg.seq - serverMsg.seq +            console.log(diff) +            var sendlog = srclog.slice(0, diff) +            console.log(sendlog) +            var send = { +              src, +              log: sendlog, +              requester: keys.publicKey +            } +            console.log(send) +            ws.send(JSON.stringify(send)) +          } else { +            console.log('RECEIVING') +                 +          } +        } +      }) +    } else { +      console.log('NO LOG!') +      var req = { +        src, +        seq: null, +        requester: keys.publicKey +      } + +      ws.onopen = function () { +        ws.send(JSON.stringify(req)) +      } +      ws.onmessage = function (message) { +        var serverMsg = JSON.parse(message.data) +        console.log(serverMsg) +        localforage.getItem('log').then(log => { +          if (log) { +            var newlog = serverMsg.log.concat(log) + +            localforage.setItem('log', newlog) +          } +        }) + +        localforage.setItem(src, serverMsg.log) + +        setTimeout(function () { +          location.reload() +        }, 1000) +      } +    } +  }) +} @@ -13,6 +13,7 @@      <script src="./lib/marked.min.js"></script>      <script src="./lib/misc.js"></script>      <script src="bog.js"></script> +    <script src="gossip.js"></script>      <script src="render.js"></script>      <script src="views.js"></script>      <script src="app.js"></script> @@ -14,9 +14,10 @@ function getHeader (post, mini) {  }  function render (msg, keys) { -  var messageDiv = h('messageDiv', {id: msg.key}) +  var messageDiv = h('div', {id: msg.key})    var message = h('div', {classList: 'message'}) +  /* TODO: this is really slow for some reason    bog().then(logger => {      logger.forEach(function (nextPost) {        open(nextPost).then(nextMessage => { @@ -28,7 +29,7 @@ function render (msg, keys) {          }        })      }) -  })  +  })*/    if (msg.type == 'post') {      message.appendChild(getHeader(msg)) @@ -43,7 +44,12 @@ function render (msg, keys) {      message.appendChild(h('div', [msg.text]))      message.appendChild(h('button', {        onclick: function () { -        messageDiv.appendChild(composer(keys, msg))  +        if (messageDiv.firstChild) { +          messageDiv.insertBefore(h('div', {classList: 'submessage'}, [composer(keys, msg)]), messageDiv.childNodes[1]) +        } else { +          messageDiv.appendChild(h('div', {classList: 'submessage'}, [composer(keys, msg)]))  +        } +        }      }, ['Reply']))    }  @@ -21,7 +21,71 @@ 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)) +            // COMPARE SEQ +          } +        }) +      } else { +        var res = { +          feed: req.src, +          seq: null +        } +        console.log(res) +        ws.send(JSON.stringify(res)) +      } +    } else { +      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') +        }) +      } +    } +  })  }) @@ -7,12 +7,18 @@ function threadPage (src, keys) {  }  function profilePage (src, keys) { +  var server = 'ws://localhost:8080/' + +  sync(src, server, keys) +    bog(src).then(log => { -    log.forEach(function (msg) { -      open(msg).then(post => { -        scroller.appendChild(render(post, keys)) +    if (log) { +      log.forEach(function (msg) { +        open(msg).then(post => { +          scroller.appendChild(render(post, keys)) +        })        }) -    }) +    }    })  } | 
