Merge branch 'INDA-330-pii-update' into 'main'
[ProtonMail-WebClient.git] / packages / account / organization / theme / cookie.ts
blob3f28aa82595896ba38c90c817cb8f4a7af1447f5
1 import { decodeUtf8, encodeUtf8 } from '@proton/crypto/lib/utils';
2 import { getCookie, setCookie } from '@proton/shared/lib/helpers/cookies';
3 import { decodeBase64URL, encodeBase64URL } from '@proton/shared/lib/helpers/encoding';
4 import { getSecondLevelDomain } from '@proton/shared/lib/helpers/url';
5 import type { OrganizationWithSettings } from '@proton/shared/lib/interfaces';
7 export const COOKIE_NAME = 'OrgTheme';
9 export const syncToCookie = (cookieValue: string | undefined) => {
10     // Note: We might set `undefined` which will clear the cookie
11     setCookie({
12         cookieName: COOKIE_NAME,
13         cookieValue,
14         cookieDomain: getSecondLevelDomain(window.location.hostname),
15         path: '/',
16         expirationDate: 'max',
17     });
20 export interface OrgThemeCookie {
21     LogoID: string;
22     Name: string;
23     LocalID: number;
26 export const serializeOrgTheme = (organization: OrganizationWithSettings | undefined, localID: number) => {
27     const settings = organization?.Settings;
28     if (!settings || !settings.LogoID) {
29         return undefined;
30     }
31     const value: OrgThemeCookie = {
32         LogoID: settings.LogoID,
33         Name: (organization?.Name || '').slice(0, 50),
34         LocalID: localID,
35     };
36     return encodeBase64URL(encodeUtf8(JSON.stringify(value)));
39 export const deserializeOrgTheme = (serializedValue: string): OrgThemeCookie | undefined => {
40     try {
41         const deserializedValue = decodeUtf8(decodeBase64URL(serializedValue));
42         const parsedValue = JSON.parse(deserializedValue);
43         const value: OrgThemeCookie = {
44             LogoID: String(parsedValue.LogoID),
45             Name: String(parsedValue.Name),
46             LocalID: Number(parsedValue.LocalID),
47         };
48         return value;
49     } catch (e) {}
52 export const getOrganizationThemeFromCookie = () => {
53     const cookie = getCookie(COOKIE_NAME);
54     if (!cookie) {
55         return undefined;
56     }
57     return deserializeOrgTheme(cookie);