支持快捷打开github凭据生成页面
This commit is contained in:
@@ -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"}
|
||||
|
||||
@@ -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"}
|
||||
|
||||
@@ -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": "جارٍ التحقق...",
|
||||
|
||||
@@ -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...",
|
||||
|
||||
@@ -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...",
|
||||
|
||||
@@ -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...",
|
||||
|
||||
@@ -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...",
|
||||
|
||||
@@ -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": "検証中...",
|
||||
|
||||
@@ -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": "검증 중...",
|
||||
|
||||
@@ -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...",
|
||||
|
||||
@@ -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": "验证中...",
|
||||
|
||||
@@ -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": "驗證中...",
|
||||
|
||||
Reference in New Issue
Block a user