Files
cftunnel/cmd/reset.go
T
晴天 f42915abd1 feat: 便携模式 + Windows 版本检测
- 便携模式:程序同级目录放 portable 空文件,配置/bin/日志/PID 全部就地存储
- Windows 版本检测:启动时检测 OS 版本,低于 Win10 友好提示退出
- install 命令便携模式下拒绝注册系统服务
- reset 命令便携模式下安全清理(不删程序自身)
- pidFile 包级变量改为函数调用,消除初始化时序隐患

Closes #8
2026-02-24 22:21:17 +08:00

63 lines
1.6 KiB
Go

package cmd
import (
"bufio"
"fmt"
"os"
"path/filepath"
"strings"
"github.com/qingchencloud/cftunnel/internal/config"
"github.com/spf13/cobra"
)
var resetForce bool
func init() {
resetCmd.Flags().BoolVar(&resetForce, "force", false, "跳过确认")
rootCmd.AddCommand(resetCmd)
}
var resetCmd = &cobra.Command{
Use: "reset",
Short: "重置全部(删除隧道 + 清除本地配置)",
RunE: func(cmd *cobra.Command, args []string) error {
if !resetForce {
fmt.Println("即将删除隧道并清除所有本地配置,此操作不可恢复!")
fmt.Print("确认重置?(y/N): ")
reader := bufio.NewReader(os.Stdin)
input, _ := reader.ReadString('\n')
if strings.TrimSpace(strings.ToLower(input)) != "y" {
fmt.Println("已取消")
return nil
}
}
// 先执行 destroy 逻辑(如果有隧道)
cfg, _ := config.Load()
if cfg != nil && cfg.Tunnel.ID != "" {
destroyForce = true
if err := destroyCmd.RunE(cmd, nil); err != nil {
fmt.Printf("警告: 删除隧道失败: %v\n", err)
}
}
// 删除配置目录
dir := config.Dir()
if config.Portable() {
// 便携模式:只清理数据文件,不删程序自身和 portable 标记
for _, name := range []string{"config.yml", "bin", "cloudflared.pid", "cftunnel.log"} {
os.RemoveAll(filepath.Join(dir, name))
}
} else {
if err := os.RemoveAll(dir); err != nil {
return fmt.Errorf("清除配置目录失败: %w", err)
}
}
fmt.Printf("已清除 %s,回到全新状态\n", dir)
fmt.Println("重新开始: cftunnel init")
return nil
},
}