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 }