diff --git a/CHANGELOG.md b/CHANGELOG.md index f3a38605..ca37314d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,22 @@ # Changelog +## 1.4.8 (2026-03-23) + +### Features + +- **Email**: Add support for marking emails as answered or forwarded and display status icons in email list and thread views +- **Email**: Enhance identity selection by supporting sub-addressing (plus addressing) in email composer +- **Settings**: Add notification settings with sound picker, preview playback, and configurable alert sounds +- **Settings**: Add default mail program settings with localization support across all locales +- **Auth**: Implement path prefix handling for OAuth callbacks and login redirects, enabling reverse proxy deployments +- **Validation**: Add all multi-part TLDs for domain validation in favicon API (#81) + +### Fixes + +- **Calendar**: Fix bugs in duration parsing, RFC compliance, and event handling across calendar components +- **Calendar**: Detect tasks created by external CalDAV clients such as Thunderbird +- **Settings**: Enhance account settings with username and authentication method display (#90) + ## 1.4.7 (2026-03-21) ### Features diff --git a/VERSION b/VERSION index be05bba9..b2e46d18 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.4.7 +1.4.8 diff --git a/app/[locale]/login/page.tsx b/app/[locale]/login/page.tsx index 119c71ca..53123ee7 100644 --- a/app/[locale]/login/page.tsx +++ b/app/[locale]/login/page.tsx @@ -15,7 +15,6 @@ import { Mail, AlertCircle, Loader2, X, Info, Eye, EyeOff, LogIn, Sun, Moon, Mon import { discoverOAuth, type OAuthMetadata } from "@/lib/oauth/discovery"; import { generateCodeVerifier, generateCodeChallenge, generateState } from "@/lib/oauth/pkce"; import { OAUTH_SCOPES } from "@/lib/oauth/tokens"; -import { getPathPrefix } from "@/lib/browser-navigation"; const APP_VERSION = "1.4.7"; @@ -149,7 +148,7 @@ export default function LoginPage() { if (!serverUrl) return; const handleClickOutside = (event: MouseEvent) => { if (suggestionsRef.current && !suggestionsRef.current.contains(event.target as Node) && - inputRef.current && !inputRef.current.contains(event.target as Node)) { + inputRef.current && !inputRef.current.contains(event.target as Node)) { setShowSuggestions(false); } if (themeMenuRef.current && !themeMenuRef.current.contains(event.target as Node)) { @@ -181,8 +180,7 @@ export default function LoginPage() { const startServerSideSso = useCallback(async () => { setOauthLoading(true); try { - const prefix = getPathPrefix(params.locale as string); - const redirectUri = `${window.location.origin}${prefix}/${params.locale}/auth/callback`; + const redirectUri = `${window.location.origin}/${params.locale}/auth/callback`; const res = await fetch('/api/auth/sso/start', { method: 'POST', headers: { 'Content-Type': 'application/json' }, @@ -360,8 +358,7 @@ export default function LoginPage() { const verifier = generateCodeVerifier(); const challenge = await generateCodeChallenge(verifier); const state = generateState(); - const prefix = getPathPrefix(params.locale as string); - const redirectUri = `${window.location.origin}${prefix}/${params.locale}/auth/callback`; + const redirectUri = `${window.location.origin}/${params.locale}/auth/callback`; sessionStorage.setItem("oauth_code_verifier", verifier); sessionStorage.setItem("oauth_state", state); diff --git a/package.json b/package.json index 2ee97157..a849850b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bulwark-webmail", - "version": "1.4.7", + "version": "1.4.8", "description": "Bulwark Webmail — a modern webmail client built for Stalwart Mail Server", "author": "Bulwark Webmail ", "license": "AGPL-3.0-only",