Compare commits

...

10 Commits

Author SHA1 Message Date
Sai Raj
5aa0bbe1bb
bug removed
- removed send functionality (as it required stdop)
2020-08-10 14:18:09 +05:30
Sai Raj
a014157bc9
bug removed
- removing send function
2020-08-10 14:14:58 +05:30
Sai Raj
b1b10733c8
Update README.md 2020-08-10 13:53:59 +05:30
Sai Raj
c8740941e4
Add files via upload 2020-08-10 13:52:17 +05:30
Vivek Teega
5f61e3afe8 bug fixes 2020-02-26 12:19:36 +00:00
Sai Raj
f6c75c4602
Update README.md 2020-02-26 17:10:04 +05:30
Sai Raj
a0aa525ccf
adding requestSubAdminList
requestSubAdminList can be used to request the subAdmin list of the app
2020-02-26 17:08:45 +05:30
Sai Raj
be2d4916f4
Update README.md 2020-02-26 16:03:36 +05:30
Sai Raj
f1857d8161
Update README.md 2020-02-26 16:01:09 +05:30
Sai Raj
c6639a899c
script name change
Changing script name to webAppClient
2020-02-26 15:48:47 +05:30
4 changed files with 60 additions and 66 deletions

View File

@ -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
![webAppServer-Architecture.png](util/webAppServer-Architecture.png)

View File

@ -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>

View File

@ -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) => {

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB