refactor(stream): 重命名 SSL 管理器类型移除冗余前缀
StreamSSLManager → SSLManager StreamProxySSLManager → ProxySSLManager Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
53319bbdd3
commit
4e535deb80
@ -19,10 +19,10 @@ import (
|
|||||||
"rua.plus/lolly/internal/config"
|
"rua.plus/lolly/internal/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
// StreamSSLManager 管理 Stream SSL/TLS 配置。
|
// SSLManager 管理 Stream SSL/TLS 配置。
|
||||||
//
|
//
|
||||||
// 负责加载证书、配置 TLS 连接,支持服务端和客户端两种模式。
|
// 负责加载证书、配置 TLS 连接,支持服务端和客户端两种模式。
|
||||||
type StreamSSLManager struct {
|
type SSLManager struct {
|
||||||
// config SSL 配置
|
// config SSL 配置
|
||||||
config config.StreamSSLConfig
|
config config.StreamSSLConfig
|
||||||
|
|
||||||
@ -36,10 +36,10 @@ type StreamSSLManager struct {
|
|||||||
mu sync.RWMutex
|
mu sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
// StreamProxySSLManager 管理上游 SSL 连接。
|
// ProxySSLManager 管理上游 SSL 连接。
|
||||||
//
|
//
|
||||||
// 负责创建到上游服务器的 TLS 连接,支持证书验证和客户端证书。
|
// 负责创建到上游服务器的 TLS 连接,支持证书验证和客户端证书。
|
||||||
type StreamProxySSLManager struct {
|
type ProxySSLManager struct {
|
||||||
// config 代理 SSL 配置
|
// config 代理 SSL 配置
|
||||||
config config.StreamProxySSLConfig
|
config config.StreamProxySSLConfig
|
||||||
|
|
||||||
@ -53,17 +53,17 @@ type StreamProxySSLManager struct {
|
|||||||
mu sync.RWMutex
|
mu sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewStreamSSLManager 创建 Stream SSL 管理器。
|
// NewSSLManager 创建 Stream SSL 管理器。
|
||||||
//
|
//
|
||||||
// 参数:
|
// 参数:
|
||||||
// - cfg: SSL 配置
|
// - cfg: SSL 配置
|
||||||
//
|
//
|
||||||
// 返回值:
|
// 返回值:
|
||||||
// - *StreamSSLManager: SSL 管理器实例
|
// - *SSLManager: SSL 管理器实例
|
||||||
// - error: 证书加载失败时返回错误
|
// - error: 证书加载失败时返回错误
|
||||||
func NewStreamSSLManager(cfg config.StreamSSLConfig) (*StreamSSLManager, error) {
|
func NewSSLManager(cfg config.StreamSSLConfig) (*SSLManager, error) {
|
||||||
if !cfg.Enabled {
|
if !cfg.Enabled {
|
||||||
return &StreamSSLManager{config: cfg}, nil
|
return &SSLManager{config: cfg}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// 加载服务器证书
|
// 加载服务器证书
|
||||||
@ -72,7 +72,7 @@ func NewStreamSSLManager(cfg config.StreamSSLConfig) (*StreamSSLManager, error)
|
|||||||
return nil, fmt.Errorf("failed to load server certificate: %w", err)
|
return nil, fmt.Errorf("failed to load server certificate: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
mgr := &StreamSSLManager{
|
mgr := &SSLManager{
|
||||||
config: cfg,
|
config: cfg,
|
||||||
cert: cert,
|
cert: cert,
|
||||||
}
|
}
|
||||||
@ -89,20 +89,20 @@ func NewStreamSSLManager(cfg config.StreamSSLConfig) (*StreamSSLManager, error)
|
|||||||
return mgr, nil
|
return mgr, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewStreamProxySSLManager 创建上游 SSL 管理器。
|
// NewProxySSLManager 创建上游 SSL 管理器。
|
||||||
//
|
//
|
||||||
// 参数:
|
// 参数:
|
||||||
// - cfg: 代理 SSL 配置
|
// - cfg: 代理 SSL 配置
|
||||||
//
|
//
|
||||||
// 返回值:
|
// 返回值:
|
||||||
// - *StreamProxySSLManager: 代理 SSL 管理器实例
|
// - *ProxySSLManager: 代理 SSL 管理器实例
|
||||||
// - error: 证书加载失败时返回错误
|
// - error: 证书加载失败时返回错误
|
||||||
func NewStreamProxySSLManager(cfg config.StreamProxySSLConfig) (*StreamProxySSLManager, error) {
|
func NewProxySSLManager(cfg config.StreamProxySSLConfig) (*ProxySSLManager, error) {
|
||||||
if !cfg.Enabled {
|
if !cfg.Enabled {
|
||||||
return &StreamProxySSLManager{config: cfg}, nil
|
return &ProxySSLManager{config: cfg}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
mgr := &StreamProxySSLManager{config: cfg}
|
mgr := &ProxySSLManager{config: cfg}
|
||||||
|
|
||||||
// 加载客户端证书(mTLS)
|
// 加载客户端证书(mTLS)
|
||||||
if cfg.Cert != "" && cfg.Key != "" {
|
if cfg.Cert != "" && cfg.Key != "" {
|
||||||
@ -129,7 +129,7 @@ func NewStreamProxySSLManager(cfg config.StreamProxySSLConfig) (*StreamProxySSLM
|
|||||||
//
|
//
|
||||||
// 返回值:
|
// 返回值:
|
||||||
// - *tls.Config: TLS 配置对象
|
// - *tls.Config: TLS 配置对象
|
||||||
func (m *StreamSSLManager) GetTLSConfig() *tls.Config {
|
func (m *SSLManager) GetTLSConfig() *tls.Config {
|
||||||
m.mu.RLock()
|
m.mu.RLock()
|
||||||
defer m.mu.RUnlock()
|
defer m.mu.RUnlock()
|
||||||
|
|
||||||
@ -170,7 +170,7 @@ func (m *StreamSSLManager) GetTLSConfig() *tls.Config {
|
|||||||
//
|
//
|
||||||
// 返回值:
|
// 返回值:
|
||||||
// - *tls.Config: TLS 配置对象
|
// - *tls.Config: TLS 配置对象
|
||||||
func (m *StreamProxySSLManager) GetClientTLSConfig(serverName string) *tls.Config {
|
func (m *ProxySSLManager) GetClientTLSConfig(serverName string) *tls.Config {
|
||||||
m.mu.RLock()
|
m.mu.RLock()
|
||||||
defer m.mu.RUnlock()
|
defer m.mu.RUnlock()
|
||||||
|
|
||||||
@ -216,12 +216,12 @@ func (m *StreamProxySSLManager) GetClientTLSConfig(serverName string) *tls.Confi
|
|||||||
}
|
}
|
||||||
|
|
||||||
// IsEnabled 检查是否启用 SSL。
|
// IsEnabled 检查是否启用 SSL。
|
||||||
func (m *StreamSSLManager) IsEnabled() bool {
|
func (m *SSLManager) IsEnabled() bool {
|
||||||
return m.config.Enabled
|
return m.config.Enabled
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsEnabled 检查是否启用代理 SSL。
|
// IsEnabled 检查是否启用代理 SSL。
|
||||||
func (m *StreamProxySSLManager) IsEnabled() bool {
|
func (m *ProxySSLManager) IsEnabled() bool {
|
||||||
return m.config.Enabled
|
return m.config.Enabled
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -67,14 +67,14 @@ func generateTestCertificate(t *testing.T, certFile, keyFile string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNewStreamSSLManager_Disabled(t *testing.T) {
|
func TestNewSSLManager_Disabled(t *testing.T) {
|
||||||
cfg := config.StreamSSLConfig{
|
cfg := config.StreamSSLConfig{
|
||||||
Enabled: false,
|
Enabled: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
mgr, err := NewStreamSSLManager(cfg)
|
mgr, err := NewSSLManager(cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("NewStreamSSLManager failed: %v", err)
|
t.Fatalf("NewSSLManager failed: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if mgr.IsEnabled() {
|
if mgr.IsEnabled() {
|
||||||
@ -87,7 +87,7 @@ func TestNewStreamSSLManager_Disabled(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNewStreamSSLManager_Enabled(t *testing.T) {
|
func TestNewSSLManager_Enabled(t *testing.T) {
|
||||||
tempDir := t.TempDir()
|
tempDir := t.TempDir()
|
||||||
certFile := filepath.Join(tempDir, "server.crt")
|
certFile := filepath.Join(tempDir, "server.crt")
|
||||||
keyFile := filepath.Join(tempDir, "server.key")
|
keyFile := filepath.Join(tempDir, "server.key")
|
||||||
@ -101,9 +101,9 @@ func TestNewStreamSSLManager_Enabled(t *testing.T) {
|
|||||||
Protocols: []string{"TLSv1.2", "TLSv1.3"},
|
Protocols: []string{"TLSv1.2", "TLSv1.3"},
|
||||||
}
|
}
|
||||||
|
|
||||||
mgr, err := NewStreamSSLManager(cfg)
|
mgr, err := NewSSLManager(cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("NewStreamSSLManager failed: %v", err)
|
t.Fatalf("NewSSLManager failed: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !mgr.IsEnabled() {
|
if !mgr.IsEnabled() {
|
||||||
@ -124,27 +124,27 @@ func TestNewStreamSSLManager_Enabled(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNewStreamSSLManager_InvalidCert(t *testing.T) {
|
func TestNewSSLManager_InvalidCert(t *testing.T) {
|
||||||
cfg := config.StreamSSLConfig{
|
cfg := config.StreamSSLConfig{
|
||||||
Enabled: true,
|
Enabled: true,
|
||||||
Cert: "/nonexistent/cert.pem",
|
Cert: "/nonexistent/cert.pem",
|
||||||
Key: "/nonexistent/key.pem",
|
Key: "/nonexistent/key.pem",
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := NewStreamSSLManager(cfg)
|
_, err := NewSSLManager(cfg)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Error("Expected error for invalid certificate path")
|
t.Error("Expected error for invalid certificate path")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNewStreamProxySSLManager_Disabled(t *testing.T) {
|
func TestNewProxySSLManager_Disabled(t *testing.T) {
|
||||||
cfg := config.StreamProxySSLConfig{
|
cfg := config.StreamProxySSLConfig{
|
||||||
Enabled: false,
|
Enabled: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
mgr, err := NewStreamProxySSLManager(cfg)
|
mgr, err := NewProxySSLManager(cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("NewStreamProxySSLManager failed: %v", err)
|
t.Fatalf("NewProxySSLManager failed: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if mgr.IsEnabled() {
|
if mgr.IsEnabled() {
|
||||||
@ -157,7 +157,7 @@ func TestNewStreamProxySSLManager_Disabled(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNewStreamProxySSLManager_Enabled(t *testing.T) {
|
func TestNewProxySSLManager_Enabled(t *testing.T) {
|
||||||
tempDir := t.TempDir()
|
tempDir := t.TempDir()
|
||||||
certFile := filepath.Join(tempDir, "client.crt")
|
certFile := filepath.Join(tempDir, "client.crt")
|
||||||
keyFile := filepath.Join(tempDir, "client.key")
|
keyFile := filepath.Join(tempDir, "client.key")
|
||||||
@ -174,9 +174,9 @@ func TestNewStreamProxySSLManager_Enabled(t *testing.T) {
|
|||||||
SessionReuse: true,
|
SessionReuse: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
mgr, err := NewStreamProxySSLManager(cfg)
|
mgr, err := NewProxySSLManager(cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("NewStreamProxySSLManager failed: %v", err)
|
t.Fatalf("NewProxySSLManager failed: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !mgr.IsEnabled() {
|
if !mgr.IsEnabled() {
|
||||||
@ -209,7 +209,7 @@ func TestNewStreamProxySSLManager_Enabled(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNewStreamProxySSLManager_WithVerify(t *testing.T) {
|
func TestNewProxySSLManager_WithVerify(t *testing.T) {
|
||||||
tempDir := t.TempDir()
|
tempDir := t.TempDir()
|
||||||
caFile := filepath.Join(tempDir, "ca.crt")
|
caFile := filepath.Join(tempDir, "ca.crt")
|
||||||
|
|
||||||
@ -249,9 +249,9 @@ func TestNewStreamProxySSLManager_WithVerify(t *testing.T) {
|
|||||||
ServerName: "backend.example.com",
|
ServerName: "backend.example.com",
|
||||||
}
|
}
|
||||||
|
|
||||||
mgr, err := NewStreamProxySSLManager(cfg)
|
mgr, err := NewProxySSLManager(cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("NewStreamProxySSLManager failed: %v", err)
|
t.Fatalf("NewProxySSLManager failed: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
tlsConfig := mgr.GetClientTLSConfig("")
|
tlsConfig := mgr.GetClientTLSConfig("")
|
||||||
@ -381,7 +381,7 @@ func TestLoadCertPool(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestStreamSSLManager_GetTLSConfig_WithClientCA(t *testing.T) {
|
func TestSSLManager_GetTLSConfig_WithClientCA(t *testing.T) {
|
||||||
tempDir := t.TempDir()
|
tempDir := t.TempDir()
|
||||||
certFile := filepath.Join(tempDir, "server.crt")
|
certFile := filepath.Join(tempDir, "server.crt")
|
||||||
keyFile := filepath.Join(tempDir, "server.key")
|
keyFile := filepath.Join(tempDir, "server.key")
|
||||||
@ -419,9 +419,9 @@ func TestStreamSSLManager_GetTLSConfig_WithClientCA(t *testing.T) {
|
|||||||
Protocols: []string{"TLSv1.2"},
|
Protocols: []string{"TLSv1.2"},
|
||||||
}
|
}
|
||||||
|
|
||||||
mgr, err := NewStreamSSLManager(cfg)
|
mgr, err := NewSSLManager(cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("NewStreamSSLManager failed: %v", err)
|
t.Fatalf("NewSSLManager failed: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
tlsConfig := mgr.GetTLSConfig()
|
tlsConfig := mgr.GetTLSConfig()
|
||||||
@ -440,16 +440,16 @@ func TestStreamSSLManager_GetTLSConfig_WithClientCA(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestStreamProxySSLManager_GetClientTLSConfig_WithServerNameOverride(t *testing.T) {
|
func TestProxySSLManager_GetClientTLSConfig_WithServerNameOverride(t *testing.T) {
|
||||||
cfg := config.StreamProxySSLConfig{
|
cfg := config.StreamProxySSLConfig{
|
||||||
Enabled: true,
|
Enabled: true,
|
||||||
Verify: false,
|
Verify: false,
|
||||||
ServerName: "configured.example.com",
|
ServerName: "configured.example.com",
|
||||||
}
|
}
|
||||||
|
|
||||||
mgr, err := NewStreamProxySSLManager(cfg)
|
mgr, err := NewProxySSLManager(cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("NewStreamProxySSLManager failed: %v", err)
|
t.Fatalf("NewProxySSLManager failed: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 即使传入不同的 serverName,也应该使用配置的
|
// 即使传入不同的 serverName,也应该使用配置的
|
||||||
|
|||||||
@ -171,7 +171,7 @@ func (w *weightedRoundRobin) Select(targets []*Target) *Target {
|
|||||||
totalWeight := 0
|
totalWeight := 0
|
||||||
for _, t := range healthy {
|
for _, t := range healthy {
|
||||||
if t.weight <= 0 {
|
if t.weight <= 0 {
|
||||||
totalWeight += 1 // 最小权重为 1
|
totalWeight++ // 最小权重为 1
|
||||||
} else {
|
} else {
|
||||||
totalWeight += t.weight
|
totalWeight += t.weight
|
||||||
}
|
}
|
||||||
@ -510,7 +510,7 @@ func (s *Server) acceptLoop(addr string, listener net.Listener) {
|
|||||||
// 参数:
|
// 参数:
|
||||||
// - clientConn: 客户端连接
|
// - clientConn: 客户端连接
|
||||||
// - addr: 监听地址
|
// - addr: 监听地址
|
||||||
func (s *Server) handleConnection(clientConn net.Conn, addr string) {
|
func (s *Server) handleConnection(clientConn net.Conn, _ string) {
|
||||||
defer func() {
|
defer func() {
|
||||||
_ = clientConn.Close()
|
_ = clientConn.Close()
|
||||||
s.connCount--
|
s.connCount--
|
||||||
|
|||||||
@ -272,7 +272,7 @@ func TestHealthChecker(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHealthCheckerStartStop(t *testing.T) {
|
func TestHealthCheckerStartStop(_ *testing.T) {
|
||||||
u := &Upstream{
|
u := &Upstream{
|
||||||
targets: []*Target{
|
targets: []*Target{
|
||||||
{addr: "localhost:99998"}, // 不存在的端口
|
{addr: "localhost:99998"}, // 不存在的端口
|
||||||
@ -720,7 +720,7 @@ func TestUDPSessionOperations(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUDPSessionClose(t *testing.T) {
|
func TestUDPSessionClose(_ *testing.T) {
|
||||||
// 创建两个 UDP 连接用于测试
|
// 创建两个 UDP 连接用于测试
|
||||||
udpAddr1, _ := net.ResolveUDPAddr("udp", "127.0.0.1:0")
|
udpAddr1, _ := net.ResolveUDPAddr("udp", "127.0.0.1:0")
|
||||||
conn1, _ := net.ListenUDP("udp", udpAddr1)
|
conn1, _ := net.ListenUDP("udp", udpAddr1)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user