11package cmd
22
33import (
4- "context"
54 "fmt"
65 "strings"
76
87 "github.com/charmbracelet/huh"
9- "github.com/qingchencloud/cftunnel/internal/cfapi"
108 "github.com/qingchencloud/cftunnel/internal/config"
119 "github.com/spf13/cobra"
1210)
1311
14- var initToken , initAccountID , initTunnelName string
12+ var initToken , initAccountID string
1513
1614func init () {
1715 initCmd .Flags ().StringVar (& initToken , "token" , "" , "API 令牌" )
1816 initCmd .Flags ().StringVar (& initAccountID , "account" , "" , "账户 ID" )
19- initCmd .Flags ().StringVar (& initTunnelName , "name" , "my-tunnel" , "隧道名称" )
2017 rootCmd .AddCommand (initCmd )
2118}
2219
2320var initCmd = & cobra.Command {
2421 Use : "init" ,
25- Short : "交互式初始化:输入 Token → 选域名 → 创建隧道 " ,
22+ Short : "配置 Cloudflare API 认证信息 " ,
2623 RunE : func (cmd * cobra.Command , args []string ) error {
27- fmt .Println ("=== Cloudflare Tunnel 初始化向导 ===" )
24+ fmt .Println ("=== Cloudflare Tunnel 初始化 ===" )
2825 fmt .Println ()
29- fmt .Println ("需要以下信息(首次使用请先创建 API 令牌):" )
30- fmt .Println ()
31- fmt .Println (" 1. API 令牌获取方式:" )
32- fmt .Println (" 登录 Cloudflare → 右上角头像 → 我的个人资料 → API 令牌 → 创建令牌" )
26+ fmt .Println (" 1. 创建 API 令牌:" )
27+ fmt .Println (" https://dash.cloudflare.com/profile/api-tokens → 创建令牌" )
3328 fmt .Println (" 选择「创建自定义令牌」→「开始使用」" )
3429 fmt .Println ()
3530 fmt .Println (" 添加 3 条权限(点「+ 添加更多」逐条添加):" )
@@ -39,66 +34,43 @@ var initCmd = &cobra.Command{
3934 fmt .Println (" │ 第 3 行: 区域 │ 区域设置 │ 读取 │" )
4035 fmt .Println (" └──────────────────────────────────────────────────┘" )
4136 fmt .Println (" 提示: 第 2、3 行需先将左侧「帐户」切换为「区域」" )
42- fmt .Println ()
4337 fmt .Println (" 区域资源 → 包括 → 特定区域 → 选择你的域名" )
4438 fmt .Println ()
45- fmt .Println (" 2. 账户 ID 获取方式 (任选其一):" )
46- fmt .Println (" 方式 A: 首页 → 点击域名 → 页面右下角 「API」区域 →「账户 ID」 " )
39+ fmt .Println (" 2. 获取账户 ID(任选其一):" )
40+ fmt .Println (" 方式 A: https://dash.cloudflare.com → 点击域名 → 右下角 「API」区域" )
4741 fmt .Println (" 方式 B: 首页 → 账户名称旁「⋯」→ 复制账户 ID" )
4842 fmt .Println ()
4943
5044 apiToken := strings .TrimSpace (initToken )
5145 accountID := strings .TrimSpace (initAccountID )
52- tunnelName := strings .TrimSpace (initTunnelName )
5346
54- // 有 flag 则跳过 TUI
5547 if apiToken == "" || accountID == "" {
5648 err := huh .NewForm (
5749 huh .NewGroup (
58- huh .NewInput ().Title ("API 令牌 (API Token)" ).Value (& apiToken ).Placeholder ("在 Cloudflare 控制台创建" ),
59- huh .NewInput ().Title ("账户 ID (Account ID)" ).Value (& accountID ).Placeholder ("32 位十六进制字符串" ),
60- huh .NewInput ().Title ("隧道名称" ).Value (& tunnelName ).Placeholder ("my-tunnel" ),
50+ huh .NewInput ().Title ("API 令牌 (API Token)" ).Value (& apiToken ).
51+ Placeholder ("在上方链接创建" ),
52+ huh .NewInput ().Title ("账户 ID (Account ID)" ).Value (& accountID ).
53+ Placeholder ("32 位十六进制字符串" ),
6154 ),
6255 ).Run ()
6356 if err != nil {
6457 return err
6558 }
6659 apiToken = strings .TrimSpace (apiToken )
6760 accountID = strings .TrimSpace (accountID )
68- tunnelName = strings .TrimSpace (tunnelName )
69- }
70- if tunnelName == "" {
71- tunnelName = "my-tunnel"
72- }
73-
74- client := cfapi .New (apiToken , accountID )
75- ctx := context .Background ()
76-
77- // 创建隧道
78- fmt .Println ("正在创建隧道..." )
79- tunnel , err := client .CreateTunnel (ctx , tunnelName )
80- if err != nil {
81- return err
8261 }
83- fmt .Printf ("隧道已创建: %s (%s)\n " , tunnel .Name , tunnel .ID )
8462
85- // 获取 Token
86- token , err := client .GetTunnelToken (ctx , tunnel .ID )
87- if err != nil {
88- return err
63+ if apiToken == "" || accountID == "" {
64+ return fmt .Errorf ("API 令牌和账户 ID 不能为空" )
8965 }
9066
91- // 保存配置
92- cfg := & config.Config {
93- Version : 1 ,
94- Auth : config.AuthConfig {APIToken : apiToken , AccountID : accountID },
95- Tunnel : config.TunnelConfig {ID : tunnel .ID , Name : tunnel .Name , Token : token },
96- }
67+ cfg , _ := config .Load ()
68+ cfg .Auth = config.AuthConfig {APIToken : apiToken , AccountID : accountID }
9769 if err := cfg .Save (); err != nil {
9870 return err
9971 }
100- fmt .Printf ("配置已保存到 %s\n " , config .Path ())
101- fmt .Println ("\n 下一步: cftunnel add <名称> <端口> --domain <域名 >" )
72+ fmt .Printf ("认证信息已保存到 %s\n " , config .Path ())
73+ fmt .Println ("\n 下一步: cftunnel create <隧道名称 >" )
10274 return nil
10375 },
10476}
0 commit comments