Files
cftunnel/cmd/quick.go
T
晴天 266b978371 feat: 内置鉴权代理 --auth 密码保护
在 cloudflared 和用户服务之间插入鉴权反向代理中间件,
用户通过 --auth user:pass 即可启用密码保护。

- 新增 internal/authproxy 包(代理核心/端口探测/登录页)
- quick 和 add 命令支持 --auth flag
- up 命令启动前自动为有 Auth 的路由启动代理
- 登录页深色主题,底部链接官网
- 官网新增访问保护特性卡片/对比表/命令速查
2026-02-25 03:31:23 +08:00

48 lines
1.3 KiB
Go

package cmd
import (
"fmt"
"strings"
"github.com/qingchencloud/cftunnel/internal/daemon"
"github.com/spf13/cobra"
)
var quickAuth string
func init() {
quickCmd.Flags().StringVar(&quickAuth, "auth", "", "启用密码保护 (格式: 用户名:密码)")
rootCmd.AddCommand(quickCmd)
}
var quickCmd = &cobra.Command{
Use: "quick <端口>",
Short: "快速启动免域名隧道(生成 *.trycloudflare.com 随机域名)",
Long: "无需 Cloudflare 账户、API Token 或域名,一条命令生成临时公网地址。\n适合临时分享、快速调试,Ctrl+C 退出后域名自动失效。",
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
if quickAuth != "" {
user, pass, err := parseAuth(quickAuth)
if err != nil {
return err
}
return daemon.StartQuickWithAuth(args[0], user, pass)
}
return daemon.StartQuick(args[0])
},
}
// parseAuth 解析 "用户名:密码" 格式,密码部分允许包含冒号
func parseAuth(s string) (string, string, error) {
idx := strings.Index(s, ":")
if idx < 0 {
return "", "", fmt.Errorf("--auth 格式错误,应为 用户名:密码")
}
user := s[:idx]
pass := s[idx+1:]
if user == "" || pass == "" {
return "", "", fmt.Errorf("--auth 用户名和密码不能为空")
}
return user, pass, nil
}