fix: clarify GitHub token settings

This commit is contained in:
Bohdan Triapitsyn
2026-06-11 18:59:58 +03:00
parent 6ca99a3d5e
commit 465732858f
11 changed files with 56 additions and 14 deletions
@@ -269,7 +269,7 @@ export const GitHubSettings: React.FC = () => {
<div className="mb-8">
<div className="mb-3 px-1 flex items-start justify-between gap-4">
<div className="flex items-center gap-2">
<h3 className="typography-ui-header font-semibold text-foreground">GitHub</h3>
<h3 className="typography-ui-header font-semibold text-foreground">{t('settings.github.page.oauth.title')}</h3>
<Tooltip>
<TooltipTrigger asChild>
<Icon name="information" className="h-3.5 w-3.5 text-muted-foreground/60 cursor-help" />
@@ -457,10 +457,33 @@ export const GitHubSettings: React.FC = () => {
<div className="rounded-lg bg-[var(--surface-elevated)]/70 overflow-hidden">
<div className={cn("px-4 py-3", isMobile ? "flex flex-col gap-3" : "flex items-center justify-between gap-4")}>
<div className={cn("flex min-w-0 items-center gap-4", isMobile ? "w-full" : undefined)}>
<div className="flex h-10 w-10 shrink-0 items-center justify-center rounded-full border border-[var(--interactive-border)] bg-[var(--surface-muted)]">
<Icon name="terminal" className="h-4 w-4 text-muted-foreground" />
</div>
{ghCli.user?.avatarUrl ? (
<img
src={ghCli.user.avatarUrl}
alt={ghCli.user.login ? t('settings.github.page.avatarAlt.withLogin', { login: ghCli.user.login }) : t('settings.github.page.avatarAlt.fallback')}
className="h-10 w-10 shrink-0 rounded-full border border-[var(--interactive-border)] bg-[var(--surface-muted)] object-cover"
loading="lazy"
referrerPolicy="no-referrer"
/>
) : (
<div className="flex h-10 w-10 shrink-0 items-center justify-center rounded-full border border-[var(--interactive-border)] bg-[var(--surface-muted)]">
<Icon name="github-fill" className="h-4 w-4 text-muted-foreground" />
</div>
)}
<div className="min-w-0 flex-1">
{!ghCli.disabled && ghCli.user && (
<div className="typography-ui-label text-foreground truncate">
{ghCli.user.name?.trim() || ghCli.user.login || 'GitHub'}
</div>
)}
{!ghCli.disabled && ghCli.user?.login && (
<div className={cn("flex items-center gap-2 typography-meta text-muted-foreground mt-0.5", isMobile ? "flex-wrap" : "truncate")}>
<Icon name="github-fill" className="h-3.5 w-3.5 shrink-0" />
<span className="font-mono">{ghCli.user.login}</span>
{ghCli.user.email && <span className="opacity-50"></span>}
{ghCli.user.email && <span>{ghCli.user.email}</span>}
</div>
)}
<div className={cn("typography-meta text-muted-foreground", ghCli.disabled ? "opacity-60" : undefined)}>
{ghCli.disabled
? t('settings.github.page.ghCli.disabledDescription')
@@ -1407,7 +1407,8 @@ export const settingsDict = {
'settings.github.page.toast.disconnectFailed': 'Failed to disconnect GitHub',
'settings.github.page.toast.accountSwitched': 'GitHub account switched',
'settings.github.page.toast.accountSwitchFailed': 'Failed to switch GitHub account',
'settings.github.page.ghCli.title': 'gh CLI',
'settings.github.page.oauth.title': 'GitHub OAuth Token',
'settings.github.page.ghCli.title': 'GitHub CLI Token',
'settings.github.page.ghCli.activeDescription': 'Authenticated via the gh CLI',
'settings.github.page.ghCli.fallbackDescription': 'Available as fallback if OpenChamber auth is removed',
'settings.github.page.ghCli.disabledDescription': 'Installed but not used as a fallback',
@@ -1374,7 +1374,8 @@ export const settingsDict = {
"settings.github.page.toast.disconnectFailed": "No se pudo desconectar de GitHub",
"settings.github.page.toast.accountSwitched": "Cuenta de GitHub cambiada",
"settings.github.page.toast.accountSwitchFailed": "No se pudo cambiar de cuenta de GitHub",
"settings.github.page.ghCli.title": "gh CLI",
"settings.github.page.oauth.title": "Token OAuth de GitHub",
"settings.github.page.ghCli.title": "Token CLI de GitHub",
"settings.github.page.ghCli.activeDescription": "Autenticado a través de gh CLI",
"settings.github.page.ghCli.fallbackDescription": "Disponible como respaldo si se elimina la autenticación de OpenChamber",
"settings.github.page.ghCli.disabledDescription": "Instalado pero no usado como respaldo",
@@ -1363,7 +1363,8 @@ export const settingsDict = {
'settings.github.page.toast.disconnectFailed': 'Échec de la déconnexion du GitHub',
'settings.github.page.toast.accountSwitched': 'Le compte GitHub a changé',
'settings.github.page.toast.accountSwitchFailed': 'Échec du changement de compte GitHub',
'settings.github.page.ghCli.title': 'gh CLI',
'settings.github.page.oauth.title': 'Token OAuth GitHub',
'settings.github.page.ghCli.title': 'Token CLI GitHub',
'settings.github.page.ghCli.activeDescription': 'Authentifié via gh CLI',
'settings.github.page.ghCli.fallbackDescription': 'Disponible comme solution de secours si lauthentification OpenChamber est supprimée',
'settings.github.page.ghCli.disabledDescription': 'Installé, mais non utilisé comme solution de secours',
@@ -1374,7 +1374,8 @@ export const settingsDict = {
'settings.github.page.toast.disconnectFailed': 'GitHub 연결을 해제하지 못했습니다',
'settings.github.page.toast.accountSwitched': 'GitHub 계정이 전환되었습니다',
'settings.github.page.toast.accountSwitchFailed': 'GitHub 계정을 전환하지 못했습니다',
'settings.github.page.ghCli.title': 'gh CLI',
'settings.github.page.oauth.title': 'GitHub OAuth 토큰',
'settings.github.page.ghCli.title': 'GitHub CLI 토큰',
'settings.github.page.ghCli.activeDescription': 'gh CLI를 통해 인증됨',
'settings.github.page.ghCli.fallbackDescription': 'OpenChamber 인증이 제거된 경우 대체로 사용 가능',
'settings.github.page.ghCli.disabledDescription': '설치되어 있지만 대체로 사용되지 않음',
@@ -249,7 +249,8 @@ export const settingsDict = {
'settings.github.page.toast.ghCliEnabled': 'Rezerwa gh CLI włączona',
'settings.github.page.toast.ghCliDisabled': 'Rezerwa gh CLI wyłączona',
'settings.github.page.toast.ghCliUpdateFailed': 'Nie udało się zaktualizować ustawienia gh CLI',
'settings.github.page.ghCli.title': 'gh CLI',
'settings.github.page.oauth.title': 'Token OAuth GitHub',
'settings.github.page.ghCli.title': 'Token CLI GitHub',
'settings.github.page.ghCli.activeDescription': 'Uwierzytelniono przez gh CLI',
'settings.github.page.ghCli.fallbackDescription': 'Dostępne jako rezerwa, jeśli uwierzytelnienie OpenChamber zostanie usunięte',
'settings.github.page.ghCli.disabledDescription': 'Zainstalowane, ale nieużywane jako rezerwa',
@@ -1374,7 +1374,8 @@ export const settingsDict = {
"settings.github.page.toast.disconnectFailed": "Não foi possível desconectar de GitHub",
"settings.github.page.toast.accountSwitched": "Conta de GitHub cambiada",
"settings.github.page.toast.accountSwitchFailed": "Não foi possível mudar de conta de GitHub",
"settings.github.page.ghCli.title": "gh CLI",
"settings.github.page.oauth.title": "Token OAuth do GitHub",
"settings.github.page.ghCli.title": "Token CLI do GitHub",
"settings.github.page.ghCli.activeDescription": "Autenticado via gh CLI",
"settings.github.page.ghCli.fallbackDescription": "Disponível como alternativa se a autenticação do OpenChamber for removida",
"settings.github.page.ghCli.disabledDescription": "Instalado, mas não usado como alternativa",
@@ -1374,7 +1374,8 @@ export const settingsDict = {
"settings.github.page.toast.disconnectFailed": "Не вдалося відключити GitHub",
"settings.github.page.toast.accountSwitched": "Обліковий запис GitHub змінено",
"settings.github.page.toast.accountSwitchFailed": "Не вдалося змінити обліковий запис GitHub",
"settings.github.page.ghCli.title": "gh CLI",
"settings.github.page.oauth.title": "GitHub OAuth Token",
"settings.github.page.ghCli.title": "GitHub CLI Token",
"settings.github.page.ghCli.activeDescription": "Автентифіковано через gh CLI",
"settings.github.page.ghCli.fallbackDescription": "Доступно як резервний варіант, якщо автентифікацію OpenChamber видалено",
"settings.github.page.ghCli.disabledDescription": "Встановлено, але не використовується як резервний варіант",
@@ -1374,7 +1374,8 @@ export const settingsDict = {
'settings.github.page.toast.disconnectFailed': '断开 GitHub 失败',
'settings.github.page.toast.accountSwitched': 'GitHub 账号已切换',
'settings.github.page.toast.accountSwitchFailed': '切换 GitHub 账号失败',
'settings.github.page.ghCli.title': 'gh CLI',
'settings.github.page.oauth.title': 'GitHub OAuth 令牌',
'settings.github.page.ghCli.title': 'GitHub CLI 令牌',
'settings.github.page.ghCli.activeDescription': '已通过 gh CLI 认证',
'settings.github.page.ghCli.fallbackDescription': '在 OpenChamber 认证被移除时可作为备用',
'settings.github.page.ghCli.disabledDescription': '已安装但未作为备用使用',
@@ -1295,7 +1295,8 @@
'settings.github.page.toast.disconnectFailed': '中斷 GitHub 失敗',
'settings.github.page.toast.accountSwitched': 'GitHub 帳號已切換',
'settings.github.page.toast.accountSwitchFailed': '切換 GitHub 帳號失敗',
'settings.github.page.ghCli.title': 'gh CLI',
'settings.github.page.oauth.title': 'GitHub OAuth 權杖',
'settings.github.page.ghCli.title': 'GitHub CLI 權杖',
'settings.github.page.ghCli.activeDescription': '已透過 gh CLI 認證',
'settings.github.page.ghCli.fallbackDescription': '在 OpenChamber 認證被移除時可作為備用',
'settings.github.page.ghCli.disabledDescription': '已安裝但未作為備用使用',
+11 -1
View File
@@ -84,12 +84,22 @@ export function registerGitHubRoutes(app) {
const ghCliDisabled = isGhCliDisabled();
const ghToken = getGhCliToken();
const usingOwnToken = Boolean(auth?.accessToken);
let ghCliUser = null;
if (ghToken !== null && !ghCliDisabled && usingOwnToken) {
try {
const { Octokit } = await import('@octokit/rest');
ghCliUser = await getGitHubUserSummary(new Octokit({ auth: ghToken }));
} catch {
ghCliUser = null;
}
}
const buildGhCli = (activeUser = null) => ({
available: ghToken !== null,
disabled: ghCliDisabled,
active: !usingOwnToken && ghToken !== null && !ghCliDisabled,
...(activeUser ? { user: activeUser } : {}),
...(!ghCliDisabled && (activeUser || ghCliUser) ? { user: activeUser || ghCliUser } : {}),
});
const octokit = getOctokitOrNull();