mirror of
https://github.com/qingchencloud/cftunnel.git
synced 2026-08-28 18:20:34 +08:00
21244ac083
- init 不再创建隧道,只保存 API Token + Account ID - 新增 create 命令专门创建隧道 - init 引导添加 CF 控制台直达链接 - 更新所有命令提示文字、README、skills 文档
77 lines
2.9 KiB
Go
77 lines
2.9 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/charmbracelet/huh"
|
|
"github.com/qingchencloud/cftunnel/internal/config"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var initToken, initAccountID string
|
|
|
|
func init() {
|
|
initCmd.Flags().StringVar(&initToken, "token", "", "API 令牌")
|
|
initCmd.Flags().StringVar(&initAccountID, "account", "", "账户 ID")
|
|
rootCmd.AddCommand(initCmd)
|
|
}
|
|
|
|
var initCmd = &cobra.Command{
|
|
Use: "init",
|
|
Short: "配置 Cloudflare API 认证信息",
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
fmt.Println("=== Cloudflare Tunnel 初始化 ===")
|
|
fmt.Println()
|
|
fmt.Println(" 1. 创建 API 令牌:")
|
|
fmt.Println(" https://dash.cloudflare.com/profile/api-tokens → 创建令牌")
|
|
fmt.Println(" 选择「创建自定义令牌」→「开始使用」")
|
|
fmt.Println()
|
|
fmt.Println(" 添加 3 条权限(点「+ 添加更多」逐条添加):")
|
|
fmt.Println(" ┌──────────────────────────────────────────────────┐")
|
|
fmt.Println(" │ 第 1 行: 帐户 │ Cloudflare Tunnel │ 编辑 │")
|
|
fmt.Println(" │ 第 2 行: 区域 │ DNS │ 编辑 │")
|
|
fmt.Println(" │ 第 3 行: 区域 │ 区域设置 │ 读取 │")
|
|
fmt.Println(" └──────────────────────────────────────────────────┘")
|
|
fmt.Println(" 提示: 第 2、3 行需先将左侧「帐户」切换为「区域」")
|
|
fmt.Println(" 区域资源 → 包括 → 特定区域 → 选择你的域名")
|
|
fmt.Println()
|
|
fmt.Println(" 2. 获取账户 ID(任选其一):")
|
|
fmt.Println(" 方式 A: https://dash.cloudflare.com → 点击域名 → 右下角「API」区域")
|
|
fmt.Println(" 方式 B: 首页 → 账户名称旁「⋯」→ 复制账户 ID")
|
|
fmt.Println()
|
|
|
|
apiToken := strings.TrimSpace(initToken)
|
|
accountID := strings.TrimSpace(initAccountID)
|
|
|
|
if apiToken == "" || accountID == "" {
|
|
err := huh.NewForm(
|
|
huh.NewGroup(
|
|
huh.NewInput().Title("API 令牌 (API Token)").Value(&apiToken).
|
|
Placeholder("在上方链接创建"),
|
|
huh.NewInput().Title("账户 ID (Account ID)").Value(&accountID).
|
|
Placeholder("32 位十六进制字符串"),
|
|
),
|
|
).Run()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
apiToken = strings.TrimSpace(apiToken)
|
|
accountID = strings.TrimSpace(accountID)
|
|
}
|
|
|
|
if apiToken == "" || accountID == "" {
|
|
return fmt.Errorf("API 令牌和账户 ID 不能为空")
|
|
}
|
|
|
|
cfg, _ := config.Load()
|
|
cfg.Auth = config.AuthConfig{APIToken: apiToken, AccountID: accountID}
|
|
if err := cfg.Save(); err != nil {
|
|
return err
|
|
}
|
|
fmt.Printf("认证信息已保存到 %s\n", config.Path())
|
|
fmt.Println("\n下一步: cftunnel create <隧道名称>")
|
|
return nil
|
|
},
|
|
}
|