From 9420d4339259b393f871a547d08cf1fda7986512 Mon Sep 17 00:00:00 2001 From: imbytecat Date: Sun, 1 Mar 2026 04:09:55 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20token=20=E6=94=B9=E4=B8=BA=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=E8=AF=BB=E5=8F=96=EF=BC=8C=E4=B8=8D?= =?UTF-8?q?=E5=86=8D=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90=EF=BC=9BUI=20?= =?UTF-8?q?=E5=85=A8=E9=83=A8=E6=B1=89=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.example.yaml | 4 ++++ internal/config/config.go | 10 ++++++++-- internal/server/net.go | 13 ------------- main.go | 28 +++++++++++++++++++--------- web/index.html | 10 +++++----- 5 files changed, 36 insertions(+), 29 deletions(-) diff --git a/config.example.yaml b/config.example.yaml index df99958..6191f27 100644 --- a/config.example.yaml +++ b/config.example.yaml @@ -11,3 +11,7 @@ doubao: server: port: 8443 # env: PORT tls_auto: true # env: TLS_AUTO — 自动 TLS (AnyIP + 自签名降级) + +# 安全配置 +security: + token: "" # 留空则不需要认证;填写后访问需携带 token 参数 diff --git a/internal/config/config.go b/internal/config/config.go index f1dbdf1..9290b74 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -11,6 +11,11 @@ type DoubaoConfig struct { ResourceID string `yaml:"resource_id"` } +// SecurityConfig holds authentication settings. +type SecurityConfig struct { + Token string `yaml:"token"` +} + // ServerConfig holds server settings. type ServerConfig struct { Port int `yaml:"port"` @@ -19,8 +24,9 @@ type ServerConfig struct { // Config is the top-level configuration. type Config struct { - Doubao DoubaoConfig `yaml:"doubao"` - Server ServerConfig `yaml:"server"` + Doubao DoubaoConfig `yaml:"doubao"` + Server ServerConfig `yaml:"server"` + Security SecurityConfig `yaml:"security"` } // defaults returns a Config with default values. diff --git a/internal/server/net.go b/internal/server/net.go index 21bd66f..f67ec07 100644 --- a/internal/server/net.go +++ b/internal/server/net.go @@ -1,10 +1,7 @@ package server import ( - "crypto/rand" - "encoding/hex" "fmt" - "log/slog" "net" ) @@ -22,13 +19,3 @@ func GetLANIP() (string, error) { return "", fmt.Errorf("no LAN IP found") } -// GenerateToken creates a cryptographically random token for WS auth. -func GenerateToken() string { - b := make([]byte, 16) - if _, err := rand.Read(b); err != nil { - slog.Error("failed to generate token", "error", err) - // Fallback to a less secure but functional token - return "voicepaste-fallback-token" - } - return hex.EncodeToString(b) -} diff --git a/main.go b/main.go index 463bddc..e073c2a 100644 --- a/main.go +++ b/main.go @@ -49,8 +49,8 @@ func main() { os.Exit(1) } - // Generate auth token - token := server.GenerateToken() + // Read token from config (empty = no auth required) + token := cfg.Security.Token // TLS setup var tlsResult *vpTLS.Result @@ -67,24 +67,34 @@ func main() { host = tlsResult.Host } // Build URL - url := fmt.Sprintf("%s://%s:%d/?token=%s", scheme, host, cfg.Server.Port, token) + var url string + if token != "" { + url = fmt.Sprintf("%s://%s:%d/?token=%s", scheme, host, cfg.Server.Port, token) + } else { + url = fmt.Sprintf("%s://%s:%d/", scheme, host, cfg.Server.Port) + } // Print connection info fmt.Println() fmt.Println("╔══════════════════════════════════════╗") - fmt.Println("║ VoicePaste Ready ║") + fmt.Println("║ VoicePaste 就绪 ║") fmt.Println("╚══════════════════════════════════════╝") fmt.Println() - fmt.Printf(" URL: %s\n", url) + fmt.Printf(" 地址: %s\n", url) if tlsResult != nil && tlsResult.AnyIP { - fmt.Println(" TLS: AnyIP (browser-trusted)") + fmt.Println(" 证书: AnyIP(浏览器信任)") } else if cfg.Server.TLSAuto { - fmt.Println(" TLS: self-signed (browser will warn)") + fmt.Println(" 证书: 自签名(浏览器会警告)") + } + if token != "" { + fmt.Println(" 认证: 已启用") + } else { + fmt.Println(" 认证: 未启用(无需 token)") } fmt.Println() printQRCode(url) fmt.Println() - fmt.Println(" Scan QR code with your phone to connect.") - fmt.Println(" Press Ctrl+C to stop.") + fmt.Println(" 用手机扫描二维码连接") + fmt.Println(" 按 Ctrl+C 停止服务") fmt.Println() // Create and start server webContent, _ := fs.Sub(webFS, "web") diff --git a/web/index.html b/web/index.html index 56d2dde..3827c89 100644 --- a/web/index.html +++ b/web/index.html @@ -14,13 +14,13 @@

VoicePaste

- Connecting... + 连接中…
-

Press and hold to speak

+

按住说话…

@@ -35,11 +35,11 @@
-

History

- +

历史记录

+
-

No history yet

+

暂无记录