From 787dfca588d2c66515ed81bdf35f9e18353069a6 Mon Sep 17 00:00:00 2001 From: andrewprog97 Date: Wed, 15 Nov 2023 17:39:58 +0300 Subject: [PATCH] add login session --- package-lock.json | 63 ++++++++++++++++++++++++++++++++++++ package.json | 1 + src/app/App.js | 10 +++++- src/app/utils/utils.js | 14 ++++---- src/background/background.js | 13 ++++++++ 5 files changed, 92 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6c269f3..8b4ece4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,6 +26,7 @@ "@babel/core": "^7.21.4", "@babel/preset-env": "^7.21.4", "@babel/preset-react": "^7.18.6", + "@types/chrome": "^0.0.251", "babel-loader": "^9.1.2", "copy-webpack-plugin": "^11.0.0", "css-loader": "^6.7.3", @@ -3634,6 +3635,16 @@ "@types/node": "*" } }, + "node_modules/@types/chrome": { + "version": "0.0.251", + "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.251.tgz", + "integrity": "sha512-UF+yr0LEKWWGsKxQ5A3XOSF5SNoU1ctW3pXcWJPpT8OOUTEspYeaLU8spDKe+6xalXeMTS0TBrX1g0b6qlWmkw==", + "dev": true, + "dependencies": { + "@types/filesystem": "*", + "@types/har-format": "*" + } + }, "node_modules/@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", @@ -3695,6 +3706,21 @@ "@types/range-parser": "*" } }, + "node_modules/@types/filesystem": { + "version": "0.0.35", + "resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.35.tgz", + "integrity": "sha512-1eKvCaIBdrD2mmMgy5dwh564rVvfEhZTWVQQGRNn0Nt4ZEnJ0C8oSUCzvMKRA4lGde5oEVo+q2MrTTbV/GHDCQ==", + "dev": true, + "dependencies": { + "@types/filewriter": "*" + } + }, + "node_modules/@types/filewriter": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.32.tgz", + "integrity": "sha512-Kpi2GXQyYJdjL8mFclL1eDgihn1SIzorMZjD94kdPZh9E4VxGOeyjPxi5LpsM4Zku7P0reqegZTt2GxhmA9VBg==", + "dev": true + }, "node_modules/@types/graceful-fs": { "version": "4.1.6", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", @@ -3703,6 +3729,12 @@ "@types/node": "*" } }, + "node_modules/@types/har-format": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.15.tgz", + "integrity": "sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==", + "dev": true + }, "node_modules/@types/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", @@ -19879,6 +19911,16 @@ "@types/node": "*" } }, + "@types/chrome": { + "version": "0.0.251", + "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.251.tgz", + "integrity": "sha512-UF+yr0LEKWWGsKxQ5A3XOSF5SNoU1ctW3pXcWJPpT8OOUTEspYeaLU8spDKe+6xalXeMTS0TBrX1g0b6qlWmkw==", + "dev": true, + "requires": { + "@types/filesystem": "*", + "@types/har-format": "*" + } + }, "@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", @@ -19940,6 +19982,21 @@ "@types/range-parser": "*" } }, + "@types/filesystem": { + "version": "0.0.35", + "resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.35.tgz", + "integrity": "sha512-1eKvCaIBdrD2mmMgy5dwh564rVvfEhZTWVQQGRNn0Nt4ZEnJ0C8oSUCzvMKRA4lGde5oEVo+q2MrTTbV/GHDCQ==", + "dev": true, + "requires": { + "@types/filewriter": "*" + } + }, + "@types/filewriter": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.32.tgz", + "integrity": "sha512-Kpi2GXQyYJdjL8mFclL1eDgihn1SIzorMZjD94kdPZh9E4VxGOeyjPxi5LpsM4Zku7P0reqegZTt2GxhmA9VBg==", + "dev": true + }, "@types/graceful-fs": { "version": "4.1.6", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", @@ -19948,6 +20005,12 @@ "@types/node": "*" } }, + "@types/har-format": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.15.tgz", + "integrity": "sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==", + "dev": true + }, "@types/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", diff --git a/package.json b/package.json index e673aae..daf9972 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "@babel/core": "^7.21.4", "@babel/preset-env": "^7.21.4", "@babel/preset-react": "^7.18.6", + "@types/chrome": "^0.0.251", "babel-loader": "^9.1.2", "copy-webpack-plugin": "^11.0.0", "css-loader": "^6.7.3", diff --git a/src/app/App.js b/src/app/App.js index 204c908..496daba 100644 --- a/src/app/App.js +++ b/src/app/App.js @@ -1,3 +1,4 @@ +/*global chrome*/ import { useContext, useEffect, useState, useCallback } from "react"; import { Router } from "react-chrome-extension-router"; import AppPlug from "./components/AppPlug/AppPlug"; @@ -28,12 +29,19 @@ function App() { const [confirmationModalOpen, setConfirmationModalOpen] = useState(false); const [incorrectPassword, setIncorrectPassword] = useState(false); - const [loggedIn, setLoggedIn] = useState(getSessionLogIn()); + const [loggedIn, setLoggedIn] = useState(false); // Flags of display // creatingPassword flag has an effect only in case of loggedIn flag is false. // creatingPassword flag means whether to show the password create screen or existing password enter screen. const creatingPassword = !passwordExists(); + + useEffect(() => { + async function loadLogin() { + setLoggedIn(await getSessionLogIn()); + } + loadLogin(); + }, []); const executeTransfer = useCallback(async () => { try { diff --git a/src/app/utils/utils.js b/src/app/utils/utils.js index 49254e1..8bfeaa0 100644 --- a/src/app/utils/utils.js +++ b/src/app/utils/utils.js @@ -1,3 +1,4 @@ +/*global chrome*/ import Big from "big.js"; import sha256 from "sha256"; @@ -42,14 +43,11 @@ export const passwordExists = () => { return !!localStorage.getItem("hash"); } -export const getSessionLogIn = () => { - return !!sessionStorage.getItem("login"); +export const getSessionLogIn = async () => { + // return !!localStorage.getItem("login"); + return !!(await fetchBackground({ method: "GET_LOGIN" })).login; } -export const setSessionLogIn = (login) => { - if (login) { - sessionStorage.setItem("login", true); - } else { - sessionStorage.removeItem("login"); - } +export const setSessionLogIn = async (login) => { + await fetchBackground({ method: "SET_LOGIN", login: !!login }) } \ No newline at end of file diff --git a/src/background/background.js b/src/background/background.js index 6b5c5d8..1ffd0a4 100644 --- a/src/background/background.js +++ b/src/background/background.js @@ -15,6 +15,8 @@ chrome.runtime.onStartup.addListener(() => { let pendingTx = null; +const userData = { login: false }; + // eslint-disable-next-line no-undef chrome.storage.local.get("pendingTx", (result) => { if (result.pendingTx) { @@ -148,6 +150,17 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { sendResponse({ error: "No pending transaction" }); } break; + + case "SET_LOGIN": { + userData.login = request.login; + sendResponse({ success: true }); + break; + } + + case "GET_LOGIN": { + sendResponse({ login: userData.login }); + break; + } default: console.error("Unknown message method:", request.method);