"feat(server): 添加SSL匹配器并支持HTTPS服务器启动逻辑"

This commit is contained in:
程广 2025-06-24 11:07:31 +08:00
parent 84960de4a6
commit eecfc51c1e
2 changed files with 45 additions and 3 deletions

View File

@ -51,3 +51,19 @@ func (s *Strings) HasOrContainPrefix(value string) bool {
return false
}
}
func (s *Strings) HasOrContain(value string) bool {
switch v := s.Values.(type) {
case []interface{}:
for _, item := range v {
if strings.Contains(value, item.(string)) {
return true
}
}
return false
case string:
return strings.Contains(value, v)
default:
return false
}
}

View File

@ -31,6 +31,24 @@ func makeMatcher(name model.Strings, s *ServerListener) cmux.Matcher {
}
}
func makeSSLMatcher(name model.Strings, s *ServerListener) cmux.Matcher {
l := logger.GetLogger("ServerListener")
tlsMathcer := cmux.TLS()
return func(r io.Reader) bool {
isTls := tlsMathcer(r)
if isTls {
buf := make([]byte, 1024)
n, err := r.Read(buf)
if err != nil {
return false
}
l.Debug("Request Host:", string(buf[:n]), "Name:", name)
return name.HasOrContain(string(buf[:n]))
}
return false
}
}
type sl struct {
net.Listener
closed bool
@ -107,11 +125,19 @@ func (s *ServerListener) StartServer(name string) {
server.Renew()
}
if server.l == nil {
server.l = &sl{
Listener: s.listener.Match(makeMatcher(serverName, s)),
if server.Conf.EnableSSL {
server.l = &sl{Listener: s.listener.Match(makeSSLMatcher(serverName, s)), closed: false}
} else {
server.l = &sl{Listener: s.listener.Match(makeMatcher(serverName, s)), closed: false}
}
} else {
server.l.Listener = s.listener.Match(makeMatcher(serverName, s))
if server.Conf.EnableSSL {
server.l.Listener = s.listener.Match(makeSSLMatcher(serverName, s))
} else {
server.l.Listener = s.listener.Match(makeMatcher(serverName, s))
}
}
if server.Conf.EnableSSL {