From 24d95c5fd9d8a4fb9743f87383a03ec35b7d1b45 Mon Sep 17 00:00:00 2001 From: Rick Lambrechts Date: Fri, 1 Nov 2024 13:28:21 +0100 Subject: [PATCH 1/4] Add config option to enable or disable firebase --- .env.template | 1 + src/config.ts | 1 + src/firebase.js | 16 ++++++++++------ 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/.env.template b/.env.template index 77998265..2ab7cb98 100644 --- a/.env.template +++ b/.env.template @@ -3,6 +3,7 @@ PORT=3000 REACT_APP_WS_URL=ws://wallet-backend-server:8002 REACT_APP_WALLET_BACKEND_URL=http://wallet-backend-server:8002 REACT_APP_LOGIN_WITH_PASSWORD=false +REACT_APP_FIREBASE_ENABLED=false REACT_APP_FIREBASE_VAPIDKEY= REACT_APP_FIREBASE_API_KEY= REACT_APP_FIREBASE_AUTH_DOMAIN= diff --git a/src/config.ts b/src/config.ts index 415973a8..7ff0a5fb 100644 --- a/src/config.ts +++ b/src/config.ts @@ -13,6 +13,7 @@ export const FIREBASE = { projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID, storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET, }; +export const FIREBASE_ENABLED: boolean = process.env.REACT_APP_FIREBASE_ENABLED ? JSON.parse(process.env.REACT_APP_FIREBASE_ENABLED) === true : false; export const FIREBASE_VAPIDKEY = process.env.REACT_APP_FIREBASE_VAPIDKEY; export const INACTIVE_LOGOUT_MILLIS = (process.env.REACT_APP_INACTIVE_LOGOUT_SECONDS ? parseInt(process.env.REACT_APP_INACTIVE_LOGOUT_SECONDS, 10) : 60 * 15) * 1000 export const LOGIN_WITH_PASSWORD: boolean = process.env.REACT_APP_LOGIN_WITH_PASSWORD ? JSON.parse(process.env.REACT_APP_LOGIN_WITH_PASSWORD) === true : false; diff --git a/src/firebase.js b/src/firebase.js index 5fe6816b..f9425542 100644 --- a/src/firebase.js +++ b/src/firebase.js @@ -9,8 +9,12 @@ export const notificationApiIsSupported = 'serviceWorker' in navigator && 'PushManager' in window; +export async function isEnabledAndIsSupported() { + return config.FIREBASE_ENABLED && await isSupported(); +} + export async function register() { - if (await isSupported() && 'serviceWorker' in navigator) { + if (await isEnabledAndIsSupported() && 'serviceWorker' in navigator) { try { const existingRegistration = await navigator.serviceWorker.getRegistration('/notifications/'); if (existingRegistration) { @@ -28,7 +32,7 @@ export async function register() { }; const requestForToken = async () => { - if (!await isSupported()) { + if (!await isEnabledAndIsSupported()) { return null; } if (messaging) { @@ -61,7 +65,7 @@ const requestForToken = async () => { }; const reRegisterServiceWorkerAndGetToken = async () => { - if (!await isSupported()) { + if (!await isEnabledAndIsSupported()) { return null; } if ('serviceWorker' in navigator) { @@ -90,7 +94,7 @@ const reRegisterServiceWorkerAndGetToken = async () => { }; export const fetchToken = async () => { - if (await isSupported() && messaging) { + if (await isEnabledAndIsSupported() && messaging) { const token = await requestForToken(); console.log('token:', token); if (token) { @@ -112,7 +116,7 @@ export const fetchToken = async () => { export const onMessageListener = () => new Promise(async (resolve) => { - if (await isSupported()) { + if (await isEnabledAndIsSupported()) { onMessage(messaging, (payload) => { resolve(payload); }); @@ -121,7 +125,7 @@ export const onMessageListener = () => const initializeFirebaseAndMessaging = async () => { if (notificationApiIsSupported) { - let supported = await isSupported(); + let supported = await isEnabledAndIsSupported(); if (supported) { initializeApp(config.FIREBASE); messaging = getMessaging(); From 56f9f671dadbf459bfd17d18aa1d78920fb3ccca Mon Sep 17 00:00:00 2001 From: Rick Lambrechts Date: Fri, 1 Nov 2024 13:49:43 +0100 Subject: [PATCH 2/4] Fix redirect popup list of credentials, when no locale matches --- src/components/Popups/RedirectPopup.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Popups/RedirectPopup.js b/src/components/Popups/RedirectPopup.js index 36410b6b..ec38e7a8 100644 --- a/src/components/Popups/RedirectPopup.js +++ b/src/components/Popups/RedirectPopup.js @@ -52,7 +52,7 @@ const RedirectPopup = ({ loading, availableCredentialConfigurations, onClose, ha aria-label={`Option ${credentialConfigurationId}`} /> ) From 743428e5a42cc242abfdc9ca518c07ccae19dfd3 Mon Sep 17 00:00:00 2001 From: Rick Lambrechts Date: Fri, 1 Nov 2024 15:20:00 +0100 Subject: [PATCH 3/4] Enhance RedirectPopup by setting key for list item and using className and htmlFor attributes --- src/components/Popups/RedirectPopup.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/Popups/RedirectPopup.js b/src/components/Popups/RedirectPopup.js index 36410b6b..a76d0b27 100644 --- a/src/components/Popups/RedirectPopup.js +++ b/src/components/Popups/RedirectPopup.js @@ -40,18 +40,18 @@ const RedirectPopup = ({ loading, availableCredentialConfigurations, onClose, ha {configurationsCount > 1 && Object.keys(availableCredentialConfigurations).map((credentialConfigurationId, index) => { return ( -
+
-
From f2a9e93d96380f7f9cad9e8bfa3333a94da0cf7d Mon Sep 17 00:00:00 2001 From: kkmanos Date: Mon, 4 Nov 2024 13:50:43 +0200 Subject: [PATCH 4/4] fix: derive 'alg' from the header to import the certificate --- src/lib/services/OpenID4VPRelyingParty.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/services/OpenID4VPRelyingParty.ts b/src/lib/services/OpenID4VPRelyingParty.ts index dc26067c..3cea8da0 100644 --- a/src/lib/services/OpenID4VPRelyingParty.ts +++ b/src/lib/services/OpenID4VPRelyingParty.ts @@ -50,7 +50,7 @@ export class OpenID4VPRelyingParty implements IOpenID4VPRelyingParty { const [header, payload] = requestObject.split('.'); const parsedHeader = JSON.parse(new TextDecoder().decode(base64url.decode(header))); - const publicKey = await importX509(getPublicKeyFromB64Cert(parsedHeader.x5c[0]), 'RS256'); + const publicKey = await importX509(getPublicKeyFromB64Cert(parsedHeader.x5c[0]), parsedHeader.alg); const verificationResult = await jwtVerify(requestObject, publicKey).catch(() => null); if (verificationResult == null) { console.log("Signature verification of request_uri failed");