From 5af06c76f6ebdf1b092cc6da17b63068eb069400 Mon Sep 17 00:00:00 2001 From: Debian Dev4 Date: Thu, 18 Sep 2025 22:20:19 +0000 Subject: [PATCH] ci: docker_tag=ext feat(front): callback bridge authorized-bridge; bump 0.1.6; changelog --- CHANGELOG.md | 7 +++++++ package.json | 4 ++-- src/pages/authorized-bridge.tsx | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 src/pages/authorized-bridge.tsx diff --git a/CHANGELOG.md b/CHANGELOG.md index b72e63ce..cb7bbf83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,3 +26,10 @@ - Next.js `output: 'standalone'` pour une image runtime plus légère. - Caches BuildKit (npm et .next) pour accélérer les builds. - Runtime basé sur `server.js` (standalone) au lieu de `next start`. + +## v0.1.6 + +- Mise en place d’un "callback bridge" pour IdNot: + - Page bridge côté domaine autorisé (`/authorized-client`) qui POST le `code` vers `/api/v1/idnot/auth` et redirige. + - Page front `/lecoffre/authorized-bridge` qui consomme `#token`/`#error`, stocke le cookie et redirige vers le tableau de bord. +- Permet le login sans modifier la liste des callbacks autorisés chez IdNot. diff --git a/package.json b/package.json index 92c7a90a..593bdac2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lecoffre-front", - "version": "0.1.5", + "version": "0.1.6", "private": true, "scripts": { "dev": "next dev", @@ -37,7 +37,7 @@ "react": "18.2.0", "react-dom": "18.2.0", "react-gtm-module": "^2.0.11", - + "react-select": "^5.7.2", "react-toastify": "^9.1.3", "sass": "^1.59.2", diff --git a/src/pages/authorized-bridge.tsx b/src/pages/authorized-bridge.tsx new file mode 100644 index 00000000..b278dded --- /dev/null +++ b/src/pages/authorized-bridge.tsx @@ -0,0 +1,33 @@ +import { useEffect } from 'react'; +import { useRouter } from 'next/router'; +import Module from '@Front/Config/Module'; +import CookieService from '@Front/Services/CookieService/CookieService'; + +export default function AuthorizedBridge() { + const router = useRouter(); + + useEffect(() => { + try { + const hash = typeof window !== 'undefined' ? window.location.hash : ''; + const params = new URLSearchParams(hash.replace(/^#/, '')); + const token = params.get('token'); + const error = params.get('error'); + + if (token) { + CookieService.getInstance().setCookie('leCoffreAccessToken', token); + // Aller sur le tableau de bord + window.location.replace(Module.getInstance().get().modules.pages.Folder.props.path); + return; + } + + // En cas d'erreur, renvoyer vers la page login avec un code générique + const loginPath = Module.getInstance().get().modules.pages.Login.props.path; + router.replace(`${loginPath}?error=${encodeURIComponent(error || '1')}`); + } catch (_e) { + const loginPath = Module.getInstance().get().modules.pages.Login.props.path; + router.replace(`${loginPath}?error=1`); + } + }, [router]); + + return null; +}