Skip to content

Commit 5bcf1d8

Browse files
committed
chore: upgrade goVirtualHost
1 parent b65b40c commit 5bcf1d8

File tree

7 files changed

+192
-197
lines changed

7 files changed

+192
-197
lines changed

src/goVirtualHost/listenable.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package goVirtualHost
2+
3+
import (
4+
"net"
5+
"os"
6+
)
7+
8+
func newListenable(proto, ip, port string) *listenable {
9+
return &listenable{
10+
proto: proto,
11+
ip: ip,
12+
port: port,
13+
}
14+
}
15+
16+
func (l *listenable) open() error {
17+
addr := l.ip + l.port
18+
if l.proto == "unix" {
19+
sockInfo, _ := os.Lstat(addr)
20+
if sockInfo != nil && (sockInfo.Mode()&os.ModeSocket != 0) {
21+
os.Remove(addr)
22+
}
23+
}
24+
25+
listener, err := net.Listen(l.proto, addr)
26+
l.listener = listener
27+
28+
if l.proto == "unix" && err == nil {
29+
os.Chmod(addr, 0660)
30+
}
31+
32+
return err
33+
}
34+
35+
func (l *listenable) close() error {
36+
if l.listener == nil {
37+
return nil
38+
}
39+
40+
err := l.listener.Close()
41+
l.listener = nil
42+
return err
43+
}

src/goVirtualHost/listeners.go renamed to src/goVirtualHost/listenables.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package goVirtualHost
22

3-
func (listeners listeners) find(proto, ip, port string) *listener {
4-
for _, l := range listeners {
3+
func (ls listenables) find(proto, ip, port string) *listenable {
4+
for _, l := range ls {
55
if l.proto == proto && l.ip == ip && l.port == port {
66
return l
77
}

src/goVirtualHost/listener.go

Lines changed: 0 additions & 45 deletions
This file was deleted.

src/goVirtualHost/serveable.go

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package goVirtualHost
2+
3+
import (
4+
"context"
5+
"crypto/tls"
6+
"net/http"
7+
)
8+
9+
func newServeable(useTLS bool) *serveable {
10+
return &serveable{
11+
useTLS: useTLS,
12+
vhosts: vhosts{},
13+
defaultVhost: nil,
14+
15+
server: &http.Server{},
16+
}
17+
}
18+
19+
func (serveable *serveable) ServeHTTP(w http.ResponseWriter, r *http.Request) {
20+
hostname := extractHostName(r.Host)
21+
for i := range serveable.vhosts {
22+
if serveable.vhosts[i].matchHostName(hostname) {
23+
serveable.vhosts[i].handler.ServeHTTP(w, r)
24+
return
25+
}
26+
}
27+
28+
serveable.defaultVhost.handler.ServeHTTP(w, r)
29+
}
30+
31+
func (serveable *serveable) getDefaultVhost() *vhost {
32+
for _, vh := range serveable.vhosts {
33+
if len(vh.hostNames) == 0 {
34+
return vh
35+
}
36+
}
37+
38+
if len(serveable.vhosts) > 0 {
39+
return serveable.vhosts[0]
40+
}
41+
42+
return nil
43+
}
44+
45+
func (serveable *serveable) updateDefaultVhost() {
46+
serveable.defaultVhost = serveable.getDefaultVhost()
47+
}
48+
49+
func (serveable *serveable) updateHttpServerTLSConfig() {
50+
if !serveable.useTLS {
51+
return
52+
}
53+
54+
certs := make([]tls.Certificate, 0, len(serveable.vhosts))
55+
56+
for _, vhost := range serveable.vhosts {
57+
certs = append(certs, vhost.certs...)
58+
}
59+
60+
serveable.server.TLSConfig = &tls.Config{
61+
Certificates: certs,
62+
}
63+
}
64+
65+
func (serveable *serveable) updateHttpServerHandler() {
66+
if len(serveable.vhosts) == 1 {
67+
serveable.server.Handler = serveable.defaultVhost.handler
68+
return
69+
}
70+
71+
serveable.server.Handler = serveable
72+
}
73+
74+
func (serveable *serveable) open(l *listenable) error {
75+
if serveable.useTLS {
76+
return serveable.server.ServeTLS(l.listener, "", "")
77+
} else {
78+
return serveable.server.Serve(l.listener)
79+
}
80+
}
81+
82+
func (serveable *serveable) shutdown(ctx context.Context) error {
83+
return serveable.server.Shutdown(ctx)
84+
}
85+
86+
func (serveable *serveable) close() error {
87+
return serveable.server.Close()
88+
}

src/goVirtualHost/server.go

Lines changed: 0 additions & 90 deletions
This file was deleted.

0 commit comments

Comments
 (0)