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)) + }) }) - }) + } }) } |