From f3c82f1abe39e9b3725881edd03483fe30c3d43f Mon Sep 17 00:00:00 2001 From: AmintaCCCP Date: Thu, 12 Nov 2026 20:35:45 +0800 Subject: [PATCH] fix(auth): default to classic token guidance and warn about fine-grained limits (#594) --- src/components/GitHubTokenPermissions.tsx | 39 ++++++++++++++++++++--- src/components/LoginScreen.test.tsx | 29 +++++++++++++++-- src/locales/de/login.json | 5 +++ src/locales/en/login.json | 5 +++ src/locales/es/login.json | 5 +++ src/locales/fr/login.json | 5 +++ src/locales/ja/login.json | 5 +++ src/locales/ko/login.json | 5 +++ src/locales/pt-BR/login.json | 5 +++ src/locales/ru/login.json | 5 +++ src/locales/zh-TW/login.json | 5 +++ src/locales/zh/login.json | 5 +++ 12 files changed, 112 insertions(+), 6 deletions(-) diff --git a/src/components/GitHubTokenPermissions.tsx b/src/components/GitHubTokenPermissions.tsx index dfa68586a..652d7b6c8 100644 --- a/src/components/GitHubTokenPermissions.tsx +++ b/src/components/GitHubTokenPermissions.tsx @@ -1,5 +1,5 @@ import React, { useId, useRef, useState } from 'react'; -import { FileText, GitFork, Info, KeyRound, List, ShieldCheck, Star, Workflow } from 'lucide-react'; +import { AlertTriangle, ArrowRight, FileText, GitFork, Info, KeyRound, List, ShieldCheck, Star, Workflow } from 'lucide-react'; import { useT } from '../i18n/useT'; import { cn } from '../lib/utils'; @@ -7,9 +7,13 @@ const CODE_SPAN_RE = /`([^`]+)`/g; type TokenMode = 'fine-grained' | 'classic'; +const CLASSIC_TOKEN_URL = + 'https://github.com/settings/tokens/new?description=GithubStarsManager&scopes=public_repo,gist,user'; +const FINE_GRAINED_TOKEN_URL = 'https://github.com/settings/personal-access-tokens/new'; + const MODE_TABS: Array<{ mode: TokenMode; labelKey: string }> = [ - { mode: 'fine-grained', labelKey: 'loginScreen.token-permissions-tab-finegrained' }, { mode: 'classic', labelKey: 'loginScreen.token-permissions-tab-classic' }, + { mode: 'fine-grained', labelKey: 'loginScreen.token-permissions-tab-finegrained' }, ]; const FINE_GRAINED_ROWS = [ @@ -45,7 +49,7 @@ function renderWithHighlights(text: string): React.ReactNode[] { export function GitHubTokenPermissions({ heading = true }: { heading?: boolean }) { const t = useT('login'); const baseId = useId(); - const [mode, setMode] = useState('fine-grained'); + const [mode, setMode] = useState('classic'); const tabRefs = useRef>>({}); const tabId = (tabMode: TokenMode) => `${baseId}-tab-${tabMode}`; @@ -109,6 +113,33 @@ export function GitHubTokenPermissions({ heading = true }: { heading?: boolean } hidden={mode !== tabMode} tabIndex={0} > + {tabMode === 'fine-grained' && ( +
+
+ + {t('loginScreen.token-permissions-fine-warning-title')} +
+
    +
  • {t('loginScreen.token-permissions-fine-warning-star')}
  • +
  • {t('loginScreen.token-permissions-fine-warning-lists')}
  • +
+
+ {t('loginScreen.token-permissions-fine-warning-recommend')} + +
+
+ )} +