From a4c8e4ac5d9ec3f5b4ae2849be0873282c4dca1a Mon Sep 17 00:00:00 2001 From: cesnimda Date: Sun, 12 Jul 2026 15:16:49 +0200 Subject: [PATCH] fix: unlock CV builder for Google/Microsoft-authenticated users ProfilePage gated every CV control (upload/rebuild/improve/reprocess/ rewrite) behind isLocal, which is true only for password-authenticated accounts. Every OAuth signup landed on a CV builder with every button disabled, even though the backend never restricted these endpoints by provider (all providers share the same local-scheme session token after sign-in). Replace the CV-feature gates with canEditCv (true for any authenticated user). isLocal is kept for the fields it was actually meant to protect: password change and provider-managed identity fields on OAuth accounts. --- job-tracker-ui/src/views/ProfilePage.tsx | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/job-tracker-ui/src/views/ProfilePage.tsx b/job-tracker-ui/src/views/ProfilePage.tsx index 318ce45..d018433 100644 --- a/job-tracker-ui/src/views/ProfilePage.tsx +++ b/job-tracker-ui/src/views/ProfilePage.tsx @@ -354,6 +354,10 @@ export default function ProfilePage() { const initials = useMemo(() => initialsFrom([me?.displayName, me?.firstName, me?.lastName, me?.userName, me?.email]), [me]); const isLocal = me?.provider === "local"; + // Career/CV features belong to every authenticated user regardless of auth provider. + // Only identity fields (password, email, provider-managed names) stay local-only. Gating CV + // controls on isLocal locked Google/Microsoft users out of their own CV builder. + const canEditCv = Boolean(me); const fullName = [me?.firstName, me?.lastName].filter(Boolean).join(" "); const cvWordCount = profileCvText.trim() ? profileCvText.trim().split(/\s+/).length : 0; @@ -626,12 +630,12 @@ export default function ProfilePage() { } }} /> -