From e6a201bc110c0652318719781ada3178e15f1f4b Mon Sep 17 00:00:00 2001 From: binwiederhier Date: Tue, 23 Jun 2026 13:10:17 -0400 Subject: [PATCH] Fix passwords with spaces --- docs/releases.md | 1 + web/src/components/Login.jsx | 2 +- web/src/components/PasswordReset.jsx | 4 ++-- web/src/components/Signup.jsx | 4 ++-- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/releases.md b/docs/releases.md index 51d80d53..d6e30b46 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -1970,6 +1970,7 @@ since I do have to reset emails on a regular basis. * `X-Email: yes` (also `true`/`1`) now sends to your primary verified email regardless of the `smtp-sender-verify` setting (previously it was rejected unless verification was enabled); it requires being logged in with a verified address * Grant users full access to their own sync topic (`st_...`) so cross-device subscription sync works under `auth-default-access: deny-all` ([#733](https://github.com/binwiederhier/ntfy/issues/733), [#1795](https://github.com/binwiederhier/ntfy/pull/1795), thanks to [@lmorchard](https://github.com/lmorchard) for the contribution) * Support HTTP (non-TLS) S3-compatible endpoints by preserving the endpoint scheme, e.g. for a local MinIO instance ([#1794](https://github.com/binwiederhier/ntfy/pull/1794), [#1734](https://github.com/binwiederhier/ntfy/issues/1734), thanks to [@sskender](https://github.com/sskender) for the contribution, and [@Kernald](https://github.com/Kernald) for reporting) +* Stop silently stripping spaces from passwords while typing in the web app's login, signup, and password-reset forms ([#1246](https://github.com/binwiederhier/ntfy/issues/1246), thanks to [@aldem](https://github.com/aldem) for reporting) ### ntfy Android v1.25.x (UNRELEASED) diff --git a/web/src/components/Login.jsx b/web/src/components/Login.jsx index ad14ebb9..d17fbc48 100644 --- a/web/src/components/Login.jsx +++ b/web/src/components/Login.jsx @@ -66,7 +66,7 @@ const Login = () => { type={showPassword ? "text" : "password"} id="password" value={password} - onChange={(ev) => setPassword(ev.target.value.trim())} + onChange={(ev) => setPassword(ev.target.value)} autoComplete="current-password" InputProps={{ endAdornment: ( diff --git a/web/src/components/PasswordReset.jsx b/web/src/components/PasswordReset.jsx index 68a86eed..fe8ad8f0 100644 --- a/web/src/components/PasswordReset.jsx +++ b/web/src/components/PasswordReset.jsx @@ -71,7 +71,7 @@ const PasswordReset = () => { type="password" id="password" value={password} - onChange={(ev) => setPassword(ev.target.value.trim())} + onChange={(ev) => setPassword(ev.target.value)} autoComplete="new-password" autoFocus /> @@ -84,7 +84,7 @@ const PasswordReset = () => { type="password" id="confirm" value={confirm} - onChange={(ev) => setConfirm(ev.target.value.trim())} + onChange={(ev) => setConfirm(ev.target.value)} autoComplete="new-password" />