From 5bd99a12166de4fdee2a35ac05d3cf2985c5763b Mon Sep 17 00:00:00 2001 From: Andrea Barbasso <´andrea.barbasso@4science.com´> Date: Mon, 4 Nov 2024 12:40:45 +0100 Subject: [PATCH] [CST-15593] fix authenticated orejime cookie encoding --- cypress/support/e2e.ts | 2 +- .../shared/cookies/browser-orejime.service.spec.ts | 2 +- src/app/shared/cookies/browser-orejime.service.ts | 2 +- src/app/shared/cookies/orejime-configuration.ts | 12 ++++++++++++ 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/cypress/support/e2e.ts b/cypress/support/e2e.ts index c1b6bc6d3fd..48985e79115 100644 --- a/cypress/support/e2e.ts +++ b/cypress/support/e2e.ts @@ -56,7 +56,7 @@ before(() => { beforeEach(() => { // Pre-agree to all Orejime cookies by setting the orejime-anonymous cookie // This just ensures it doesn't get in the way of matching other objects in the page. - cy.setCookie('orejime-anonymous', '{%22authentication%22:true%2C%22preferences%22:true%2C%22acknowledgement%22:true%2C%22google-analytics%22:true%2C%22google-recaptcha%22:true}'); + cy.setCookie('orejime-anonymous', '{"authentication":true,"preferences":true,"acknowledgement":true,"google-analytics":true}'); // Remove any CSRF cookies saved from prior tests cy.clearCookie(DSPACE_XSRF_COOKIE); diff --git a/src/app/shared/cookies/browser-orejime.service.spec.ts b/src/app/shared/cookies/browser-orejime.service.spec.ts index a2818052385..d7e226a42e3 100644 --- a/src/app/shared/cookies/browser-orejime.service.spec.ts +++ b/src/app/shared/cookies/browser-orejime.service.spec.ts @@ -70,7 +70,7 @@ describe('BrowserOrejimeService', () => { configurationDataService = createConfigSuccessSpy(recaptchaValue); findByPropertyName = configurationDataService.findByPropertyName; cookieService = jasmine.createSpyObj('cookieService', { - get: '{%22token_item%22:true%2C%22impersonation%22:true%2C%22redirect%22:true%2C%22language%22:true%2C%22orejime%22:true%2C%22has_agreed_end_user%22:true%2C%22google-analytics%22:true}', + get: '{"authentication":true,"preferences":true,"acknowledgement":true,"google-analytics":true}', set: () => { /* empty */ }, diff --git a/src/app/shared/cookies/browser-orejime.service.ts b/src/app/shared/cookies/browser-orejime.service.ts index 4a7a182e0a6..a2c66f95004 100644 --- a/src/app/shared/cookies/browser-orejime.service.ts +++ b/src/app/shared/cookies/browser-orejime.service.ts @@ -207,7 +207,7 @@ export class BrowserOrejimeService extends OrejimeService { */ private initializeUser(user: EPerson) { this.orejimeConfig.callback = debounce((consent, app) => this.updateSettingsForUsers(user), updateDebounce); - this.orejimeConfig.storageName = this.getStorageName(user.uuid); + this.orejimeConfig.cookieName = this.getStorageName(user.uuid); const anonCookie = this.cookieService.get(ANONYMOUS_STORAGE_NAME_OREJIME); if (hasValue(this.getSettingsForUser(user))) { diff --git a/src/app/shared/cookies/orejime-configuration.ts b/src/app/shared/cookies/orejime-configuration.ts index aea2bc33384..8e99ff30b2c 100644 --- a/src/app/shared/cookies/orejime-configuration.ts +++ b/src/app/shared/cookies/orejime-configuration.ts @@ -44,6 +44,18 @@ export function getOrejimeConfiguration(_window: NativeWindowRef): any { */ appElement: 'ds-app', + stringifyCookie: (contents: any) => { + return (typeof contents === 'string') ? contents : JSON.stringify(contents); + }, + + parseCookie: (cookie: string) => { + if (typeof cookie === 'string') { + cookie = decodeURIComponent(cookie); + return JSON.parse(cookie); + } + return cookie; + }, + /* You can overwrite existing translations and add translations for your app descriptions and purposes. See `src/translations/` for a full list of