Compare commits
No commits in common. "5aa0bbe1bb090384e9612600baca209db7ced9ae" and "149ada4c9b9920975d32ba2ec680b77feadf5d63" have entirely different histories.
5aa0bbe1bb
...
149ada4c9b
35
README.md
35
README.md
@ -1,37 +1,2 @@
|
||||
# webAppServer
|
||||
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,11 +14,29 @@
|
||||
|
||||
<body>
|
||||
TEST_MODE (use console)
|
||||
<script id="webAppClient">
|
||||
<script id="webappClient">
|
||||
//Add this to the client script to request data from floWebappServer
|
||||
const webAppClient = {
|
||||
const webappClient = {
|
||||
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 = []) {
|
||||
return new Promise((resolve, reject) => {
|
||||
var websocket = new WebSocket("wss://" + floGlobals.webAppURL + "/ws");
|
||||
@ -40,6 +58,24 @@
|
||||
}
|
||||
},
|
||||
|
||||
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') {
|
||||
if (typeof vectorClock !== 'string')
|
||||
vectorClock.toString()
|
||||
@ -65,18 +101,6 @@
|
||||
reject(result[1])
|
||||
}).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>
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
<title>FLO webApp Server</title>
|
||||
<script id="onLoadStartUp">
|
||||
function onLoadStartUp() {
|
||||
const apps = ['TEDxKanke']
|
||||
const apps = ['TEST_MODE']
|
||||
webAppServer.setServeAppList(apps)
|
||||
var consoleClear = setInterval(console.clear, 60 * 60000) // clear console every 1 hr
|
||||
webAppServer.initWebSocket()
|
||||
@ -81,6 +81,20 @@
|
||||
});
|
||||
},
|
||||
|
||||
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) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.openDB(dbName).then(db => {
|
||||
@ -180,11 +194,11 @@
|
||||
return pos
|
||||
},
|
||||
|
||||
getNextGeneralData: function (generalData, vectorClock) {
|
||||
getNextGeneralData: function (generalData, filterStr, vectorClock) {
|
||||
var filteredResult = []
|
||||
for (var i = 0; i < generalData.length; i++)
|
||||
if (generalData[i].vectorClock > vectorClock)
|
||||
filteredResult.push(generalData[i])
|
||||
for (var i = 0; i < generalData[filterStr].length; i++)
|
||||
if (generalData[filter][i].vectorClock > vectorClock)
|
||||
filteredResult.push(generalData[filter][i])
|
||||
return filteredResult
|
||||
},
|
||||
|
||||
@ -235,23 +249,20 @@
|
||||
|
||||
if(request[1] == "appObjects"){
|
||||
compactIDB.readData(request[1], request[2], request[0]).then(result => {
|
||||
var response = [true, this.util.objectDataFetch(result, request.slice(3))]
|
||||
console.log(request, response)
|
||||
var response = [true, this.util.objectDataFetch(result, request.slice(2))]
|
||||
this.webSocket.send(`${requestor} ${JSON.stringify(response)}`)
|
||||
})
|
||||
}
|
||||
else if (request[1] == "generalData"){
|
||||
var filterStr = this.util.getFilterString(request[0], request[2])
|
||||
compactIDB.readData(request[1], filterStr, request[0]).then(result => {
|
||||
var response = [true, this.util.getNextGeneralData(result, request[3])]
|
||||
console.log(request, response)
|
||||
var response = [true, this.util.getNextGeneralData(result, filterStr, request[3])]
|
||||
this.webSocket.send(`${requestor} ${JSON.stringify(response)}`)
|
||||
})
|
||||
}
|
||||
else if(request[1] == "subAdmins"){
|
||||
compactIDB.readAllData(request[1], request[0]).then(result => {
|
||||
var response = [true, Object.keys(result)]
|
||||
console.log(request, response)
|
||||
this.webSocket.send(`${requestor} ${JSON.stringify(response)}`)
|
||||
})
|
||||
}
|
||||
@ -261,6 +272,12 @@
|
||||
response = [false, error.message]
|
||||
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) => {
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 15 KiB |
Loading…
Reference in New Issue
Block a user