Skip to content
Snippets Groups Projects
Commit 4d0842c2 authored by Alexey Lunin's avatar Alexey Lunin
Browse files

Merge branch 'master' into 505-not-being-loged-out

parents 646b4e55 1c1d62e1
Branches 505-not-being-loged-out
Tags
1 merge request!46Not being loged out from the dashboard after logging out of chrome extension
...@@ -710,25 +710,37 @@ const connection = Penpal.connectToParent({ ...@@ -710,25 +710,37 @@ const connection = Penpal.connectToParent({
}); });
}, },
logout: async () => { logout: async () => {
const authenticationPublicKey = localStorage.getItem("authenticatedIdentity"); try {
if (!authenticationPublicKey || !window.loadedIdentities[authenticationPublicKey]) { const authenticationPublicKey = localStorage.getItem("authenticatedIdentity");
if (!authenticationPublicKey || !window.loadedIdentities[authenticationPublicKey]) {
return {
data: "",
code: "400",
status: "Identity not loaded"
};
}
// Clone headers to be able destroy authentication first.
// We need it because clients should be able reload page right after logout invocation and not wait until request completed
const headers = {...window.viamApi.getConfig().headers};
destroyAuthentication();
return executeRestfulFunction(
"private",
window.viamApi,
window.viamApi.identityLogout,
{
headers
}
);
} catch (e) {
return { return {
data: "", data: "",
code: "400", code: "400",
status: "Identity not loaded" status: e.message
}; };
} }
const identityLogoutResponse = await executeRestfulFunction(
"private",
window.viamApi,
window.viamApi.identityLogout,
null
);
destroyAuthentication();
return identityLogoutResponse;
}, },
identityRestoreAccess(restoreAccessIdentity, identificator) { identityRestoreAccess(restoreAccessIdentity, identificator) {
return new Penpal.Promise(result => { return new Penpal.Promise(result => {
...@@ -1298,80 +1310,23 @@ connection.promise.then(parent => { ...@@ -1298,80 +1310,23 @@ connection.promise.then(parent => {
} }
}, 50); }, 50);
setInterval(async () => { const getNewEventsWithoutSession = async () => {
if (window.currentlyLoadedIdentity && !anynomousDeviceKeyEventsProcessing && !window.currentlyAuthenticatedIdentity) { anynomousDeviceKeyEventsProcessing = true;
anynomousDeviceKeyEventsProcessing = true; try {
try { const executeResult = await executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventGetNewEventsWithoutSession, null, "devicekey");
const executeResult = await executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventGetNewEventsWithoutSession, null, "devicekey"); if(executeResult.code === "200") {
if(executeResult.code === "200") { const eventsLen = executeResult.data.length;
const eventsLen = executeResult.data.length; let changedMaxDeviceKeyAnonymousEventTime = false;
let changedMaxDeviceKeyAnonymousEventTime = false; for (let i = 0; i < eventsLen; i++) {
for (let i = 0; i < eventsLen; i++) { const event = executeResult.data[i];
const event = executeResult.data[i]; switch (event.type) {
switch (event.type) { case "DeviceConfirmed" : {
case "DeviceConfirmed" : { await setIdentityInLocalStorage(window.currentlyLoadedIdentity);
await setIdentityInLocalStorage(window.currentlyLoadedIdentity); parent.onEvent(event);
parent.onEvent(event); break;
break;
}
case "QRCodeUpdated" : {
const actionID = event["actionID"];
const QrCode = event["payloads"][1];
const eventCopy = JSON.parse(JSON.stringify(event));
QRCode.toDataURL(actionID + "," + QrCode, function (err, url) {
eventCopy["payloads"].push(url);
parent.onEvent(eventCopy);
});
break;
}
case "KeyDeleted" : {
const authenticationPublicKey = localStorage.getItem("authenticatedIdentity");
clearPinCodeTtl(authenticationPublicKey);
localStorage.removeItem("uuid");
localStorage.removeItem("token");
localStorage.removeItem("authenticatedIdentity");
delete window.loadedIdentities[authenticationPublicKey];
window.currentlyLoadedIdentity = null;
window.currentlyAuthenticatedIdentity = null;
window.lastTimeGetProfile = 0;
destroyIdentityFromLocalStorage(authenticationPublicKey);
break;
}
default : {
parent.onEvent(event);
}
} }
changedMaxDeviceKeyAnonymousEventTime = true;
maxDeviceKeyAnonymousEventTime = Math.max(maxDeviceKeyAnonymousEventTime, event.stamp);
}
if(changedMaxDeviceKeyAnonymousEventTime) {
await executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventUpdateLastViewedWithoutSession,
null, "devicekey", maxDeviceKeyAnonymousEventTime.toString());
}
}
} catch (e) {
console.warn(e);
}
anynomousDeviceKeyEventsProcessing = false;
}
if (window.currentlyAuthenticatedIdentity != null && eventsDeviceEventsProcessing === false) { case "QRCodeUpdated" : {
eventsDeviceEventsProcessing = true;
try {
const executeResult = await executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, null, "devicekey");
if (executeResult.code === "200") {
const eventsLen = executeResult.data.length;
const changedMaxDeviceKeyEventTime = false;
for (let i = 0; i < eventsLen; i++) {
const event = executeResult.data[i];
if (event.type === "QRCodeUpdated") {
const actionID = event["actionID"]; const actionID = event["actionID"];
const QrCode = event["payloads"][1]; const QrCode = event["payloads"][1];
...@@ -1381,59 +1336,126 @@ connection.promise.then(parent => { ...@@ -1381,59 +1336,126 @@ connection.promise.then(parent => {
eventCopy["payloads"].push(url); eventCopy["payloads"].push(url);
parent.onEvent(eventCopy); parent.onEvent(eventCopy);
}); });
} else { break;
}
case "KeyDeleted" : {
const authenticationPublicKey = localStorage.getItem("authenticatedIdentity");
clearPinCodeTtl(authenticationPublicKey);
localStorage.removeItem("uuid");
localStorage.removeItem("token");
localStorage.removeItem("authenticatedIdentity");
delete window.loadedIdentities[authenticationPublicKey];
window.currentlyLoadedIdentity = null;
window.currentlyAuthenticatedIdentity = null;
window.lastTimeGetProfile = 0;
destroyIdentityFromLocalStorage(authenticationPublicKey);
break;
}
default : {
parent.onEvent(event); parent.onEvent(event);
} }
maxDeviceKeyEventTime = Math.max(maxDeviceKeyEventTime, event.stamp);
} }
if(changedMaxDeviceKeyEventTime) { changedMaxDeviceKeyAnonymousEventTime = true;
await executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, null, "devicekey", maxDeviceKeyAnonymousEventTime = Math.max(maxDeviceKeyAnonymousEventTime, event.stamp);
maxDeviceKeyEventTime.toString()); }
if(changedMaxDeviceKeyAnonymousEventTime) {
await executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventUpdateLastViewedWithoutSession,
null, "devicekey", maxDeviceKeyAnonymousEventTime.toString());
}
}
} catch (e) {
console.warn(e);
}
anynomousDeviceKeyEventsProcessing = false;
};
const getNewDeviceEvents = async () => {
eventsDeviceEventsProcessing = true;
try {
const executeResult = await executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, null, "devicekey");
if (executeResult.code === "200") {
const eventsLen = executeResult.data.length;
const changedMaxDeviceKeyEventTime = false;
for (let i = 0; i < eventsLen; i++) {
const event = executeResult.data[i];
if (event.type === "QRCodeUpdated") {
const actionID = event["actionID"];
const QrCode = event["payloads"][1];
const eventCopy = JSON.parse(JSON.stringify(event));
QRCode.toDataURL(actionID + "," + QrCode, function (err, url) {
eventCopy["payloads"].push(url);
parent.onEvent(eventCopy);
});
} else {
parent.onEvent(event);
} }
maxDeviceKeyEventTime = Math.max(maxDeviceKeyEventTime, event.stamp);
}
if(changedMaxDeviceKeyEventTime) {
await executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, null, "devicekey",
maxDeviceKeyEventTime.toString());
} }
} catch (e) {
console.warn(e);
} }
eventsDeviceEventsProcessing = false; } catch (e) {
console.warn(e);
} }
eventsDeviceEventsProcessing = false;
};
if (window.currentlyAuthenticatedIdentity != null && eventsEntityEventsProcessing === false) { const getNewEntityEvents = async () => {
eventsEntityEventsProcessing = true; eventsEntityEventsProcessing = true;
try { try {
const executeResult = await executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, null, "entity"); const executeResult = await executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, null, "entity");
if (executeResult.code === "200") {
const eventsLen = executeResult.data.length;
let changedMaxEntityEventTime = false;
for (let i = 0; i < eventsLen; i++) {
const event = executeResult.data[i];
if (event.type === "QRCodeUpdated") {
const actionID = event["actionID"];
const QrCode = event["payloads"][1];
const eventCopy = JSON.parse(JSON.stringify(event)); if (executeResult.code === "200") {
const eventsLen = executeResult.data.length;
let changedMaxEntityEventTime = false;
for (let i = 0; i < eventsLen; i++) {
const event = executeResult.data[i];
if (event.type === "QRCodeUpdated") {
const actionID = event["actionID"];
const QrCode = event["payloads"][1];
QRCode.toDataURL(actionID + "," + QrCode, function (err, url) { const eventCopy = JSON.parse(JSON.stringify(event));
eventCopy["payloads"].push(url);
parent.onEvent(eventCopy);
});
continue; QRCode.toDataURL(actionID + "," + QrCode, function (err, url) {
} eventCopy["payloads"].push(url);
parent.onEvent(eventCopy);
});
parent.onEvent(event); continue;
changedMaxEntityEventTime = true;
maxEntityEventTime = Math.max(maxEntityEventTime, event.stamp);
}
if(changedMaxEntityEventTime) {
await executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, null, "entity",
maxEntityEventTime.toString());
} }
parent.onEvent(event);
changedMaxEntityEventTime = true;
maxEntityEventTime = Math.max(maxEntityEventTime, event.stamp);
}
if(changedMaxEntityEventTime) {
await executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, null, "entity",
maxEntityEventTime.toString());
} }
} catch (e) {
console.warn(e);
} }
eventsEntityEventsProcessing = false; } catch (e) {
console.warn(e);
}
eventsEntityEventsProcessing = false;
}
setInterval(() => {
if (window.currentlyLoadedIdentity && !anynomousDeviceKeyEventsProcessing && !window.currentlyAuthenticatedIdentity) {
getNewEventsWithoutSession();
}
if (window.currentlyAuthenticatedIdentity) {
// These functions has to be executed at the same time.
!eventsDeviceEventsProcessing && getNewDeviceEvents();
!eventsEntityEventsProcessing && getNewEntityEvents();
} }
}, 1000); }, 1000);
}); });
...@@ -38,9 +38,17 @@ func buildPenpalMethods() string { ...@@ -38,9 +38,17 @@ func buildPenpalMethods() string {
prefixes := []string{} prefixes := []string{}
endPoints := server.GetEndPoints(prefixes) endPoints := server.GetEndPoints(prefixes)
result := result := `
"import Penpal from 'penpal';\n\n" + const encodeResponse = (code, data, status) => {
"export default {\n" return {
code,
data,
status
};
};
export default {
`
methods := generatePenpalRemoteMethods(endPoints) methods := generatePenpalRemoteMethods(endPoints)
...@@ -590,31 +598,13 @@ func generatePenpalRemoteMethods(endPoints map[string]*server.EndPoint) string { ...@@ -590,31 +598,13 @@ func generatePenpalRemoteMethods(endPoints map[string]*server.EndPoint) string {
privateCheckSnippet := ` privateCheckSnippet := `
const authenticationPublicKey = localStorage.getItem("authenticatedIdentity"); const authenticationPublicKey = localStorage.getItem("authenticatedIdentity");
if (authenticationPublicKey === null) { if (
result({ !authenticationPublicKey ||
"data" : "", !window.loadedIdentities[authenticationPublicKey] ||
"code" : "400", !extendPinCodeTtl(authenticationPublicKey)
"status" : "Identity not authenticated" ) {
}); return encodeResponse("400", "", "Identity not authenticated");
} }
if (loadedIdentities[authenticationPublicKey] === null) {
result({
"data" : "",
"code" : "400",
"status" : "Identity not authenticated"
});
}
const success = extendPinCodeTtl(authenticationPublicKey);
if(success === false) {
result({"data" : "",
"code" : "400",
"status" : "Identity not authenticated"
})
}
` `
for i := 0; i < keysLen; i++ { for i := 0; i < keysLen; i++ {
...@@ -626,24 +616,14 @@ func generatePenpalRemoteMethods(endPoints map[string]*server.EndPoint) string { ...@@ -626,24 +616,14 @@ func generatePenpalRemoteMethods(endPoints map[string]*server.EndPoint) string {
if url == "/identity/getIdentityProfileData" { if url == "/identity/getIdentityProfileData" {
privateCheckSnippet = ` privateCheckSnippet = `
const authenticationPublicKey = localStorage.getItem("authenticatedIdentity"); const authenticationPublicKey = localStorage.getItem("authenticatedIdentity");
if (authenticationPublicKey === null) { if (
result({ !authenticationPublicKey ||
"data" : "", !window.loadedIdentities[authenticationPublicKey]
"code" : "400", ) {
"status" : "Identity not authenticated" return encodeResponse("400", "", "Identity not authenticated");
}); }
}
if (loadedIdentities[authenticationPublicKey] === null) {
result({
"data" : "",
"code" : "400",
"status" : "Identity not authenticated"
});
}
` `
} }
...@@ -685,12 +665,9 @@ func generatePenpalRemoteMethods(endPoints map[string]*server.EndPoint) string { ...@@ -685,12 +665,9 @@ func generatePenpalRemoteMethods(endPoints map[string]*server.EndPoint) string {
lastComma = "" lastComma = ""
} }
method := packageStr + strings.Title(methodStr) + ": function(" + args + ") {\n" + method := packageStr + strings.Title(methodStr) + ": async function(" + args + ") {\n" +
" return new Penpal.Promise(function(result) {\n" + snippet + snippet +
" executeRestfulFunction(\"" + endPoints[url].HandlerType + "\", viamApi, viamApi." + packageStr + strings.Title(methodStr) + ", null" + lastComma + args + ").then(function(executeResult) {\n" + " return await executeRestfulFunction(\"" + endPoints[url].HandlerType + "\", viamApi, viamApi." + packageStr + strings.Title(methodStr) + ", null" + lastComma + args + ");\n" +
" result(executeResult);\n" +
" });\n" +
" });\n" +
"}" "}"
methods += method methods += method
...@@ -713,12 +690,9 @@ func generatePenpalRemoteMethods(endPoints map[string]*server.EndPoint) string { ...@@ -713,12 +690,9 @@ func generatePenpalRemoteMethods(endPoints map[string]*server.EndPoint) string {
snippet = privateCheckSnippet snippet = privateCheckSnippet
} }
method := packageStr + strings.Title(methodStr) + ": function() {\n" + method := packageStr + strings.Title(methodStr) + ": async function() {\n" +
" return new Penpal.Promise(function(result) {\n" + snippet + snippet +
" executeRestfulFunction(\"" + endPoints[url].HandlerType + "\", viamApi, viamApi." + packageStr + strings.Title(methodStr) + ", null).then(function(executeResult) {\n" + " return await executeRestfulFunction(\"" + endPoints[url].HandlerType + "\", viamApi, viamApi." + packageStr + strings.Title(methodStr) + ", null);\n" +
" result(executeResult);\n" +
" });\n" +
" });\n" +
"}" "}"
methods += method methods += method
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment