From 3b8ad261699cbf30c01ffe150b614cd9740beac2 Mon Sep 17 00:00:00 2001 From: Maksim Eltyshev Date: Sun, 25 Jan 2026 20:17:13 +0100 Subject: [PATCH] feat: Add ability to pre-fill login credentials in demo mode --- .../src/components/common/Login/Content.jsx | 26 +++++++++++++++---- server/api/helpers/bootstrap/present-one.js | 5 ++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/client/src/components/common/Login/Content.jsx b/client/src/components/common/Login/Content.jsx index b73c2460..29d35963 100644 --- a/client/src/components/common/Login/Content.jsx +++ b/client/src/components/common/Login/Content.jsx @@ -102,11 +102,27 @@ const Content = React.memo(() => { const [t] = useTranslation(); const wasSubmitting = usePrevious(isSubmitting); - const [data, handleFieldChange, setData] = useForm(() => ({ - emailOrUsername: '', - password: '', - ...defaultData, - })); + const [data, handleFieldChange, setData] = useForm(() => { + const initialData = { + emailOrUsername: '', + password: '', + ...defaultData, + }; + + if (bootstrap.isDemoMode) { + const params = new URLSearchParams(window.location.hash.slice(1)); + + Object.keys(initialData).forEach((fieldName) => { + const value = params.get(fieldName); + + if (value !== null) { + initialData[fieldName] = value; + } + }); + } + + return initialData; + }); const message = useMemo(() => createMessage(error), [error]); const [focusPasswordFieldState, focusPasswordField] = useToggle(); diff --git a/server/api/helpers/bootstrap/present-one.js b/server/api/helpers/bootstrap/present-one.js index eb75edfd..41b8eda6 100644 --- a/server/api/helpers/bootstrap/present-one.js +++ b/server/api/helpers/bootstrap/present-one.js @@ -24,6 +24,7 @@ module.exports = { oidc: inputs.oidc, version: sails.config.custom.version, }; + if (inputs.user && inputs.user.role === User.Roles.ADMIN) { Object.assign(data, { activeUsersLimit: inputs.internalConfig.activeUsersLimit, @@ -31,6 +32,10 @@ module.exports = { }); } + if (sails.config.custom.demoMode) { + data.isDemoMode = true; + } + return data; }, };