@${p}
`
profileList.appendChild(element);
}
}
function initselfWebSocket(){
selfWebsocket = new WebSocket("ws://"+location.host+"/ws");
selfWebsocket.onopen = (event) => {
console.log("Connecting");
var serverPass = encrypt.retrieveShamirSecret(JSON.parse(sessionStorage.serverPass));
selfWebsocket.send("$"+serverPass);
};
selfWebsocket.onclose = (event) => {
console.log("DISCONNECTED");
initselfWebSocket();
};
selfWebsocket.onmessage = (event) => {
console.log(event.data);
if(event.data[0] == '$')
return;
try{
data = JSON.parse(event.data);
if(data.follow && encrypt.verify(selfID, data.sign, profiles[data.floID].pubKey)){
var idb = indexedDB.open("FLO_Tweet");
idb.onsuccess = (event) => {
var db = event.target.result;
var obs = db.transaction("followers", "readwrite").objectStore("followers");
obs.add(data.sign,data.floID);
db.close();
};
selfWebsocket.send(`F${data.floID}-${data.sign}`);
}else if(data.unfollow && encrypt.verify(selfID, data.sign, profiles[data.floID].pubKey)){
var idb = indexedDB.open("FLO_Tweet");
idb.onsuccess = (event) => {
var db = event.target.result;
var obs = db.transaction("followers", "readwrite").objectStore("followers");
obs.delete(data.floID);
db.close();
};
selfWebsocket.send(`U${data.floID}`);
}else if(data.message && data.to == selfID){
var msg = encrypt.decryptMessage(data.secret,data.pubVal)
if(encrypt.verify(msg,data.sign,profiles[data.from].pubKey)){
createMsgElement(data.from,data.time,msg,'R')
storeMsg({time:data.time,floID:data.from,text:msg,type:'R'});
}
}else if(modSuperNode){
superNodeMode(data);
}
}catch(error){
console.log(error)
}
};
selfWebsocket.onerror = (event) => { console.log(event) };
}
function readMsgfromIDB(){
return new Promise((resolve,reject) => {
var disp = document.getElementById("msgsContainer");
for(floID in profiles){
var element = document.createElement('div');
element.setAttribute("id", floID);
element.style.display = 'none';
disp.appendChild(element);
}
var idb = indexedDB.open("FLO_Tweet");
idb.onerror = (event) => { reject("Error in opening IndexedDB!") };
idb.onsuccess = (event) => {
var db = event.target.result;
var obs = db.transaction("messages", "readwrite").objectStore("messages");
obs.openCursor().onsuccess = (event) => {
var cursor = event.target.result;
if(cursor) {
createMsgElement(cursor.value.floID,cursor.value.time,cursor.value.text,cursor.value.type);
cursor.continue();
} else {
console.log('Entries all displayed.');
resolve("Read Msg from IDB");
}
};
db.close();
};
});
}
function changeReceiver(floID){
try{
if(receiverID !== undefined)
document.getElementById(receiverID).style.display = 'none';
if(receiverWebSocket !== undefined && receiverWebSocket.readyState === WebSocket.OPEN)
receiverWebSocket.close();
}catch(e){
console.log(e);
}
console.log(floID);
receiverID = floID;
document.getElementById('recipient_floID').innerHTML = `${profiles[receiverID].name}