From f72c49fc886317d6a2a1bc7674defd32d86e2f50 Mon Sep 17 00:00:00 2001 From: Ratko Zagorac Date: Tue, 9 Dec 2025 16:16:41 +0100 Subject: [PATCH] MWPW-185038: Validate token before sending runtime request --- .../email-collection/email-collection.js | 3 ++ libs/blocks/email-collection/utils.js | 28 ++++++++++++++++--- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/libs/blocks/email-collection/email-collection.js b/libs/blocks/email-collection/email-collection.js index d529c702b9a..53adaa2dc4f 100644 --- a/libs/blocks/email-collection/email-collection.js +++ b/libs/blocks/email-collection/email-collection.js @@ -14,6 +14,7 @@ import { runtimePost, redirectToSignIn, isUserGuest, + validateImsToken, FORM_FIELDS, } from './utils.js'; @@ -206,6 +207,7 @@ async function decorateInput(key, value) { } async function submitForm(form) { + await validateImsToken(); const isGuest = await isUserGuest(); if (signIn && isGuest) { await redirectToSignIn(dialog); @@ -509,6 +511,7 @@ async function checkIsSubscribed() { } async function decorate(el, blockChildren) { + await validateImsToken(); const isGuest = await isUserGuest(); if (signIn && isGuest) { await redirectToSignIn(dialog); diff --git a/libs/blocks/email-collection/utils.js b/libs/blocks/email-collection/utils.js index ba5d91b0797..e01737f7d4a 100644 --- a/libs/blocks/email-collection/utils.js +++ b/libs/blocks/email-collection/utils.js @@ -78,11 +78,31 @@ export const FORM_FIELDS = { export async function getIMS() { if (window.adobeIMS) return window.adobeIMS; - - await loadIms(); + try { + await loadIms(); + } catch (e) { + return null; + } return window.adobeIMS; } +async function refreshIMSToken(ims) { + try { + await ims?.refreshToken(); + } catch (e) { + window.lana?.log('Refreshing IMS token failed'); + } +} + +export async function validateImsToken() { + const ims = await getIMS(); + try { + await ims?.validateToken(); + } catch (e) { + await refreshIMSToken(ims); + } +} + export async function getIMSAccessToken() { try { const ims = await getIMS(); @@ -327,7 +347,7 @@ function waitForModal() { export async function redirectToSignIn(dialog) { const ims = await getIMS(); if (!document.body.contains(dialog)) await waitForModal(); - await ims.signIn(); + await ims?.signIn(); if (dialog) closeModal(dialog); } @@ -356,5 +376,5 @@ export async function runtimePost(url, data) { export async function isUserGuest() { const ims = await getIMS(); - return !ims.isSignedInUser(); + return !ims?.isSignedInUser(); }