Files
cftunnel/cmd/add.go
T
admin ddc893c030 feat: 功能完善 + 开源准备
- 新增 destroy/reset 命令(隧道删除+完全重置)
- 新增 version/update 命令(版本管理+自更新)
- 新增 selfupdate 模块(GitHub Releases 自动更新)
- 新增 goreleaser + release workflow(tag 自动发版)
- 新增 Makefile(版本号注入构建)
- 新增 Claude Code / OpenClaw Skills
- 脱敏: 示例域名改为 example.com
- 修正 init 权限引导(DNS 而非 DNS 设置)
2026-02-22 22:05:20 +08:00

78 lines
1.8 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package cmd
import (
"context"
"fmt"
"strings"
"github.com/qingchencloud/cftunnel/internal/cfapi"
"github.com/qingchencloud/cftunnel/internal/config"
"github.com/spf13/cobra"
)
var addDomain string
func init() {
addCmd.Flags().StringVar(&addDomain, "domain", "", "完整域名 (如 webhook.example.com)")
addCmd.MarkFlagRequired("domain")
rootCmd.AddCommand(addCmd)
}
var addCmd = &cobra.Command{
Use: "add <名称> <端口>",
Short: "添加路由(自动创建 CNAME + 更新 ingress",
Args: cobra.ExactArgs(2),
RunE: func(cmd *cobra.Command, args []string) error {
name, port := args[0], args[1]
service := "http://localhost:" + port
cfg, err := config.Load()
if err != nil {
return err
}
if cfg.Tunnel.ID == "" {
return fmt.Errorf("请先运行 cftunnel init")
}
if cfg.FindRoute(name) != nil {
return fmt.Errorf("路由 %s 已存在", name)
}
client := cfapi.New(cfg.Auth.APIToken, cfg.Auth.AccountID)
ctx := context.Background()
// 提取主域名查找 Zone
parts := strings.Split(addDomain, ".")
if len(parts) < 2 {
return fmt.Errorf("无效域名: %s", addDomain)
}
mainDomain := strings.Join(parts[len(parts)-2:], ".")
zone, err := client.FindZoneByDomain(ctx, mainDomain)
if err != nil {
return err
}
// 创建 CNAME
target := cfg.Tunnel.ID + ".cfargotunnel.com"
fmt.Printf("正在创建 DNS 记录 %s → %s\n", addDomain, target)
recordID, err := client.CreateCNAME(ctx, zone.ID, addDomain, target)
if err != nil {
return err
}
// 保存路由
cfg.Routes = append(cfg.Routes, config.RouteConfig{
Name: name,
Hostname: addDomain,
Service: service,
ZoneID: zone.ID,
DNSRecordID: recordID,
})
if err := cfg.Save(); err != nil {
return err
}
fmt.Printf("路由已添加: %s → %s (%s)\n", addDomain, service, name)
return nil
},
}