支持快捷打开github凭据生成页面

This commit is contained in:
itpkcn@gmail.com
2026-03-21 14:15:16 +08:00
parent 24f0b580ce
commit 9e21ac439b
12 changed files with 93 additions and 18 deletions

View File

@@ -1,7 +1,8 @@
"use client"
import { useCallback, useState } from "react"
import { Eye, EyeOff, Loader2 } from "lucide-react"
import { ExternalLink, Eye, EyeOff, Loader2 } from "lucide-react"
import { openUrl } from "@tauri-apps/plugin-opener"
import { useTranslations } from "next-intl"
import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
@@ -37,6 +38,20 @@ export function AddGitHubAccountDialog({
const [validating, setValidating] = useState(false)
const [error, setError] = useState<string | null>(null)
const handleGenerateToken = useCallback(async () => {
const base = serverUrl.trim().replace(/\/+$/, "") || "https://github.com"
const params = new URLSearchParams({
description: "codeg",
scopes: "repo,read:org,workflow,gist,read:user,user:email",
})
const url = `${base}/settings/tokens/new?${params.toString()}`
try {
await openUrl(url)
} catch {
// fallback: ignore if opener fails
}
}, [serverUrl])
const resetForm = useCallback(() => {
setServerUrl("https://github.com")
setToken("")
@@ -117,9 +132,21 @@ export function AddGitHubAccountDialog({
</div>
<div className="space-y-2">
<label className="text-xs font-medium text-muted-foreground">
{t("token")}
</label>
<div className="flex items-center justify-between">
<label className="text-xs font-medium text-muted-foreground">
{t("token")}
</label>
<Button
type="button"
variant="link"
size="xs"
className="h-auto p-0 text-xs"
onClick={handleGenerateToken}
>
{t("generateToken")}
<ExternalLink className="ml-1 h-3 w-3" />
</Button>
</div>
<div className="relative">
<Input
type={showToken ? "text" : "password"}

View File

@@ -8,7 +8,8 @@ import {
useState,
type ReactNode,
} from "react"
import { Eye, EyeOff, Github, KeyRound, Loader2 } from "lucide-react"
import { ExternalLink, Eye, EyeOff, Github, KeyRound, Loader2 } from "lucide-react"
import { openUrl } from "@tauri-apps/plugin-opener"
import { useTranslations } from "next-intl"
import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
@@ -184,6 +185,20 @@ export function GitCredentialProvider({
// Save credentials checkbox (generic mode)
const [saveCredentials, setSaveCredentials] = useState(true)
const handleGenerateToken = useCallback(async () => {
const host = remoteHost || "github.com"
const base = `https://${host}`
const params = new URLSearchParams({
description: "codeg",
scopes: "repo,read:org,workflow,gist,read:user,user:email",
})
try {
await openUrl(`${base}/settings/tokens/new?${params.toString()}`)
} catch {
// ignore
}
}, [remoteHost])
const [submitting, setSubmitting] = useState(false)
const [error, setError] = useState<string | null>(null)
@@ -401,9 +416,22 @@ export function GitCredentialProvider({
{mode === "github" ? (
/* ---- GitHub Token Mode ---- */
<div className="space-y-2">
<label className="text-xs font-medium text-muted-foreground">
{t("githubToken")}
</label>
<div className="flex items-center justify-between">
<label className="text-xs font-medium text-muted-foreground">
{t("githubToken")}
</label>
<Button
type="button"
variant="link"
size="xs"
className="h-auto p-0 text-xs"
onClick={handleGenerateToken}
disabled={submitting}
>
{t("generateToken")}
<ExternalLink className="ml-1 h-3 w-3" />
</Button>
</div>
<div className="relative">
<Input
type={showToken ? "text" : "password"}

View File

@@ -75,7 +75,8 @@
"githubToken": "رمز الوصول الشخصي",
"githubTokenPlaceholder": "ghp_xxxxxxxxxxxx",
"githubTokenHint": "أنشئ رمزًا في GitHub → Settings → Developer settings → Personal access tokens.",
"githubAuthenticate": "التحقق والاتصال"
"githubAuthenticate": "التحقق والاتصال",
"generateToken": "إنشاء رمز"
},
"SettingsShell": {
"title": "الإعدادات",
@@ -178,6 +179,7 @@
"serverUrlPlaceholder": "https://github.com",
"token": "رمز الوصول الشخصي",
"tokenPlaceholder": "ghp_xxxxxxxxxxxx",
"generateToken": "إنشاء رمز",
"tokenHint": "أنشئ رمزًا في GitHub → Settings → Developer settings → Personal access tokens.",
"validateAndAdd": "التحقق والإضافة",
"validating": "جارٍ التحقق...",

View File

@@ -75,7 +75,8 @@
"githubToken": "Persönliches Zugriffstoken",
"githubTokenPlaceholder": "ghp_xxxxxxxxxxxx",
"githubTokenHint": "Erstellen Sie ein Token unter GitHub → Settings → Developer settings → Personal access tokens.",
"githubAuthenticate": "Validieren & verbinden"
"githubAuthenticate": "Validieren & verbinden",
"generateToken": "Token erstellen"
},
"SettingsShell": {
"title": "Einstellungen",
@@ -178,6 +179,7 @@
"serverUrlPlaceholder": "https://github.com",
"token": "Persönlicher Zugriffstoken",
"tokenPlaceholder": "ghp_xxxxxxxxxxxx",
"generateToken": "Token erstellen",
"tokenHint": "Erstellen Sie einen Token unter GitHub → Settings → Developer settings → Personal access tokens.",
"validateAndAdd": "Validieren & hinzufügen",
"validating": "Validiere...",

View File

@@ -75,7 +75,8 @@
"githubToken": "Personal Access Token",
"githubTokenPlaceholder": "ghp_xxxxxxxxxxxx",
"githubTokenHint": "Generate a token at GitHub → Settings → Developer settings → Personal access tokens.",
"githubAuthenticate": "Validate & Connect"
"githubAuthenticate": "Validate & Connect",
"generateToken": "Generate token"
},
"SettingsShell": {
"title": "Settings",
@@ -178,6 +179,7 @@
"serverUrlPlaceholder": "https://github.com",
"token": "Personal Access Token",
"tokenPlaceholder": "ghp_xxxxxxxxxxxx",
"generateToken": "Generate token",
"tokenHint": "Generate a token at GitHub → Settings → Developer settings → Personal access tokens.",
"validateAndAdd": "Validate & Add",
"validating": "Validating...",

View File

@@ -75,7 +75,8 @@
"githubToken": "Token de acceso personal",
"githubTokenPlaceholder": "ghp_xxxxxxxxxxxx",
"githubTokenHint": "Genera un token en GitHub → Settings → Developer settings → Personal access tokens.",
"githubAuthenticate": "Validar y conectar"
"githubAuthenticate": "Validar y conectar",
"generateToken": "Generar token"
},
"SettingsShell": {
"title": "Configuración",
@@ -178,6 +179,7 @@
"serverUrlPlaceholder": "https://github.com",
"token": "Token de acceso personal",
"tokenPlaceholder": "ghp_xxxxxxxxxxxx",
"generateToken": "Generar token",
"tokenHint": "Genera un token en GitHub → Settings → Developer settings → Personal access tokens.",
"validateAndAdd": "Validar y añadir",
"validating": "Validando...",

View File

@@ -75,7 +75,8 @@
"githubToken": "Jeton d'accès personnel",
"githubTokenPlaceholder": "ghp_xxxxxxxxxxxx",
"githubTokenHint": "Générez un jeton dans GitHub → Settings → Developer settings → Personal access tokens.",
"githubAuthenticate": "Valider et connecter"
"githubAuthenticate": "Valider et connecter",
"generateToken": "Générer un jeton"
},
"SettingsShell": {
"title": "Paramètres",
@@ -178,6 +179,7 @@
"serverUrlPlaceholder": "https://github.com",
"token": "Jeton d'accès personnel",
"tokenPlaceholder": "ghp_xxxxxxxxxxxx",
"generateToken": "Générer un jeton",
"tokenHint": "Générez un jeton dans GitHub → Settings → Developer settings → Personal access tokens.",
"validateAndAdd": "Valider et ajouter",
"validating": "Validation...",

View File

@@ -75,7 +75,8 @@
"githubToken": "個人アクセストークン",
"githubTokenPlaceholder": "ghp_xxxxxxxxxxxx",
"githubTokenHint": "GitHub → Settings → Developer settings → Personal access tokens でトークンを生成してください。",
"githubAuthenticate": "検証して接続"
"githubAuthenticate": "検証して接続",
"generateToken": "トークンを生成"
},
"SettingsShell": {
"title": "設定",
@@ -178,6 +179,7 @@
"serverUrlPlaceholder": "https://github.com",
"token": "個人アクセストークン",
"tokenPlaceholder": "ghp_xxxxxxxxxxxx",
"generateToken": "トークンを生成",
"tokenHint": "GitHub → Settings → Developer settings → Personal access tokens でトークンを生成してください。",
"validateAndAdd": "検証して追加",
"validating": "検証中...",

View File

@@ -75,7 +75,8 @@
"githubToken": "개인 액세스 토큰",
"githubTokenPlaceholder": "ghp_xxxxxxxxxxxx",
"githubTokenHint": "GitHub → Settings → Developer settings → Personal access tokens에서 토큰을 생성하세요.",
"githubAuthenticate": "확인 및 연결"
"githubAuthenticate": "확인 및 연결",
"generateToken": "토큰 생성"
},
"SettingsShell": {
"title": "설정",
@@ -178,6 +179,7 @@
"serverUrlPlaceholder": "https://github.com",
"token": "개인 액세스 토큰",
"tokenPlaceholder": "ghp_xxxxxxxxxxxx",
"generateToken": "토큰 생성",
"tokenHint": "GitHub → Settings → Developer settings → Personal access tokens에서 토큰을 생성하세요.",
"validateAndAdd": "검증 및 추가",
"validating": "검증 중...",

View File

@@ -75,7 +75,8 @@
"githubToken": "Token de acesso pessoal",
"githubTokenPlaceholder": "ghp_xxxxxxxxxxxx",
"githubTokenHint": "Gere um token em GitHub → Settings → Developer settings → Personal access tokens.",
"githubAuthenticate": "Validar e conectar"
"githubAuthenticate": "Validar e conectar",
"generateToken": "Gerar token"
},
"SettingsShell": {
"title": "Configurações",
@@ -178,6 +179,7 @@
"serverUrlPlaceholder": "https://github.com",
"token": "Token de acesso pessoal",
"tokenPlaceholder": "ghp_xxxxxxxxxxxx",
"generateToken": "Gerar token",
"tokenHint": "Gere um token em GitHub → Settings → Developer settings → Personal access tokens.",
"validateAndAdd": "Validar e adicionar",
"validating": "Validando...",

View File

@@ -75,7 +75,8 @@
"githubToken": "个人访问令牌",
"githubTokenPlaceholder": "ghp_xxxxxxxxxxxx",
"githubTokenHint": "在 GitHub → Settings → Developer settings → Personal access tokens 中生成令牌。",
"githubAuthenticate": "验证并连接"
"githubAuthenticate": "验证并连接",
"generateToken": "生成令牌"
},
"SettingsShell": {
"title": "设置",
@@ -178,6 +179,7 @@
"serverUrlPlaceholder": "https://github.com",
"token": "个人访问令牌",
"tokenPlaceholder": "ghp_xxxxxxxxxxxx",
"generateToken": "生成令牌",
"tokenHint": "在 GitHub → Settings → Developer settings → Personal access tokens 中生成令牌。",
"validateAndAdd": "验证并添加",
"validating": "验证中...",

View File

@@ -75,7 +75,8 @@
"githubToken": "個人存取權杖",
"githubTokenPlaceholder": "ghp_xxxxxxxxxxxx",
"githubTokenHint": "在 GitHub → Settings → Developer settings → Personal access tokens 中產生權杖。",
"githubAuthenticate": "驗證並連線"
"githubAuthenticate": "驗證並連線",
"generateToken": "產生權杖"
},
"SettingsShell": {
"title": "設定",
@@ -178,6 +179,7 @@
"serverUrlPlaceholder": "https://github.com",
"token": "個人存取權杖",
"tokenPlaceholder": "ghp_xxxxxxxxxxxx",
"generateToken": "產生權杖",
"tokenHint": "在 GitHub → Settings → Developer settings → Personal access tokens 中產生權杖。",
"validateAndAdd": "驗證並新增",
"validating": "驗證中...",