Files
cftunnel/cmd/create.go
T
admin 21244ac083 refactor: 拆分 init/create 命令,init 只配置认证,create 独立创建隧道
- init 不再创建隧道,只保存 API Token + Account ID
- 新增 create 命令专门创建隧道
- init 引导添加 CF 控制台直达链接
- 更新所有命令提示文字、README、skills 文档
2026-02-22 22:47:41 +08:00

55 lines
1.3 KiB
Go

package cmd
import (
"context"
"fmt"
"github.com/qingchencloud/cftunnel/internal/cfapi"
"github.com/qingchencloud/cftunnel/internal/config"
"github.com/spf13/cobra"
)
func init() {
rootCmd.AddCommand(createCmd)
}
var createCmd = &cobra.Command{
Use: "create <隧道名称>",
Short: "创建 Cloudflare Tunnel",
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
cfg, err := config.Load()
if err != nil {
return err
}
if cfg.Auth.APIToken == "" {
return fmt.Errorf("请先运行 cftunnel init 配置认证信息")
}
if cfg.Tunnel.ID != "" {
return fmt.Errorf("已存在隧道 %s (%s),如需重建请先 cftunnel destroy", cfg.Tunnel.Name, cfg.Tunnel.ID)
}
client := cfapi.New(cfg.Auth.APIToken, cfg.Auth.AccountID)
ctx := context.Background()
fmt.Println("正在创建隧道...")
tunnel, err := client.CreateTunnel(ctx, args[0])
if err != nil {
return err
}
fmt.Printf("隧道已创建: %s (%s)\n", tunnel.Name, tunnel.ID)
token, err := client.GetTunnelToken(ctx, tunnel.ID)
if err != nil {
return err
}
cfg.Tunnel = config.TunnelConfig{ID: tunnel.ID, Name: tunnel.Name, Token: token}
if err := cfg.Save(); err != nil {
return err
}
fmt.Println("\n下一步: cftunnel add <名称> <端口> --domain <域名>")
return nil
},
}