From 2c7530a6cff299324cff0d2136120533c4687323 Mon Sep 17 00:00:00 2001 From: Antoine Clausse Date: Thu, 17 Oct 2024 16:46:58 +0200 Subject: [PATCH] [web] Set Subscription pages to have `layout-react` (#20969) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [web] Set Subscription pages to have `layout-react` * [web] import `header-footer-react` in Subscription pages (!!) * [web] Add `ol-user` meta tag to the subscription pages (!!) ⚠️ invite_logged_out.pug should be updated instead of setting the user as `{}` * [web] Fix unit test * [web] Update User types to handle a logged out user, add `LOGGED_OUT_USER` const * [web] Add type `User` to `getSessionUser` * [web] Remove `LOGGED_OUT_USER` const * [web] Just pass `{ id: null }` as the user * [web] Remove comment in pugs, it breaks things * [web] Don't pass the full user to the frontend!!! Co-authored-by: Jakob Ackermann --------- Co-authored-by: Jakob Ackermann GitOrigin-RevId: 1768f1f13de924a18be43c1a08614000500dcbec --- .../Features/Authentication/SessionManager.js | 6 ++++++ .../Subscription/TeamInvitesController.mjs | 4 ++++ services/web/app/views/layout-react.pug | 1 + .../canceled-subscription-react.pug | 2 +- .../app/views/subscriptions/dashboard-react.pug | 2 +- .../successful-subscription-react.pug | 2 +- .../views/subscriptions/team/group-invites.pug | 2 +- .../views/subscriptions/team/invite-managed.pug | 2 +- .../web/app/views/subscriptions/team/invite.pug | 2 +- .../subscriptions/team/invite_logged_out.pug | 2 +- .../frontend/js/pages/user/subscription/base.js | 1 + .../frontend/js/shared/context/user-context.tsx | 6 ++++-- services/web/frontend/js/utils/meta.ts | 4 ++-- services/web/types/user.ts | 16 ++++++++++++++++ 14 files changed, 41 insertions(+), 11 deletions(-) diff --git a/services/web/app/src/Features/Authentication/SessionManager.js b/services/web/app/src/Features/Authentication/SessionManager.js index a64ee98fe1..0a89cc6f1d 100644 --- a/services/web/app/src/Features/Authentication/SessionManager.js +++ b/services/web/app/src/Features/Authentication/SessionManager.js @@ -1,6 +1,12 @@ const _ = require('lodash') +/** @typedef {import('../../../../types/user').User} User */ + const SessionManager = { + /** + * @param session + * @returns {User | null} + */ getSessionUser(session) { const sessionUser = _.get(session, ['user']) const sessionPassportUser = _.get(session, ['passport', 'user']) diff --git a/services/web/app/src/Features/Subscription/TeamInvitesController.mjs b/services/web/app/src/Features/Subscription/TeamInvitesController.mjs index b575c94ff8..8bf0e5dccc 100644 --- a/services/web/app/src/Features/Subscription/TeamInvitesController.mjs +++ b/services/web/app/src/Features/Subscription/TeamInvitesController.mjs @@ -169,12 +169,16 @@ async function viewInvite(req, res, next) { invite.email ) + /** @type {import('../../../../types/user').LoggedOutUser} */ + const userWithoutSensitiveFields = { id: null } + return res.render('subscriptions/team/invite_logged_out', { inviterName: invite.inviterName, inviteToken: invite.token, appName: settings.appName, accountExists: userByEmail != null, emailAddress: invite.email, + userWithoutSensitiveFields, }) } } diff --git a/services/web/app/views/layout-react.pug b/services/web/app/views/layout-react.pug index 5fa3fec4b3..277a2a29da 100644 --- a/services/web/app/views/layout-react.pug +++ b/services/web/app/views/layout-react.pug @@ -37,6 +37,7 @@ block append meta subdomainLang: settings.i18n.subdomainLang, translatedLanguages: settings.translatedLanguages }) + meta(name="ol-user" data-type="json" content=(userWithoutSensitiveFields || getSessionUser())) block body if (typeof suppressNavbar === "undefined") diff --git a/services/web/app/views/subscriptions/canceled-subscription-react.pug b/services/web/app/views/subscriptions/canceled-subscription-react.pug index 16e5283f7c..f7b01222fc 100644 --- a/services/web/app/views/subscriptions/canceled-subscription-react.pug +++ b/services/web/app/views/subscriptions/canceled-subscription-react.pug @@ -1,4 +1,4 @@ -extends ../layout-marketing +extends ../layout-react block vars - bootstrap5PageStatus = 'enabled' // One of 'disabled', 'enabled', and 'queryStringOnly' diff --git a/services/web/app/views/subscriptions/dashboard-react.pug b/services/web/app/views/subscriptions/dashboard-react.pug index 068f52de0a..69f71fbc99 100644 --- a/services/web/app/views/subscriptions/dashboard-react.pug +++ b/services/web/app/views/subscriptions/dashboard-react.pug @@ -1,4 +1,4 @@ -extends ../layout-marketing +extends ../layout-react block vars - bootstrap5PageStatus = 'enabled' // One of 'disabled', 'enabled', and 'queryStringOnly' diff --git a/services/web/app/views/subscriptions/successful-subscription-react.pug b/services/web/app/views/subscriptions/successful-subscription-react.pug index 0d82346b6f..8a0ba23f57 100644 --- a/services/web/app/views/subscriptions/successful-subscription-react.pug +++ b/services/web/app/views/subscriptions/successful-subscription-react.pug @@ -1,4 +1,4 @@ -extends ../layout-marketing +extends ../layout-react block vars - bootstrap5PageStatus = 'enabled' // One of 'disabled', 'enabled', and 'queryStringOnly' diff --git a/services/web/app/views/subscriptions/team/group-invites.pug b/services/web/app/views/subscriptions/team/group-invites.pug index c9da04d293..90f2694d80 100644 --- a/services/web/app/views/subscriptions/team/group-invites.pug +++ b/services/web/app/views/subscriptions/team/group-invites.pug @@ -1,4 +1,4 @@ -extends ../../layout-marketing +extends ../../layout-react block vars - bootstrap5PageStatus = 'enabled' // One of 'disabled', 'enabled', and 'queryStringOnly' diff --git a/services/web/app/views/subscriptions/team/invite-managed.pug b/services/web/app/views/subscriptions/team/invite-managed.pug index 8260db2562..d4a7a9511f 100644 --- a/services/web/app/views/subscriptions/team/invite-managed.pug +++ b/services/web/app/views/subscriptions/team/invite-managed.pug @@ -1,4 +1,4 @@ -extends ../../layout-marketing +extends ../../layout-react block vars - bootstrap5PageStatus = 'enabled' // One of 'disabled', 'enabled', and 'queryStringOnly' diff --git a/services/web/app/views/subscriptions/team/invite.pug b/services/web/app/views/subscriptions/team/invite.pug index c5ff57528b..5f6238dd09 100644 --- a/services/web/app/views/subscriptions/team/invite.pug +++ b/services/web/app/views/subscriptions/team/invite.pug @@ -1,4 +1,4 @@ -extends ../../layout-marketing +extends ../../layout-react block vars - bootstrap5PageStatus = 'enabled' // One of 'disabled', 'enabled', and 'queryStringOnly' diff --git a/services/web/app/views/subscriptions/team/invite_logged_out.pug b/services/web/app/views/subscriptions/team/invite_logged_out.pug index cac4cc37cd..87b79a8095 100644 --- a/services/web/app/views/subscriptions/team/invite_logged_out.pug +++ b/services/web/app/views/subscriptions/team/invite_logged_out.pug @@ -1,4 +1,4 @@ -extends ../../layout-marketing +extends ../../layout-react block vars - bootstrap5PageStatus = 'enabled' // One of 'disabled', 'enabled', and 'queryStringOnly' diff --git a/services/web/frontend/js/pages/user/subscription/base.js b/services/web/frontend/js/pages/user/subscription/base.js index f3cd062324..54b891c24e 100644 --- a/services/web/frontend/js/pages/user/subscription/base.js +++ b/services/web/frontend/js/pages/user/subscription/base.js @@ -6,3 +6,4 @@ import '../../../features/contact-form' import '../../../features/event-tracking' import '../../../features/cookie-banner' import '../../../features/link-helpers/slow-link' +import '../../../features/header-footer-react' diff --git a/services/web/frontend/js/shared/context/user-context.tsx b/services/web/frontend/js/shared/context/user-context.tsx index 9ea7e8daa8..598455a5a9 100644 --- a/services/web/frontend/js/shared/context/user-context.tsx +++ b/services/web/frontend/js/shared/context/user-context.tsx @@ -1,8 +1,10 @@ import { createContext, FC, useContext, useMemo } from 'react' import getMeta from '../../utils/meta' -import { User } from '../../../../types/user' +import { LoggedOutUser, User } from '../../../../types/user' -export const UserContext = createContext(undefined) +export const UserContext = createContext( + undefined +) export const UserProvider: FC = ({ children }) => { const user = useMemo(() => getMeta('ol-user'), []) diff --git a/services/web/frontend/js/utils/meta.ts b/services/web/frontend/js/utils/meta.ts index 7ffe3ef86c..1f17c2057a 100644 --- a/services/web/frontend/js/utils/meta.ts +++ b/services/web/frontend/js/utils/meta.ts @@ -1,4 +1,4 @@ -import { User, Features } from '../../../types/user' +import { User, Features, LoggedOutUser } from '../../../types/user' import { User as MinimalUser } from '../../../types/admin/user' import { User as ManagedUser } from '../../../types/group-management/user' import { UserSettings } from '../../../types/user-settings' @@ -204,7 +204,7 @@ export interface Meta { 'ol-usGovBannerVariant': USGovBannerVariant 'ol-useShareJsHash': boolean 'ol-usedLatex': 'never' | 'occasionally' | 'often' | undefined - 'ol-user': User + 'ol-user': User | LoggedOutUser 'ol-userAffiliations': Affiliation[] 'ol-userCanExtendTrial': boolean 'ol-userCanNotStartRequestedTrial': boolean diff --git a/services/web/types/user.ts b/services/web/types/user.ts index 1ecd6cdb2e..740fef75a1 100644 --- a/services/web/types/user.ts +++ b/services/web/types/user.ts @@ -46,4 +46,20 @@ export type User = { } } +export type LoggedOutUser = { + id: null + email?: undefined + first_name?: undefined + last_name?: undefined + signUpDate?: undefined + labsProgram?: boolean + alphaProgram?: boolean + betaProgram?: boolean + allowedFreeTrial?: boolean + features?: Features + refProviders?: RefProviders + writefull?: undefined + isAdmin?: boolean +} + export type MongoUser = Pick> & { _id: string }