Compare commits
10 Commits
149ada4c9b
...
5aa0bbe1bb
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5aa0bbe1bb | ||
|
|
a014157bc9 | ||
|
|
b1b10733c8 | ||
|
|
c8740941e4 | ||
|
|
5f61e3afe8 | ||
|
|
f6c75c4602 | ||
|
|
a0aa525ccf | ||
|
|
be2d4916f4 | ||
|
|
f1857d8161 | ||
|
|
c6639a899c |
35
README.md
35
README.md
@ -1,2 +1,37 @@
|
|||||||
# webAppServer
|
# webAppServer
|
||||||
This server is used to get the appObjects and generalData for the webApp clients without the need for blockchain or supernode cloud
|
This server is used to get the appObjects and generalData for the webApp clients without the need for blockchain or supernode cloud
|
||||||
|
|
||||||
|
## Instructions
|
||||||
|
|
||||||
|
### To run the server
|
||||||
|
1. Clone/download this repository
|
||||||
|
2. Add a strong `<server_password>` in `.config` file
|
||||||
|
3. Add the `<port>` in `.config` file for the server to run
|
||||||
|
4. open terminal in the directory and run `./start_webAppServer.sh`
|
||||||
|
|
||||||
|
### To use in client side
|
||||||
|
1. copy the floGlobals and webAppClient script tag to the webApp page
|
||||||
|
2. Add the server's `<website_url/ip_addr>:<port>` in floGlobals script tag
|
||||||
|
|
||||||
|
### Properties
|
||||||
|
|
||||||
|
#### requestGeneralData
|
||||||
|
webAppClient.requestGeneralData(type, vectorClock = '0')
|
||||||
|
Requests the generalData from webAppServer
|
||||||
|
* type: type of the message
|
||||||
|
* vectorClock: vectorClock after which the message should be requested (can be used with Date.now()) (default = '0')
|
||||||
|
* Returns an object (set of generalData)
|
||||||
|
|
||||||
|
#### requestObjectData
|
||||||
|
webAppClient.requestObjectData(keyPath)
|
||||||
|
Requests the objectData/appObjects from webAppServer
|
||||||
|
* path: (an Array) path of the required object (eg. \['Sample', Property1, property2..]
|
||||||
|
* Returns an Object/Array (requested path)
|
||||||
|
|
||||||
|
#### requestSubAdminList
|
||||||
|
webAppClient.requestSubAdminList()
|
||||||
|
Requests the subAdmin list of the application from webAppServer
|
||||||
|
* Returns an Array (of subAdmins)
|
||||||
|
|
||||||
|
### Architecture Diagram
|
||||||
|

|
||||||
|
|||||||
@ -14,29 +14,11 @@
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
TEST_MODE (use console)
|
TEST_MODE (use console)
|
||||||
<script id="webappClient">
|
<script id="webAppClient">
|
||||||
//Add this to the client script to request data from floWebappServer
|
//Add this to the client script to request data from floWebappServer
|
||||||
const webappClient = {
|
const webAppClient = {
|
||||||
util: {
|
util: {
|
||||||
sendData(data) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
var websocket = new WebSocket("wss://" + floGlobals.webAppURL + "/ws");
|
|
||||||
websocket.onmessage = (evt => {
|
|
||||||
if (evt.data == '$+') {
|
|
||||||
websocket.send(data);
|
|
||||||
resolve(`Data sent to webApp`);
|
|
||||||
} else if (evt.data == '$-')
|
|
||||||
reject(`webApp not available`)
|
|
||||||
else
|
|
||||||
reject(evt.data)
|
|
||||||
websocket.close();
|
|
||||||
})
|
|
||||||
websocket.onerror = (evt) => {
|
|
||||||
reject(`webApp server not found`)
|
|
||||||
};
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
requestData(request = []) {
|
requestData(request = []) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
var websocket = new WebSocket("wss://" + floGlobals.webAppURL + "/ws");
|
var websocket = new WebSocket("wss://" + floGlobals.webAppURL + "/ws");
|
||||||
@ -58,24 +40,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
sendGeneralData: function (message, type, options = {}) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
var data = {
|
|
||||||
senderID: myFloID,
|
|
||||||
receiverID: options.receiverID || floGlobals.adminID,
|
|
||||||
pubKey: myPubKey,
|
|
||||||
message: message,
|
|
||||||
sign: floCrypto.signData(JSON.stringify(message), myPrivKey),
|
|
||||||
application: options.application || floGlobals.application,
|
|
||||||
type: type,
|
|
||||||
comment: options.comment || ""
|
|
||||||
}
|
|
||||||
this.util.sendData(JSON.stringify(data), data.receiverID)
|
|
||||||
.then(result => resolve(result))
|
|
||||||
.catch(error => reject(error))
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
requestGeneralData: function (type, vectorClock = '0') {
|
requestGeneralData: function (type, vectorClock = '0') {
|
||||||
if (typeof vectorClock !== 'string')
|
if (typeof vectorClock !== 'string')
|
||||||
vectorClock.toString()
|
vectorClock.toString()
|
||||||
@ -101,6 +65,18 @@
|
|||||||
reject(result[1])
|
reject(result[1])
|
||||||
}).catch(error => reject(error))
|
}).catch(error => reject(error))
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
requestSubAdminList: function(){
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
this.util.requestData([floGlobals.application, 'subAdmins']).then(
|
||||||
|
result => {
|
||||||
|
if (result[0])
|
||||||
|
resolve(result[1])
|
||||||
|
else
|
||||||
|
reject(result[1])
|
||||||
|
}).catch(error => reject(error))
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
<title>FLO webApp Server</title>
|
<title>FLO webApp Server</title>
|
||||||
<script id="onLoadStartUp">
|
<script id="onLoadStartUp">
|
||||||
function onLoadStartUp() {
|
function onLoadStartUp() {
|
||||||
const apps = ['TEST_MODE']
|
const apps = ['TEDxKanke']
|
||||||
webAppServer.setServeAppList(apps)
|
webAppServer.setServeAppList(apps)
|
||||||
var consoleClear = setInterval(console.clear, 60 * 60000) // clear console every 1 hr
|
var consoleClear = setInterval(console.clear, 60 * 60000) // clear console every 1 hr
|
||||||
webAppServer.initWebSocket()
|
webAppServer.initWebSocket()
|
||||||
@ -81,20 +81,6 @@
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
writeData: function (obsName, data, key = false, dbName = this.dbName) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
this.openDB(dbName).then(db => {
|
|
||||||
var obs = db.transaction(obsName, "readwrite").objectStore(obsName);
|
|
||||||
let writeReq = (key ? obs.put(data, key) : obs.put(data));
|
|
||||||
writeReq.onsuccess = (evt) => resolve(`Write data Successful`);
|
|
||||||
writeReq.onerror = (evt) => reject(
|
|
||||||
`Write data unsuccessful [${evt.target.error.name}] ${evt.target.error.message}`
|
|
||||||
);
|
|
||||||
db.close();
|
|
||||||
}).catch(error => reject(error));
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
addData: function (obsName, data, key = false, dbName = this.dbName) {
|
addData: function (obsName, data, key = false, dbName = this.dbName) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.openDB(dbName).then(db => {
|
this.openDB(dbName).then(db => {
|
||||||
@ -194,11 +180,11 @@
|
|||||||
return pos
|
return pos
|
||||||
},
|
},
|
||||||
|
|
||||||
getNextGeneralData: function (generalData, filterStr, vectorClock) {
|
getNextGeneralData: function (generalData, vectorClock) {
|
||||||
var filteredResult = []
|
var filteredResult = []
|
||||||
for (var i = 0; i < generalData[filterStr].length; i++)
|
for (var i = 0; i < generalData.length; i++)
|
||||||
if (generalData[filter][i].vectorClock > vectorClock)
|
if (generalData[i].vectorClock > vectorClock)
|
||||||
filteredResult.push(generalData[filter][i])
|
filteredResult.push(generalData[i])
|
||||||
return filteredResult
|
return filteredResult
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -249,20 +235,23 @@
|
|||||||
|
|
||||||
if(request[1] == "appObjects"){
|
if(request[1] == "appObjects"){
|
||||||
compactIDB.readData(request[1], request[2], request[0]).then(result => {
|
compactIDB.readData(request[1], request[2], request[0]).then(result => {
|
||||||
var response = [true, this.util.objectDataFetch(result, request.slice(2))]
|
var response = [true, this.util.objectDataFetch(result, request.slice(3))]
|
||||||
|
console.log(request, response)
|
||||||
this.webSocket.send(`${requestor} ${JSON.stringify(response)}`)
|
this.webSocket.send(`${requestor} ${JSON.stringify(response)}`)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
else if (request[1] == "generalData"){
|
else if (request[1] == "generalData"){
|
||||||
var filterStr = this.util.getFilterString(request[0], request[2])
|
var filterStr = this.util.getFilterString(request[0], request[2])
|
||||||
compactIDB.readData(request[1], filterStr, request[0]).then(result => {
|
compactIDB.readData(request[1], filterStr, request[0]).then(result => {
|
||||||
var response = [true, this.util.getNextGeneralData(result, filterStr, request[3])]
|
var response = [true, this.util.getNextGeneralData(result, request[3])]
|
||||||
|
console.log(request, response)
|
||||||
this.webSocket.send(`${requestor} ${JSON.stringify(response)}`)
|
this.webSocket.send(`${requestor} ${JSON.stringify(response)}`)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
else if(request[1] == "subAdmins"){
|
else if(request[1] == "subAdmins"){
|
||||||
compactIDB.readAllData(request[1], request[0]).then(result => {
|
compactIDB.readAllData(request[1], request[0]).then(result => {
|
||||||
var response = [true, Object.keys(result)]
|
var response = [true, Object.keys(result)]
|
||||||
|
console.log(request, response)
|
||||||
this.webSocket.send(`${requestor} ${JSON.stringify(response)}`)
|
this.webSocket.send(`${requestor} ${JSON.stringify(response)}`)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -272,12 +261,6 @@
|
|||||||
response = [false, error.message]
|
response = [false, error.message]
|
||||||
this.webSocket.send(`${requestor} ${JSON.stringify(response)}`)
|
this.webSocket.send(`${requestor} ${JSON.stringify(response)}`)
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
var data = JSON.parse(evt.data)
|
|
||||||
if (this.serveAppList.includes(data.application))
|
|
||||||
floSupernode.sendData(JSON.stringify(data), data.receiverID)
|
|
||||||
.then(result => resolve(result))
|
|
||||||
.catch(error => reject(error))
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
this.webSocket.onerror = (evt) => {
|
this.webSocket.onerror = (evt) => {
|
||||||
|
|||||||
BIN
util/webAppServer-Architecture.png
Normal file
BIN
util/webAppServer-Architecture.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
Loading…
Reference in New Issue
Block a user