From f938a4faac294ddcaffd418d2b96f71a289a2dcb Mon Sep 17 00:00:00 2001 From: Piotr Gawron <p.gawron@atcomp.pl> Date: Wed, 13 Nov 2024 14:43:29 +0100 Subject: [PATCH] cookie banner data should be valid for 365 days --- .../CookieBanner/CookieBanner.component.tsx | 21 ++++++++++++++++++- .../CookieBanner/CookieBanner.constants.ts | 1 + 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/components/FunctionalArea/CookieBanner/CookieBanner.component.tsx b/src/components/FunctionalArea/CookieBanner/CookieBanner.component.tsx index 770e3c9b..77489287 100644 --- a/src/components/FunctionalArea/CookieBanner/CookieBanner.component.tsx +++ b/src/components/FunctionalArea/CookieBanner/CookieBanner.component.tsx @@ -16,6 +16,7 @@ import { injectMatomoTracking } from '@/utils/injectMatomoTracking'; import { USER_ACCEPTED_COOKIES_COOKIE_NAME, USER_ACCEPTED_COOKIES_COOKIE_VALUE, + USER_ACCEPTED_COOKIES_DATE, USER_ACCEPTED_MATOMO_COOKIES_COOKIE_NAME, } from './CookieBanner.constants'; @@ -33,11 +34,28 @@ export const CookieBanner = (): React.ReactNode => { const [options, setOptions] = useState([selectMatomoOption]); useEffect(() => { - const isAccepted = + const userAcceptedCookieDate = localStorage.getItem(USER_ACCEPTED_COOKIES_DATE); + let isAccepted = localStorage.getItem(USER_ACCEPTED_COOKIES_COOKIE_NAME) === USER_ACCEPTED_COOKIES_COOKIE_VALUE.ACCEPTED && localStorage.getItem(USER_ACCEPTED_MATOMO_COOKIES_COOKIE_NAME) !== null && localStorage.getItem(USER_ACCEPTED_MATOMO_COOKIES_COOKIE_NAME) !== undefined; + if (!userAcceptedCookieDate) { + isAccepted = false; + } else { + const whenAccepted = Date.parse(userAcceptedCookieDate); + const now = Date.now(); + + // eslint-disable-next-line no-magic-numbers + const oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds + + const diffDays = Math.round(Math.abs((now - whenAccepted) / oneDay)); + // eslint-disable-next-line no-magic-numbers + if (diffDays > 365) { + isAccepted = false; + } + } + if (isAccepted) { dispatch(acceptCookies()); } else { @@ -51,6 +69,7 @@ export const CookieBanner = (): React.ReactNode => { USER_ACCEPTED_COOKIES_COOKIE_NAME, USER_ACCEPTED_COOKIES_COOKIE_VALUE.ACCEPTED, ); + localStorage.setItem(USER_ACCEPTED_COOKIES_DATE, new Date().toISOString().split('T')[ZERO]); if (options.length > ZERO) { localStorage.setItem( USER_ACCEPTED_MATOMO_COOKIES_COOKIE_NAME, diff --git a/src/components/FunctionalArea/CookieBanner/CookieBanner.constants.ts b/src/components/FunctionalArea/CookieBanner/CookieBanner.constants.ts index dc1f3a5f..a5b0e9a8 100644 --- a/src/components/FunctionalArea/CookieBanner/CookieBanner.constants.ts +++ b/src/components/FunctionalArea/CookieBanner/CookieBanner.constants.ts @@ -1,4 +1,5 @@ export const USER_ACCEPTED_COOKIES_COOKIE_NAME = 'cookiesAccepted'; +export const USER_ACCEPTED_COOKIES_DATE = 'cookiesAcceptedDate'; export const USER_ACCEPTED_MATOMO_COOKIES_COOKIE_NAME = 'matomoAccepted'; export const USER_ACCEPTED_COOKIES_COOKIE_VALUE = { -- GitLab