|
|
|
@ -7,7 +7,7 @@ function sync (subs, keys) {
|
|
|
|
|
console.log(servers)
|
|
|
|
|
wsServers = servers
|
|
|
|
|
} else {
|
|
|
|
|
servers = ['ws://localhost:8080/', 'ws://bogbook.com/']
|
|
|
|
|
servers = ['ws://localhost:8080/~@OXJ7Ma1eu8HOEakF+TW9yk1k09FbOqUSyMVneXWdLaM=']
|
|
|
|
|
localforage.setItem('pubs', servers)
|
|
|
|
|
console.log(servers)
|
|
|
|
|
wsServers = servers
|
|
|
|
@ -17,92 +17,33 @@ function sync (subs, keys) {
|
|
|
|
|
wsServers.forEach(function (server, index) {
|
|
|
|
|
setTimeout(function () {
|
|
|
|
|
console.log('SYNCING WITH: ' + server + ' to fetch ' + sub)
|
|
|
|
|
var ws = new WebSocket(server + sub)
|
|
|
|
|
var split = server.split('~')
|
|
|
|
|
var serverurl = split[0]
|
|
|
|
|
var serverpub = split[1]
|
|
|
|
|
var ws = new WebSocket(serverurl)
|
|
|
|
|
|
|
|
|
|
bog(sub).then(srclog => {
|
|
|
|
|
if (srclog) {
|
|
|
|
|
open(srclog[0]).then(msg => {
|
|
|
|
|
console.log(msg)
|
|
|
|
|
var req = {
|
|
|
|
|
src: sub,
|
|
|
|
|
seq: msg.seq
|
|
|
|
|
}
|
|
|
|
|
ws.onopen = function () {
|
|
|
|
|
ws.send(JSON.stringify(req))
|
|
|
|
|
var message = JSON.stringify(msg)
|
|
|
|
|
// if we have a log then send the latest log and see if we get anything back
|
|
|
|
|
box(message, serverpub, keys).then(boxed => {
|
|
|
|
|
var obj = {
|
|
|
|
|
requester: keys.publicKey,
|
|
|
|
|
box: boxed
|
|
|
|
|
}
|
|
|
|
|
ws.send(JSON.stringify(obj))
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
ws.onmessage = function (message) {
|
|
|
|
|
var serverMsg = JSON.parse(message.data)
|
|
|
|
|
if (msg.seq === serverMsg.seq) {
|
|
|
|
|
} else if (msg.seq > serverMsg.seq) {
|
|
|
|
|
var diff = msg.seq - serverMsg.seq
|
|
|
|
|
var sendlog = srclog.slice(0, diff)
|
|
|
|
|
var send = {
|
|
|
|
|
src: sub,
|
|
|
|
|
log: sendlog
|
|
|
|
|
//requester: keys.publicKey
|
|
|
|
|
}
|
|
|
|
|
ws.send(JSON.stringify(send))
|
|
|
|
|
} else {
|
|
|
|
|
if (serverMsg.log) {
|
|
|
|
|
var scroller = document.getElementById('scroller')
|
|
|
|
|
var logFromServer = JSON.parse(message.data)
|
|
|
|
|
newlog = logFromServer.log
|
|
|
|
|
|
|
|
|
|
bog().then(log => {
|
|
|
|
|
for (var i = newlog.length; i-- > 0; ) {
|
|
|
|
|
var pubkey = nacl.util.decodeBase64(newlog[i].author.substring(1))
|
|
|
|
|
var sig = nacl.util.decodeBase64(newlog[i].signature)
|
|
|
|
|
var opened = JSON.parse(nacl.util.encodeUTF8(nacl.sign.open(sig, pubkey)))
|
|
|
|
|
log.unshift(opened)
|
|
|
|
|
opened.key = newlog[i].key
|
|
|
|
|
scroller.insertBefore(render(opened, keys), scroller.childNodes[2])
|
|
|
|
|
|
|
|
|
|
if (i === 0) {
|
|
|
|
|
console.log('saved log')
|
|
|
|
|
log.sort((a, b) => a.timestamp - b.timestamp)
|
|
|
|
|
localforage.setItem(sub, newlog.concat(srclog))
|
|
|
|
|
localforage.setItem('log', log.reverse())
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
} else if (srclog === null) {
|
|
|
|
|
var req = {
|
|
|
|
|
src: sub,
|
|
|
|
|
seq: null
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ws.onopen = function () {
|
|
|
|
|
ws.send(JSON.stringify(req))
|
|
|
|
|
console.log('NO LOG IN CLIENT')
|
|
|
|
|
}
|
|
|
|
|
ws.onmessage = function (message) {
|
|
|
|
|
var openedlog = []
|
|
|
|
|
var scroller = document.getElementById('scroller')
|
|
|
|
|
var logFromServer = JSON.parse(message.data)
|
|
|
|
|
log = logFromServer.log
|
|
|
|
|
|
|
|
|
|
localforage.setItem(sub, log)
|
|
|
|
|
|
|
|
|
|
for (var i = log.length; i-- > 0; ) {
|
|
|
|
|
console.log(log[i])
|
|
|
|
|
var pubkey = nacl.util.decodeBase64(log[i].author.substring(1))
|
|
|
|
|
var sig = nacl.util.decodeBase64(log[i].signature)
|
|
|
|
|
var opened = JSON.parse(nacl.util.encodeUTF8(nacl.sign.open(sig, pubkey)))
|
|
|
|
|
console.log(opened)
|
|
|
|
|
opened.key = log[i].key
|
|
|
|
|
openedlog.push(opened)
|
|
|
|
|
scroller.insertBefore(render(opened, keys), scroller.childNodes[2])
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bog().then(log => {
|
|
|
|
|
var newlog = openedlog.concat(log)
|
|
|
|
|
newlog.sort((a, b) => a.timestamp - b.timestamp)
|
|
|
|
|
localforage.setItem('log', newlog.reverse())
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|