mirror of
https://github.com/qingchencloud/cftunnel.git
synced 2026-08-30 17:07:45 +08:00
f42915abd1
- 便携模式:程序同级目录放 portable 空文件,配置/bin/日志/PID 全部就地存储 - Windows 版本检测:启动时检测 OS 版本,低于 Win10 友好提示退出 - install 命令便携模式下拒绝注册系统服务 - reset 命令便携模式下安全清理(不删程序自身) - pidFile 包级变量改为函数调用,消除初始化时序隐患 Closes #8
63 lines
1.6 KiB
Go
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
|
|
},
|
|
}
|