优化数据连接处理逻辑,避免数据通道连接空等待问题;授权部分添加全局白名单支持;现在节点丢失连接后不会清空授权数据

This commit is contained in:
2025-05-23 18:59:53 +08:00
parent 12038f0af7
commit 52907b3fae
10 changed files with 170 additions and 92 deletions

29
gateway/env/env.go vendored
View File

@@ -3,8 +3,10 @@ package env
import (
"fmt"
"log/slog"
"net"
"os"
"strconv"
"strings"
"github.com/joho/godotenv"
)
@@ -20,6 +22,8 @@ var (
AppDataTimeout = 10 // 等待数据通道连接的超时时间
AppUserTimeout = 10 // 等待用户发送数据的超时时间(端口复用需要分析协议,如果用户长期不发送数据,将会阻塞分析协程)
AuthWhitelist []net.IP // 全局白名单,可以将白名单 IP 视为一个可信任代理
ClientId string
ClientSecret string
@@ -99,6 +103,31 @@ func Init() {
AppDataTimeout = appDataTimeout
}
value = os.Getenv("APP_USER_TIMEOUT")
if value != "" {
appUserTimeout, err := strconv.Atoi(value)
if err != nil {
panic(fmt.Sprintf("环境变量 APP_USER_TIMEOUT 格式错误: %v", err))
}
AppUserTimeout = appUserTimeout
}
value = os.Getenv("AUTH_WHITELIST")
if value != "" {
ips := strings.Split(value, ",")
for _, ip := range ips {
ip = strings.TrimSpace(ip)
if ip == "" {
continue
}
parsedIP := net.ParseIP(ip)
if parsedIP == nil {
panic(fmt.Sprintf("环境变量 AUTH_WHITELIST 格式错误: %s", ip))
}
AuthWhitelist = append(AuthWhitelist, parsedIP)
}
}
value = os.Getenv("CLIENT_ID")
if value != "" {
ClientId = value