- `
- profileBody.appendChild(element);
- }
- document.getElementById("profileInfo").style.display = "none";
+ floID = url.searchParams.get("floID");
+ listProfiles();
+ displayProfile(floID);
}
function displayProfile(floID){
- if(!validateAddr(floID)){
- alert("Invalid FLO ID");
- listProfiles();
- return;
- }
- if(!(floID in profiles)){
- alert("FLO ID not registered to FLO Tweet");
- listProfiles();
+ console.log(floID);
+ var errorMsg;
+ if(!floID)
+ errorMsg = "Select a Profile to display";
+ else if(!validateAddr(floID))
+ errorMsg = "Invalid FLO ID";
+ else if(!(floID in profiles))
+ errorMsg = "FLO ID not registered to FLO Tweet";
+
+ if(errorMsg !== undefined){
+ document.getElementById("profileBody").innerHTML = errorMsg;
return;
}
+
console.log("displayProfile");
+ document.getElementById("profileName").innerHTML=profiles[floID].name;
+ document.getElementById("profileFloID").innerHTML='@'+floID;
+ initselfWebSocket();
displayTweetFromIDB(floID).then(function(result){
connectToX(floID).then(function(result){
console.log(result);
@@ -62,19 +54,24 @@ function displayProfile(floID){
function displayTweetFromIDB(floID){
return new Promise(
function(resolve,reject){
- var idb = indexedDB.open("FLO_Tweet",2);
+ var idb = indexedDB.open("FLO_Tweet");
idb.onerror = function(event) {
reject("Error in opening IndexedDB!");
};
- idb.onupgradeneeded = function(event) {
- var objectStore = event.target.result.createObjectStore("tweets",{ keyPath: 'id' });
- objectStore.createIndex('floID', 'floID', { unique: false });
- objectStore.createIndex('time', 'time', { unique: false });
- objectStore.createIndex('data', 'data', { unique: false });
- var objectStore2 = event.target.result.createObjectStore("lastTweet");
- };
idb.onsuccess = function(event) {
var db = event.target.result;
+ var obj = db.transaction("following", "readwrite").objectStore("following");
+ obj.get(floID).onsuccess = function (event) {
+ var followBtn = document.getElementById("follow-button");
+ if(event.target.result === undefined){
+ followBtn.innerHTML = "+ Follow";
+ followBtn.value = "follow";
+ }else{
+ followBtn.innerHTML = "- Unfollow";
+ followBtn.value = "unfollow";
+ }
+ followBtn.disabled = false;
+ }
var obs = db.transaction("tweets", "readwrite").objectStore("tweets");
obs.openCursor().onsuccess = function(event) {
var cursor = event.target.result;
@@ -144,17 +141,10 @@ function connectToX(floID){
}
function storeTweet(data,id){
- var idb = indexedDB.open("FLO_Tweet",2);
+ var idb = indexedDB.open("FLO_Tweet");
idb.onerror = function(event) {
console.log("Error in opening IndexedDB!");
};
- idb.onupgradeneeded = function(event) {
- var objectStore = event.target.result.createObjectStore("tweets",{ keyPath: 'id' });
- objectStore.createIndex('floID', 'floID', { unique: false });
- objectStore.createIndex('time', 'time', { unique: false });
- objectStore.createIndex('data', 'data', { unique: false });
- var objectStore2 = event.target.result.createObjectStore("lastTweet");
- };
idb.onsuccess = function(event) {
var db = event.target.result;
var obs = db.transaction("tweets", "readwrite").objectStore("tweets");
@@ -169,17 +159,10 @@ function storeTweet(data,id){
function getTweetsFromX(floID){
return new Promise(
function (resolve,reject){
- var idb = indexedDB.open("FLO_Tweet",2);
+ var idb = indexedDB.open("FLO_Tweet");
idb.onerror = function(event) {
reject("Error in opening IndexedDB!");
};
- idb.onupgradeneeded = function(event) {
- var objectStore = event.target.result.createObjectStore("tweets",{ keyPath: 'id' });
- objectStore.createIndex('floID', 'floID', { unique: false });
- objectStore.createIndex('time', 'time', { unique: false });
- objectStore.createIndex('data', 'data', { unique: false });
- var objectStore2 = event.target.result.createObjectStore("lastTweet");
- };
idb.onsuccess = function(event) {
var db = event.target.result;
//window["wait"] = addrList.length;
@@ -208,3 +191,82 @@ function getTweetsFromX(floID){
}
);
}
+
+function initselfWebSocket(){
+ selfWebsocket = new WebSocket("ws://"+location.host+"/ws");
+ selfWebsocket.onopen = function(evt){
+ console.log("Connecting");
+ var pass = sessionStorage.serverPass;
+ selfWebsocket.send("$"+pass);
+ };
+ selfWebsocket.onclose = function(evt){
+ console.log("DISCONNECTED");
+ };
+ selfWebsocket.onmessage = function(evt){
+ console.log(evt.data);
+ if(evt.data[0] == '$')
+ return;
+ try{
+ data = JSON.parse(evt.data);
+ if(data.follow && encrypt.verify(selfID, data.sign, profiles[data.floID].pubKey)){
+ var idb = indexedDB.open("FLO_Tweet");
+ idb.onsuccess = function(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 = function(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}`);
+ }
+ }catch(error){
+ console.log(error.message)
+ }
+ };
+ selfWebsocket.onerror = function(evt){
+ console.log(evt);
+ };
+}
+
+function follow(){
+ var followBtn = document.getElementById("follow-button");
+ if(followBtn.value == 'follow'){
+ var sign = encrypt.sign(floID,privKey);
+ var data = JSON.stringify({follow:true, floID:selfID, sign:sign});
+ profileWebsocket.send(data);
+ selfWebsocket.send(`f${floID}-${sign}`)
+ var idb = indexedDB.open("FLO_Tweet");
+ idb.onsuccess = function(event) {
+ var db = event.target.result;
+ var obs = db.transaction("following", "readwrite").objectStore("following");
+ obs.add(sign,floID);
+ db.close();
+ };
+ followBtn.value = 'unfollow';
+ followBtn.innerHTML = "- Unfollow";
+ }
+ else if(followBtn.value == 'unfollow'){
+ var sign = encrypt.sign(floID,privKey);
+ var data = JSON.stringify({unfollow:true, floID:selfID, sign:sign});
+ profileWebsocket.send(data);
+ selfWebsocket.send(`u${floID}`)
+ var idb = indexedDB.open("FLO_Tweet");
+ idb.onsuccess = function(event) {
+ var db = event.target.result;
+ var obs = db.transaction("following", "readwrite").objectStore("following");
+ obs.delete(floID);
+ db.close();
+ };
+ followBtn.value = 'follow';
+ followBtn.innerHTML = "+ Follow";
+ }
+}
+
diff --git a/reader b/reader
index f563955..f0dcabe 100755
Binary files a/reader and b/reader differ
diff --git a/tweeter b/tweeter
index d1a6135..d2e8515 100755
Binary files a/tweeter and b/tweeter differ
diff --git a/websocket_storage/readBinFile.c b/websocket_storage/readBinFile.c
index 3fa0d96..47612de 100644
--- a/websocket_storage/readBinFile.c
+++ b/websocket_storage/readBinFile.c
@@ -8,17 +8,62 @@ struct tweetData
char data[5000];
};
+struct followData{
+ char floID[35];
+ char sign[150];
+};
+
int main()
{
+ //Declaration
struct tweetData tweet;
+ struct followData data;
+ char buf[5000];
FILE *fptr;
+
+ //Display Tweets
+ printf("\n--Tweets--\n");
fptr = fopen("tweet.bin","rb");
- if(fptr == NULL){
- printf("Error in opening tweet file\n");
- return 1;
+ if(fptr == NULL)
+ printf("Error in opening tweet.bin\n");
+ else{
+ while(fread(&tweet,sizeof(tweet),1,fptr))
+ printf("%d\t:%s\n", tweet.id,tweet.data);
+ fclose(fptr);
}
- while(fread(&tweet,sizeof(tweet),1,fptr))
- printf("%d\t:%s\n", tweet.id,tweet.data);
- fclose(fptr);
+
+ //Display Following list
+ printf("\n--Following--\n");
+ fptr = fopen("following.bin","rb");
+ if(fptr == NULL)
+ printf("Error in opening following.bin\n");
+ else{
+ while(fread(&data,sizeof(data),1,fptr))
+ printf("%s\t:%s\n", data.floID,data.sign);
+ fclose(fptr);
+ }
+
+ //Display Followers list
+ printf("\n--Followers--\n");
+ fptr = fopen("followers.bin","rb");
+ if(fptr == NULL)
+ printf("Error in opening followers.bin\n");
+ else{
+ while(fread(&data,sizeof(data),1,fptr))
+ printf("%s\t:%s\n", data.floID,data.sign);
+ fclose(fptr);
+ }
+
+ //Display Incoming data
+ printf("\n--Incoming Data--\n");
+ fptr = fopen("incoming.bin","rb");
+ if(fptr == NULL)
+ printf("Error in opening incoming.bin\n");
+ else{
+ while(fread(&buf,sizeof(buf),1,fptr))
+ printf("%s\n", buf);
+ fclose(fptr);
+ }
+
return 0;
}
\ No newline at end of file
diff --git a/websocket_storage/reader b/websocket_storage/reader
deleted file mode 100755
index f563955..0000000
Binary files a/websocket_storage/reader and /dev/null differ
diff --git a/websocket_storage/test.html b/websocket_storage/test.html
deleted file mode 100644
index 716b4ff..0000000
--- a/websocket_storage/test.html
+++ /dev/null
@@ -1,240 +0,0 @@
-
-
-Tweet Tester
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/websocket_storage/tester b/websocket_storage/tester
deleted file mode 100755
index a62ecdb..0000000
Binary files a/websocket_storage/tester and /dev/null differ
diff --git a/websocket_storage/tmp/index.html b/websocket_storage/tmp/index.html
deleted file mode 100644
index b5047f1..0000000
--- a/websocket_storage/tmp/index.html
+++ /dev/null
@@ -1,85 +0,0 @@
-
-
-
-
- WebSocket Test
-
-
-
-
-
-
-
-
Websocket PubSub Demonstration
-
-
- This page demonstrates how Mongoose could be used to implement
-
- publish–subscribe pattern. Open this page in several browser
- windows. Each window initiates persistent
- WebSocket
- connection with the server, making each browser window a websocket client.
- Send messages, and see messages sent by other clients.
-