Merge pull request #8 from sairajzero/master

This commit is contained in:
Sai Raj 2020-12-19 22:38:06 +05:30 committed by GitHub
commit 037fc4b41b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -8064,6 +8064,8 @@ Bitcoin.Util = {
processRequestFromUser(gid, uid, data);
else if (data.message)
processDataFromUser(gid, uid, data);
else if (data.edit)
processEditFromUser(gid, uid, data);
else if (data.mark)
processMarkFromUser(gid, uid, data);
else if (data.delete)
@ -8081,7 +8083,6 @@ Bitcoin.Util = {
}
}
//Process request from users
function processRequestFromUser(gid, uid, data) {
let request = data.request;
if (!floCrypto.validateAddr(request.receiverID))
@ -8110,7 +8111,6 @@ Bitcoin.Util = {
})
}
//Process data from users
function processDataFromUser(gid, uid, data) {
if (!floCrypto.validateAddr(data.receiverID))
throw Error("Invalid receiverID")
@ -8148,9 +8148,43 @@ Bitcoin.Util = {
})
}
function processEditFromUser(gid, uid, data) {
if (!floCrypto.validateAddr(data.receiverID))
throw Error("Invalid receiverID")
if (!floCrypto.validateAddr(data.requestorID))
throw Error("Invalid requestorID")
let closeNode = floSupernode.kBucket.closestNode(data.receiverID)
if (!floGlobals.serveList.includes(closeNode))
throw Error("Incorrect Supernode")
let disk = data.application in floGlobals.appList ? data.application : floGlobals.defaultDisk;
compactIDB.readData(disk, data.edit.vectorClock, `SN_${closeNode}`).then(d => {
try {
if (!d.comment.startsWith("EDIT:"))
throw ("Data immutable");
else if (d.senderID !== data.requestorID)
throw ("Invalid requestorID")
else {
d.sign = data.edit.sign;
d.comment = data.edit.comment;
d.time = data.edit.time = data.time;
let hashcontent = ["receiverID", "time", "application", "type", "message", "comment"]
.map(x => d[x]).join("|");
if (!floCrypto.verifySign(hashcontent, data.edit.sign, d.pubKey))
throw Error("Invalid signature")
compactIDB.writeData(disk, d, data.edit.vectorClock, `SN_${closeNode}`).then(r => {
floSupernode.supernodeClientWS.send(`@${uid}#${gid}:${JSON.stringify(true)}`)
sendBackupEdit(data.application, data.edit, closeNode)
})
}
} catch (error) {
floSupernode.supernodeClientWS.send(`@${uid}#${gid}:${error.toString()}`)
}
})
}
function processMarkFromUser(gid, uid, data) {
if (!floCrypto.validateAddr(data.receiverID))
throw Error("Invalid requestorID")
throw Error("Invalid receiverID")
if (!(data.application in floGlobals.appList))
throw Error("Invalid application")
if (!floCrypto.validateAddr(data.requestorID) ||
@ -8753,7 +8787,7 @@ Bitcoin.Util = {
console.info(result)
resolve(
`Updated Supernode Configuration`
)
)
}).catch(error => reject(error))
}).catch(error => reject(error))
}).catch(error => reject(error))
@ -8982,6 +9016,9 @@ Bitcoin.Util = {
case "backupMark":
markBackupData(data.sn_msg)
break;
case "backupEdit":
editBackupData(data.sn_msg)
break;
case "supernodeUp":
nodeBackOnline(data.from)
break;
@ -9086,6 +9123,17 @@ Bitcoin.Util = {
sendToBackupNodes(sn_msg);
}
function sendBackupEdit(application, edit, snID) {
var sn_msg = {
type: "backupEdit",
snID: snID,
time: Date.now(),
application: application,
edit: edit
}
sendToBackupNodes(sn_msg);
}
function sendStoredData(snID, receiver) {
const sendObs = (obs, node) => new Promise((res, rej) => {
compactIDB.readAllData(obs, `SN_${snID}`).then(result => {
@ -9190,6 +9238,18 @@ Bitcoin.Util = {
}
}
function editBackupData(data) {
if (floGlobals.storedList.includes(data.snID)) {
let disk = data.application in floGlobals.appList ? data.application : floGlobals.defaultDisk;
compactIDB.readData(disk, data.edit.vectorClock, `SN_${data.snID}`).then(d => {
d.sign = data.edit.sign;
d.time = data.edit.time;
d.comment = data.edit.comment;
compactIDB.writeData(disk, d, data.edit.vectorClock, `SN_${data.snID}`)
})
}
}
function indicateSupernodeUp() {
console.log("Indicating supernode is up")
if (floGlobals.backupNodes.length) {