From ee994cbf193c5c516cd9fb4572efc08da6232361 Mon Sep 17 00:00:00 2001 From: frodehansen2 Date: Fri, 23 Aug 2024 16:09:57 +0200 Subject: [PATCH] Verifiser innlogget bruker ved window.focus - innsyn --- .../src/hooks/useVerifyUserOnWindowFocus.ts | 27 +++++++++++++++++++ .../dine-pleiepenger/src/pages/index.page.tsx | 14 ++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 apps/dine-pleiepenger/src/hooks/useVerifyUserOnWindowFocus.ts diff --git a/apps/dine-pleiepenger/src/hooks/useVerifyUserOnWindowFocus.ts b/apps/dine-pleiepenger/src/hooks/useVerifyUserOnWindowFocus.ts new file mode 100644 index 0000000000..b3a38fd845 --- /dev/null +++ b/apps/dine-pleiepenger/src/hooks/useVerifyUserOnWindowFocus.ts @@ -0,0 +1,27 @@ +import { useEffect } from 'react'; +import { ApplikasjonHendelse, useAmplitudeInstance } from '@navikt/sif-common-amplitude'; +import * as apiUtils from '@navikt/sif-common-core-ds/src/utils/apiUtils'; +import { isAxiosError } from 'axios'; + +export const useVerifyUserOnWindowFocus = (userId: string, getUserId: () => Promise) => { + const { logHendelse } = useAmplitudeInstance(); + useEffect(() => { + const handleFocus = async () => { + try { + const id = await getUserId(); + if (id !== userId) { + await logHendelse(ApplikasjonHendelse.innloggetBrukerErEndret); + window.location.reload(); + } + } catch (error) { + if (error && isAxiosError(error) && apiUtils.isUnauthorized(error)) { + window.location.reload(); + } + } + }; + window.addEventListener('focus', handleFocus); + return () => { + window.removeEventListener('focus', handleFocus); + }; + }, []); +}; diff --git a/apps/dine-pleiepenger/src/pages/index.page.tsx b/apps/dine-pleiepenger/src/pages/index.page.tsx index df44d14444..3e07ffe150 100644 --- a/apps/dine-pleiepenger/src/pages/index.page.tsx +++ b/apps/dine-pleiepenger/src/pages/index.page.tsx @@ -1,20 +1,24 @@ import { Box, VStack } from '@navikt/ds-react'; import { ReactElement } from 'react'; +import axios from 'axios'; import Head from 'next/head'; import { withAuthenticatedPage } from '../auth/withAuthentication'; import DineInnsendteSøknader from '../components/dine-innsendte-søknader/DineInnsendteSøknader'; import HvaSkjer from '../components/hva-skjer/HvaSkjer'; +import IngenSakEllerSøknadPage from '../components/ingen-sak-eller-søknad-page/IngenSakEllerSøknadPage'; import DefaultPageLayout from '../components/page-layout/default-page-layout/DefaultPageLayout'; import Saksbehandlingstid from '../components/saksbehandlingstid/Saksbehandlingstid'; import Snarveier from '../components/snarveier/Snarveier'; import VelgSakPage from '../components/velg-sak-page/VelgSakPage'; import { useInnsynsdataContext } from '../hooks/useInnsynsdataContext'; import { useLogBrukerprofil } from '../hooks/useLogBrukerprofil'; +import { useVerifyUserOnWindowFocus } from '../hooks/useVerifyUserOnWindowFocus'; import { useAppIntl } from '../i18n'; import { PleietrengendeMedSak } from '../server/api-models/PleietrengendeMedSakSchema'; +import { Søker } from '../server/api-models/SøkerSchema'; import { InnsendtSøknad, InnsendtSøknadstype } from '../types/InnsendtSøknad'; +import { browserEnv } from '../utils/env'; import SakPage from './sak/SakPage'; -import IngenSakEllerSøknadPage from '../components/ingen-sak-eller-søknad-page/IngenSakEllerSøknadPage'; const harSendtInnSøknadEllerEndringsmelding = (søknader: InnsendtSøknad[]): boolean => { return søknader.some( @@ -31,12 +35,18 @@ const getSaksbehandlingsfrist = (søknader: InnsendtSøknad[], saker: Pleietreng return undefined; }; +const søkerIdFetcher = async (): Promise => { + const url = `${browserEnv.NEXT_PUBLIC_BASE_PATH}/api/soker`; + return axios.get(url).then((res) => res.data.fødselsnummer); +}; + function DinePleiepengerPage(): ReactElement { const { - innsynsdata: { innsendteSøknader, saker, saksbehandlingstidUker, brukerprofil }, + innsynsdata: { innsendteSøknader, saker, saksbehandlingstidUker, brukerprofil, søker }, } = useInnsynsdataContext(); useLogBrukerprofil(brukerprofil); + useVerifyUserOnWindowFocus(søker.fødselsnummer, søkerIdFetcher); const { text } = useAppIntl();