"feat(server): 添加SSL匹配器并支持HTTPS服务器启动逻辑"
This commit is contained in:
parent
84960de4a6
commit
eecfc51c1e
|
@ -51,3 +51,19 @@ func (s *Strings) HasOrContainPrefix(value string) bool {
|
||||||
return false
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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 {
|
type sl struct {
|
||||||
net.Listener
|
net.Listener
|
||||||
closed bool
|
closed bool
|
||||||
|
@ -107,11 +125,19 @@ func (s *ServerListener) StartServer(name string) {
|
||||||
server.Renew()
|
server.Renew()
|
||||||
}
|
}
|
||||||
if server.l == nil {
|
if server.l == nil {
|
||||||
server.l = &sl{
|
if server.Conf.EnableSSL {
|
||||||
Listener: s.listener.Match(makeMatcher(serverName, s)),
|
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 {
|
} 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 {
|
if server.Conf.EnableSSL {
|
||||||
|
|
Loading…
Reference in New Issue