From c13d04789d2f15ef08b04f215bdd4fca06ea7d72 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 21 Aug 2026 19:33:57 +0200 Subject: [PATCH 1/3] Task/harden auth guard (#7679) * Improve error handling * Update changelog --- CHANGELOG.md | 1 + apps/client/src/app/core/auth.guard.ts | 13 +++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d1dad4dd..0afd699d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Extended the account selector options to include the platform and currency +- Improved the error handling of the `AuthGuard` - Upgraded `yahoo-finance2` from version `4.0.0` to `4.0.2` ## 3.56.0 - 2026-08-20 diff --git a/apps/client/src/app/core/auth.guard.ts b/apps/client/src/app/core/auth.guard.ts index 91a14d135..fdb50c9ad 100644 --- a/apps/client/src/app/core/auth.guard.ts +++ b/apps/client/src/app/core/auth.guard.ts @@ -10,7 +10,7 @@ import { RouterStateSnapshot } from '@angular/router'; import { EMPTY } from 'rxjs'; -import { catchError } from 'rxjs/operators'; +import { catchError, finalize } from 'rxjs/operators'; @Service() export class AuthGuard { @@ -34,9 +34,11 @@ export class AuthGuard { if (utmSource === 'ios') { this.router.navigate(publicRoutes.demo.routerLink); resolve(false); + return EMPTY; } else if (utmSource === 'trusted-web-activity') { this.router.navigate(publicRoutes.register.routerLink); resolve(false); + return EMPTY; } else if ( Object.values(publicRoutes) .map(({ path }) => { @@ -57,6 +59,9 @@ export class AuthGuard { resolve(true); return EMPTY; + }), + finalize(() => { + resolve(false); }) ) .subscribe((user) => { @@ -77,13 +82,13 @@ export class AuthGuard { return; } else if ( state.url.startsWith(`/${internalRoutes.home.path}`) && - user.settings.viewMode === 'ZEN' + user?.settings?.viewMode === 'ZEN' ) { this.router.navigate(internalRoutes.zen.routerLink); resolve(false); return; } else if (state.url.startsWith(`/${publicRoutes.start.path}`)) { - if (user.settings.viewMode === 'ZEN') { + if (user?.settings?.viewMode === 'ZEN') { this.router.navigate(internalRoutes.zen.routerLink); } else { this.router.navigate(internalRoutes.home.routerLink); @@ -93,7 +98,7 @@ export class AuthGuard { return; } else if ( state.url.startsWith(`/${internalRoutes.zen.path}`) && - user.settings.viewMode === 'DEFAULT' + user?.settings?.viewMode === 'DEFAULT' ) { this.router.navigate(internalRoutes.home.routerLink); resolve(false); From 2c89fdfb00ff178abef464fae7272a63646fe6bc Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 21 Aug 2026 19:35:44 +0200 Subject: [PATCH 2/3] Task/add i18n to introductions of FAQ pages (#7681) Add i18n --- apps/client/src/app/pages/faq/overview/faq-overview-page.html | 2 +- apps/client/src/app/pages/faq/saas/saas-page.html | 2 +- .../src/app/pages/faq/self-hosting/self-hosting-page.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/client/src/app/pages/faq/overview/faq-overview-page.html b/apps/client/src/app/pages/faq/overview/faq-overview-page.html index ee4e0ad1a..77c23789e 100644 --- a/apps/client/src/app/pages/faq/overview/faq-overview-page.html +++ b/apps/client/src/app/pages/faq/overview/faq-overview-page.html @@ -4,7 +4,7 @@
+
Find quick answers to commonly asked questions about Ghostfolio in our Frequently Asked Questions (FAQ) section. Discover what Ghostfolio is, explore its features, and learn about our privacy practices. Get all the diff --git a/apps/client/src/app/pages/faq/saas/saas-page.html b/apps/client/src/app/pages/faq/saas/saas-page.html index fc39acc53..dbb50e5c0 100644 --- a/apps/client/src/app/pages/faq/saas/saas-page.html +++ b/apps/client/src/app/pages/faq/saas/saas-page.html @@ -4,7 +4,7 @@
+
Find quick answers to commonly asked questions about the fully managed Ghostfolio cloud offering in our Frequently Asked Questions (FAQ) section. diff --git a/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.html b/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.html index ebfe3f34c..59478d3cf 100644 --- a/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.html +++ b/apps/client/src/app/pages/faq/self-hosting/self-hosting-page.html @@ -4,7 +4,7 @@
+
Find quick answers to commonly asked questions about self-hosting Ghostfolio in our Frequently Asked Questions (FAQ) section.
From e553d32e11982dfd519dae455590228d20d2c9c2 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 21 Aug 2026 19:36:11 +0200 Subject: [PATCH 3/3] Task/add i18n to introductions of resources page (#7682) Add i18n --- .../overview/resources-overview.component.ts | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/apps/client/src/app/pages/resources/overview/resources-overview.component.ts b/apps/client/src/app/pages/resources/overview/resources-overview.component.ts index 7830b2eec..6c0d43833 100644 --- a/apps/client/src/app/pages/resources/overview/resources-overview.component.ts +++ b/apps/client/src/app/pages/resources/overview/resources-overview.component.ts @@ -13,26 +13,22 @@ import { RouterModule } from '@angular/router'; export class ResourcesOverviewComponent { public overviewItems = [ { - description: - 'Find quick answers to commonly asked questions about Ghostfolio in our Frequently Asked Questions (FAQ) section.', + description: $localize`Find quick answers to commonly asked questions about Ghostfolio in our Frequently Asked Questions (FAQ) section.`, routerLink: publicRoutes.faq.routerLink, title: publicRoutes.faq.title }, { - description: - 'Explore our guides to help you get started with investing and managing your finances.', + description: $localize`Explore our guides to help you get started with investing and managing your finances.`, routerLink: publicRoutes.resources.subRoutes.guides.routerLink, title: publicRoutes.resources.subRoutes.guides.title }, { - description: - 'Access various market resources and tools to stay informed about financial markets.', + description: $localize`Access various market resources and tools to stay informed about financial markets.`, routerLink: publicRoutes.resources.subRoutes.markets.routerLink, title: publicRoutes.resources.subRoutes.markets.title }, { - description: - 'Learn key financial terms and concepts in our comprehensive glossary.', + description: $localize`Learn key financial terms and concepts in our comprehensive glossary.`, routerLink: publicRoutes.resources.subRoutes.glossary.routerLink, title: publicRoutes.resources.subRoutes.glossary.title }