all repos — caroster @ ab8a41da0d4ed69e49cd079c63b765d39d393dbd

[Octree] Group carpool to your event https://caroster.io

fix: :bug: Hash banner text for comparison
Tim Izzo tim@octree.ch
Wed, 28 Sep 2022 10:23:27 +0000
commit

ab8a41da0d4ed69e49cd079c63b765d39d393dbd

parent

ff0d7c9aa372e183a1bede5b714d73fc66afffb2

M frontend/components/Banner/index.tsxfrontend/components/Banner/index.tsx

@@ -2,7 +2,7 @@ import {Icon} from '@material-ui/core';

import Button from '@material-ui/core/Button'; import {makeStyles} from '@material-ui/core/styles'; import {useState} from 'react'; -import {setCookie} from '../../lib/cookies'; +import {hashText, setCookie} from '../../lib/cookies'; import Markdown from '../Markdown'; const ANNOUNCEMENT_COOKIE = 'lastAnnouncementSeen';

@@ -17,7 +17,8 @@ const classes = useStyles();

const [showBanner, setShowBanner] = useState(!!announcement); const onBannerClear = () => { - setCookie(ANNOUNCEMENT_COOKIE, `${announcement}`); + const hashedMessage = hashText(announcement); + setCookie(ANNOUNCEMENT_COOKIE, hashedMessage); setShowBanner(false); };
M frontend/lib/cookies.tsfrontend/lib/cookies.ts

@@ -1,3 +1,8 @@

+import sha1 from 'crypto-js/sha1'; +import EncBase64 from 'crypto-js/enc-base64'; + +export const hashText = (text: string) => sha1(text).toString(EncBase64); + export const getCookie = (cname: string, cookieHeader?: string) => { const cookieString = typeof document === 'undefined' ? cookieHeader : document.cookie;
M frontend/lib/pageUtils.tsfrontend/lib/pageUtils.ts

@@ -2,7 +2,7 @@ import {ApolloClient} from '@apollo/client';

import {getSession} from 'next-auth/react'; import {ProfileDocument, SettingDocument} from '../generated/graphql'; import {initializeApollo, APOLLO_STATE_PROP_NAME} from './apolloClient'; -import {getCookie} from './cookies'; +import {getCookie, hashText} from './cookies'; type ServerSideExtension = ( context: any,

@@ -29,13 +29,18 @@ query: SettingDocument,

variables: {locale}, }); let announcement = setting?.data?.attributes?.announcement || ''; - const lastAnnouncementSeen = getCookie( - 'lastAnnouncementSeen', - context.req.headers.cookie - ); - if (!announcement || announcement === lastAnnouncementSeen) - announcement = null; + if (!announcement) announcement = null; + else { + const lastAnnouncementSeen = getCookie( + 'lastAnnouncementSeen', + context.req.headers.cookie + ); + const hashedAnnouncement = hashText(announcement); + if (hashedAnnouncement === lastAnnouncementSeen) { + announcement = null; + } + } if (session) await apolloClient.query({
M frontend/package.jsonfrontend/package.json

@@ -16,6 +16,7 @@ "@date-io/dayjs": "1.x",

"@date-io/moment": "1.x", "@material-ui/core": "^4.12.4", "@material-ui/pickers": "^3.3.10", + "crypto-js": "^4.1.1", "deepmerge": "^4.2.2", "graphql": "^16.6.0", "i18next": "^21.9.1",
M frontend/yarn.lockfrontend/yarn.lock

@@ -2685,6 +2685,11 @@ path-key "^3.1.0"

shebang-command "^2.0.0" which "^2.0.1" +crypto-js@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf" + integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw== + crypto-random-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"