upvote
This commit is contained in:
parent
038bced804
commit
89caff5c13
@ -392,12 +392,12 @@
|
|||||||
let columnName =`column${col}_count`;
|
let columnName =`column${col}_count`;
|
||||||
console.log(element)
|
console.log(element)
|
||||||
console.log(element.classList)
|
console.log(element.classList)
|
||||||
if (myFloID!=undefined) {
|
if (myFloID1!=undefined) {
|
||||||
if (element.classList.value == "fa fa-thumbs-o-up")
|
if (element.classList.value == "fa fa-thumbs-o-up")
|
||||||
{
|
{
|
||||||
let articlekey =articlekeey
|
let articlekey =articlekeey
|
||||||
let mainObj = {
|
let mainObj = {
|
||||||
floID: myFloID,
|
floID: myFloID1,
|
||||||
articlekey: articlekey,
|
articlekey: articlekey,
|
||||||
};
|
};
|
||||||
console.log("mainObj")
|
console.log("mainObj")
|
||||||
@ -423,16 +423,11 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script id="onLoadStartUp">
|
<script id="onLoadStartUp">
|
||||||
var myFloID,col,articlekeey,myPrivKey;
|
var myFloID1,col,articlekeey,myPrivKey;
|
||||||
function onLoadStartUp(){
|
function onLoadStartUp(){
|
||||||
floDapps.launchStartUp().then(result => {
|
floDapps.launchStartUp()
|
||||||
console.log(result)
|
|
||||||
console.log(`Welcome FLO_ID: ${myFloID}`)
|
|
||||||
//App functions....
|
|
||||||
}).catch(error => console.error(error))
|
|
||||||
|
|
||||||
var b=JSON.parse(sessionStorage.getItem("z"))
|
var b=JSON.parse(sessionStorage.getItem("z"))
|
||||||
myFloID=(sessionStorage.getItem("m"))
|
myFloID1=(sessionStorage.getItem("m"))
|
||||||
col=(sessionStorage.getItem("col"))
|
col=(sessionStorage.getItem("col"))
|
||||||
console.log(col)
|
console.log(col)
|
||||||
articlekeey=(sessionStorage.getItem("articlename"))
|
articlekeey=(sessionStorage.getItem("articlename"))
|
||||||
|
|||||||
@ -10007,9 +10007,9 @@ Coming to Afropunk festival which will begin on 28th and 29th of November. In
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10065,9 +10065,9 @@ Henceforth, Huawei is likely to follow the path which involves Washington granti
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10071,9 +10071,9 @@ Banning NGOs is not a solution whereas the government should keep our eye on NGO
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10024,9 +10024,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10163,9 +10163,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10481,9 +10481,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10034,9 +10034,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10093,9 +10093,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10143,9 +10143,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10065,9 +10065,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10067,9 +10067,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10163,9 +10163,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -10472,7 +10472,6 @@
|
|||||||
reactor.registerEvent("startUpErrorLog");
|
reactor.registerEvent("startUpErrorLog");
|
||||||
reactor.addEventListener("startUpErrorLog", (log) => console.error(log));
|
reactor.addEventListener("startUpErrorLog", (log) => console.error(log));
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<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 = {
|
||||||
|
|||||||
@ -10049,9 +10049,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10115,9 +10115,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10132,9 +10132,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10030,9 +10030,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10034,9 +10034,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10037,9 +10037,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10131,9 +10131,9 @@ Local markets, where farmers sell their products directly in their local areas.
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10041,9 +10041,9 @@ Big data can be presented in zettabytes (a unit of data information, 10^21 bytes
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10069,9 +10069,9 @@ While the Government of India has taken significant measures for the industry, i
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10108,9 +10108,9 @@ The government of India and the technology companies that function right here sh
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10043,9 +10043,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10166,9 +10166,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10133,9 +10133,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10583,9 +10583,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10102,9 +10102,9 @@ With a past record of being an agency actively opposing innovation Reserve Bank
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10070,9 +10070,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10098,9 +10098,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10110,9 +10110,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10033,9 +10033,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10100,9 +10100,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10068,9 +10068,9 @@ Contemporary sustainability tried to bridge the gaps conventional couldn't by en
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10146,9 +10146,9 @@ This deal has knocked hard on the Future Group and it might result in the closur
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10009,9 +10009,9 @@ A real life tragic death has turned into a crucial opportunity for media and pol
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10303,9 +10303,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10189,9 +10189,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10538,9 +10538,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10165,9 +10165,9 @@ The future impact of quantum sensing can be revolutionary in many scientific and
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10189,9 +10189,9 @@ In conclusion, we should have multiple structured debates between senior leaders
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10038,9 +10038,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10021,9 +10021,9 @@ As table can turn anytime, there is an equal chance for both of them to win the
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10358,9 +10358,9 @@ It might be controlled through money printed by the RBI - It directly depends on
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10170,9 +10170,9 @@ Unfortunately, India isn't able to build such a reciprocal gesture. We are caref
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10085,9 +10085,9 @@ Nevertheless, Death of Ella kissi- Debrah at the age of 9, Sparkle the foglamp o
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10137,9 +10137,9 @@ This trade asymmetry is mainly compounded by the nature of goods flow. India exp
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10100,9 +10100,9 @@ Walmart India’s US parent, Walmart had reported a 5.6 % increase in its revenu
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10526,9 +10526,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10047,9 +10047,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10435,9 +10435,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10588,9 +10588,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -11247,9 +11247,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10286,475 +10286,7 @@
|
|||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script id="floDapps">
|
|
||||||
/* General functions for FLO Dapps*/
|
|
||||||
const floDapps = {
|
|
||||||
util: {
|
|
||||||
appObs: {},
|
|
||||||
|
|
||||||
initIndexedDB: function () {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
var obj = {
|
|
||||||
//general
|
|
||||||
lastTx: {},
|
|
||||||
//supernode (cloud list)
|
|
||||||
supernodes: {
|
|
||||||
indexes: {
|
|
||||||
uri: null,
|
|
||||||
pubKey: null,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
//login credentials
|
|
||||||
credentials: {},
|
|
||||||
//for Dapps
|
|
||||||
subAdmins: {},
|
|
||||||
appObjects: {},
|
|
||||||
vectorClock: {},
|
|
||||||
generalData: {},
|
|
||||||
generalVC: {},
|
|
||||||
};
|
|
||||||
//add other given objectStores
|
|
||||||
for (o in this.appObs) if (!(o in obj)) obj[o] = this.appObs[o];
|
|
||||||
compactIDB
|
|
||||||
.initDB(floGlobals.application, obj)
|
|
||||||
.then((result) => {
|
|
||||||
resolve("IndexedDB App Storage Initated Successfully");
|
|
||||||
})
|
|
||||||
.catch((error) => reject(error));
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
startUpFunctions: {
|
|
||||||
readSupernodeListFromAPI: function () {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
compactIDB
|
|
||||||
.readData("lastTx", floGlobals.SNStorageID)
|
|
||||||
.then((lastTx) => {
|
|
||||||
floBlockchainAPI
|
|
||||||
.readData(floGlobals.SNStorageID, {
|
|
||||||
ignoreOld: lastTx,
|
|
||||||
sentOnly: true,
|
|
||||||
pattern: "SuperNodeStorage",
|
|
||||||
})
|
|
||||||
.then((result) => {
|
|
||||||
for (var i = result.data.length - 1; i >= 0; i--) {
|
|
||||||
var content = JSON.parse(
|
|
||||||
result.data[i]
|
|
||||||
).SuperNodeStorage;
|
|
||||||
for (sn in content.removeNodes)
|
|
||||||
compactIDB.removeData("supernodes", sn);
|
|
||||||
for (sn in content.addNodes)
|
|
||||||
compactIDB.writeData(
|
|
||||||
"supernodes",
|
|
||||||
content.addNodes[sn],
|
|
||||||
sn
|
|
||||||
);
|
|
||||||
}
|
|
||||||
compactIDB.writeData(
|
|
||||||
"lastTx",
|
|
||||||
result.totalTxs,
|
|
||||||
floGlobals.SNStorageID
|
|
||||||
);
|
|
||||||
compactIDB.readAllData("supernodes").then((result) => {
|
|
||||||
floGlobals.supernodes = result;
|
|
||||||
|
|
||||||
floSupernode.kBucket
|
|
||||||
.launch(
|
|
||||||
Object.keys(floGlobals.supernodes),
|
|
||||||
floGlobals.SNStorageID
|
|
||||||
)
|
|
||||||
.then((result) =>
|
|
||||||
resolve("Loaded Supernode list\n" + result)
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.catch((error) => reject(error));
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
readSubAdminListFromAPI: function () {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
compactIDB
|
|
||||||
.readData("lastTx", floGlobals.adminID)
|
|
||||||
.then((lastTx) => {
|
|
||||||
floBlockchainAPI
|
|
||||||
.readData(floGlobals.adminID, {
|
|
||||||
ignoreOld: lastTx,
|
|
||||||
sentOnly: true,
|
|
||||||
pattern: floGlobals.application,
|
|
||||||
})
|
|
||||||
.then((result) => {
|
|
||||||
for (var i = result.data.length - 1; i >= 0; i--) {
|
|
||||||
var content = JSON.parse(result.data[i])[
|
|
||||||
floGlobals.application
|
|
||||||
];
|
|
||||||
if (Array.isArray(content.removeSubAdmin))
|
|
||||||
for (
|
|
||||||
var j = 0;
|
|
||||||
j < content.removeSubAdmin.length;
|
|
||||||
j++
|
|
||||||
)
|
|
||||||
compactIDB.removeData(
|
|
||||||
"subAdmins",
|
|
||||||
content.removeSubAdmin[j]
|
|
||||||
);
|
|
||||||
if (Array.isArray(content.addSubAdmin))
|
|
||||||
for (var k = 0; k < content.addSubAdmin.length; k++)
|
|
||||||
compactIDB.writeData(
|
|
||||||
"subAdmins",
|
|
||||||
true,
|
|
||||||
content.addSubAdmin[k]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
compactIDB.writeData(
|
|
||||||
"lastTx",
|
|
||||||
result.totalTxs,
|
|
||||||
floGlobals.adminID
|
|
||||||
);
|
|
||||||
compactIDB.readAllData("subAdmins").then((result) => {
|
|
||||||
floGlobals.subAdmins = Object.keys(result);
|
|
||||||
resolve("Read subAdmins from blockchain");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.catch((error) => reject(error));
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
loadDataFromIDB: function () {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
var loadData = [
|
|
||||||
"appObjects",
|
|
||||||
"vectorClock",
|
|
||||||
"generalData",
|
|
||||||
"generalVC",
|
|
||||||
];
|
|
||||||
var promises = [];
|
|
||||||
for (var i = 0; i < loadData.length; i++)
|
|
||||||
promises[i] = compactIDB.readAllData(loadData[i]);
|
|
||||||
Promise.all(promises)
|
|
||||||
.then((results) => {
|
|
||||||
for (var i = 0; i < loadData.length; i++)
|
|
||||||
floGlobals[loadData[i]] = results[i];
|
|
||||||
resolve("Loaded Data from IDB");
|
|
||||||
})
|
|
||||||
.catch((error) => reject(error));
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
getCredentials: function () {
|
|
||||||
const defaultInput = function (type) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
|
||||||
if (inputVal === null) reject(null);
|
|
||||||
else resolve(inputVal);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const inputFn = this.getCredentials.privKeyInput || defaultInput;
|
|
||||||
|
|
||||||
const readSharesFromIDB = function (indexArr) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
var promises = [];
|
|
||||||
for (var i = 0; i < indexArr.length; i++)
|
|
||||||
promises.push(
|
|
||||||
compactIDB.readData("credentials", indexArr[i])
|
|
||||||
);
|
|
||||||
Promise.all(promises)
|
|
||||||
.then((shares) => {
|
|
||||||
var secret = floCrypto.retrieveShamirSecret(shares);
|
|
||||||
if (secret) resolve(secret);
|
|
||||||
else reject("Shares are insufficient or incorrect");
|
|
||||||
})
|
|
||||||
.catch((error) => reject(error));
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const writeSharesToIDB = function (
|
|
||||||
shares,
|
|
||||||
i = 0,
|
|
||||||
resultIndexes = []
|
|
||||||
) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
if (i >= shares.length) return resolve(resultIndexes);
|
|
||||||
var n = floCrypto.randInt(0, 100000);
|
|
||||||
compactIDB
|
|
||||||
.addData("credentials", shares[i], n)
|
|
||||||
.then((res) => {
|
|
||||||
resultIndexes.push(n);
|
|
||||||
writeSharesToIDB(shares, i + 1, resultIndexes).then(
|
|
||||||
(result) => resolve(result)
|
|
||||||
);
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
writeSharesToIDB(shares, i, resultIndexes).then((result) =>
|
|
||||||
resolve(result)
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const getPrivateKeyCredentials = function () {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
var indexArr = localStorage.getItem(
|
|
||||||
`${floGlobals.application}#privKey`
|
|
||||||
);
|
|
||||||
if (indexArr) {
|
|
||||||
readSharesFromIDB(JSON.parse(indexArr))
|
|
||||||
.then((result) => resolve(result))
|
|
||||||
.catch((error) => reject(error));
|
|
||||||
} else {
|
|
||||||
var privKey;
|
|
||||||
inputFn("PRIVATE_KEY")
|
|
||||||
.then((result) => {
|
|
||||||
try {
|
|
||||||
if (!result) return reject("Empty Private Key");
|
|
||||||
var floID = floCrypto.getFloIDfromPubkeyHex(
|
|
||||||
floCrypto.getPubKeyHex(result)
|
|
||||||
);
|
|
||||||
privKey = result;
|
|
||||||
} catch (error) {
|
|
||||||
console.error(error);
|
|
||||||
return reject("Invalid Private Key");
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
console.log(error, "Generating Random Keys");
|
|
||||||
privKey = floCrypto.generateNewID().privKey;
|
|
||||||
})
|
|
||||||
.finally((_) => {
|
|
||||||
var threshold = floCrypto.randInt(10, 20);
|
|
||||||
writeSharesToIDB(
|
|
||||||
floCrypto.createShamirsSecretShares(
|
|
||||||
privKey,
|
|
||||||
threshold,
|
|
||||||
threshold
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.then((resultIndexes) => {
|
|
||||||
//store index keys in localStorage
|
|
||||||
localStorage.setItem(
|
|
||||||
`${floGlobals.application}#privKey`,
|
|
||||||
JSON.stringify(resultIndexes)
|
|
||||||
);
|
|
||||||
//also add a dummy privatekey to the IDB
|
|
||||||
var randomPrivKey = floCrypto.generateNewID().privKey;
|
|
||||||
var randomThreshold = floCrypto.randInt(10, 20);
|
|
||||||
writeSharesToIDB(
|
|
||||||
floCrypto.createShamirsSecretShares(
|
|
||||||
randomPrivKey,
|
|
||||||
randomThreshold,
|
|
||||||
randomThreshold
|
|
||||||
)
|
|
||||||
);
|
|
||||||
//resolve private Key
|
|
||||||
resolve(privKey);
|
|
||||||
})
|
|
||||||
.catch((error) => reject(error));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const checkIfPinRequired = function (key) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
if (key.length == 52) resolve(key);
|
|
||||||
else {
|
|
||||||
inputFn("PIN/Password")
|
|
||||||
.then((pwd) => {
|
|
||||||
try {
|
|
||||||
let privKey = Crypto.AES.decrypt(key, pwd);
|
|
||||||
resolve(privKey);
|
|
||||||
} catch (error) {
|
|
||||||
reject("Access Denied: Incorrect PIN/Password");
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch((error) =>
|
|
||||||
reject("Access Denied: PIN/Password required")
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
getPrivateKeyCredentials()
|
|
||||||
.then((key) => {
|
|
||||||
checkIfPinRequired(key)
|
|
||||||
.then((privKey) => {
|
|
||||||
try {
|
|
||||||
myPrivKey = privKey;
|
|
||||||
myPubKey = floCrypto.getPubKeyHex(myPrivKey);
|
|
||||||
myFloID = floCrypto.getFloIDfromPubkeyHex(myPubKey);
|
|
||||||
resolve("Login Credentials loaded successful");
|
|
||||||
} catch (error) {
|
|
||||||
reject("Corrupted Private Key");
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch((error) => reject(error));
|
|
||||||
})
|
|
||||||
.catch((error) => reject(error));
|
|
||||||
});
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
callStartUpFunction: function (fname) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
this.startUpFunctions[fname]()
|
|
||||||
.then((result) => {
|
|
||||||
this.callStartUpFunction.completed += 1;
|
|
||||||
reactor.dispatchEvent(
|
|
||||||
"startUpSuccessLog",
|
|
||||||
`${result}\nCompleted ${this.callStartUpFunction.completed}/${this.callStartUpFunction.total} Startup functions`
|
|
||||||
);
|
|
||||||
resolve(true);
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
this.callStartUpFunction.failed += 1;
|
|
||||||
reactor.dispatchEvent(
|
|
||||||
"startUpErrorLog",
|
|
||||||
`${error}\nFailed ${this.callStartUpFunction.failed}/${this.callStartUpFunction.total} Startup functions`
|
|
||||||
);
|
|
||||||
reject(false);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
getFilterString: function (type, options = {}) {
|
|
||||||
var filterStr = JSON.stringify({
|
|
||||||
application: options.application || floGlobals.application,
|
|
||||||
type: type,
|
|
||||||
comment: options.comment,
|
|
||||||
});
|
|
||||||
return filterStr;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
launchStartUp: function () {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
this.util.initIndexedDB().then((log) => {
|
|
||||||
console.log(log);
|
|
||||||
this.util.callStartUpFunction.total = Object.keys(
|
|
||||||
this.util.startUpFunctions
|
|
||||||
).length;
|
|
||||||
this.util.callStartUpFunction.completed = 0;
|
|
||||||
this.util.callStartUpFunction.failed = 0;
|
|
||||||
var promises = [];
|
|
||||||
for (fn in this.util.startUpFunctions)
|
|
||||||
promises.push(this.util.callStartUpFunction(fn));
|
|
||||||
Promise.all(promises)
|
|
||||||
.then((results) => resolve("App Startup finished successful"))
|
|
||||||
.catch((errors) => reject("App StartUp failed"));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
addStartUpFunction: function (fname, fn) {
|
|
||||||
if (fname in this.util.startUpFunctions)
|
|
||||||
throw `Function ${fname} already defined`;
|
|
||||||
this.util.startUpFunctions[fname] = fn;
|
|
||||||
},
|
|
||||||
|
|
||||||
setCustomPrivKeyInput: function (customFn) {
|
|
||||||
this.util.startUpFunctions.getCredentials.privKeyInput = customFn;
|
|
||||||
},
|
|
||||||
|
|
||||||
setAppObjectStores: function (appObs) {
|
|
||||||
this.util.appObs = appObs;
|
|
||||||
},
|
|
||||||
|
|
||||||
manageSubAdmins(adminPrivKey, addList, rmList) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
if (!Array.isArray(addList)) addList = undefined;
|
|
||||||
if (!Array.isArray(rmList)) rmList = undefined;
|
|
||||||
var floData = {
|
|
||||||
[floGlobals.application]: {
|
|
||||||
addSubAdmin: addList,
|
|
||||||
removeSubAdmin: rmList,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
var floID = floCrypto.getFloIDfromPubkeyHex(
|
|
||||||
floCrypto.getPubKeyHex(adminPrivKey)
|
|
||||||
);
|
|
||||||
if (floID != floGlobals.adminID)
|
|
||||||
reject("Access Denied for Admin privilege");
|
|
||||||
else
|
|
||||||
floBlockchainAPI
|
|
||||||
.writeData(floID, JSON.stringify(floData), adminPrivKey)
|
|
||||||
.then((result) => resolve(["Updated SubAdmin List", result]))
|
|
||||||
.catch((error) => reject(error));
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
clearCredentials: function () {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
compactIDB
|
|
||||||
.clearData("credentials")
|
|
||||||
.then((result) => {
|
|
||||||
localStorage.removeItem(`${floGlobals.application}#privKey`);
|
|
||||||
myPrivKey = myPubKey = myFloID = undefined;
|
|
||||||
resolve("privKey credentials deleted!");
|
|
||||||
})
|
|
||||||
.catch((error) => reject(error));
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
securePrivKey: function (pwd) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
let indexArr = localStorage.getItem(
|
|
||||||
`${floGlobals.application}#privKey`
|
|
||||||
);
|
|
||||||
if (!indexArr) return reject("PrivKey not found");
|
|
||||||
indexArr = JSON.parse(indexArr);
|
|
||||||
let encryptedKey = Crypto.AES.encrypt(myPrivKey, pwd);
|
|
||||||
let threshold = indexArr.length;
|
|
||||||
let shares = floCrypto.createShamirsSecretShares(
|
|
||||||
encryptedKey,
|
|
||||||
threshold,
|
|
||||||
threshold
|
|
||||||
);
|
|
||||||
let promises = [];
|
|
||||||
for (var i = 0; i < threshold; i++)
|
|
||||||
promises.push(
|
|
||||||
compactIDB.writeData(
|
|
||||||
"credentials",
|
|
||||||
shares[i],
|
|
||||||
indexArr[i],
|
|
||||||
floGlobals.application
|
|
||||||
)
|
|
||||||
);
|
|
||||||
Promise.all(promises)
|
|
||||||
.then((results) => resolve("Private Key Secured"))
|
|
||||||
.catch((error) => reject(error));
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
objectDataMapper: function (object, path, data) {
|
|
||||||
var resObject = JSON.parse(JSON.stringify(object));
|
|
||||||
var pos = resObject;
|
|
||||||
path.forEach((p) => (pos = pos[p]));
|
|
||||||
if (Array.isArray(pos)) {
|
|
||||||
pos.push(data);
|
|
||||||
return resObject;
|
|
||||||
} else throw "Path is not an Array";
|
|
||||||
},
|
|
||||||
|
|
||||||
getNextGeneralData: function (type, vectorClock, options = {}) {
|
|
||||||
var filter = this.util.getFilterString(type, options);
|
|
||||||
var filteredResult = [];
|
|
||||||
for (var i = 0; i < floGlobals.generalData[filter].length; i++)
|
|
||||||
if (floGlobals.generalData[filter][i].vectorClock > vectorClock)
|
|
||||||
filteredResult.push(floGlobals.generalData[filter][i]);
|
|
||||||
return filteredResult;
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
reactor.registerEvent("startUpSuccessLog");
|
|
||||||
reactor.addEventListener("startUpSuccessLog", (log) => console.log(log));
|
|
||||||
|
|
||||||
reactor.registerEvent("startUpErrorLog");
|
|
||||||
reactor.addEventListener("startUpErrorLog", (log) => console.error(log));
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<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
|
||||||
|
|||||||
@ -10195,9 +10195,9 @@ Therefore, the digital revolution is considered a disruptive innovation in the f
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -9985,9 +9985,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10129,9 +10129,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -10579,9 +10579,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -9984,9 +9984,9 @@
|
|||||||
getCredentials: function () {
|
getCredentials: function () {
|
||||||
const defaultInput = function (type) {
|
const defaultInput = function (type) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let inputVal = prompt(`Enter ${type}: `);
|
// let inputVal = prompt(`Enter ${type}: `);
|
||||||
if (inputVal === null) reject(null);
|
// if (inputVal === null) reject(null);
|
||||||
else resolve(inputVal);
|
// else resolve(inputVal);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user