2021-10-13 07:01:54 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"crypto/tls"
|
2022-04-12 06:48:09 +00:00
|
|
|
"errors"
|
2021-10-13 07:01:54 +00:00
|
|
|
"net"
|
|
|
|
"net/http"
|
|
|
|
|
|
|
|
"tailscale.com/client/tailscale"
|
|
|
|
)
|
|
|
|
|
2022-10-07 14:19:18 +00:00
|
|
|
func (a *goBlog) getTCPListener(serverAddr string) (net.Listener, error) {
|
2021-10-13 07:01:54 +00:00
|
|
|
if a.tailscaleEnabled() {
|
|
|
|
// Tailscale listener
|
2022-10-07 14:19:18 +00:00
|
|
|
return a.getTailscaleListener(serverAddr)
|
|
|
|
} else if serverAddr == ":443" && a.cfg.Server.PublicHTTPS {
|
2022-04-12 06:48:09 +00:00
|
|
|
m := a.getAutocertManager()
|
|
|
|
if m == nil {
|
|
|
|
return nil, errors.New("autocert not initialized")
|
2021-10-13 07:01:54 +00:00
|
|
|
}
|
2022-04-12 06:48:09 +00:00
|
|
|
return a.getAutocertManager().Listener(), nil
|
2022-10-07 14:19:18 +00:00
|
|
|
} else if serverAddr == ":443" && a.cfg.Server.TailscaleHTTPS {
|
2021-10-13 07:01:54 +00:00
|
|
|
// Listener with Tailscale TLS config
|
2022-10-07 14:19:18 +00:00
|
|
|
ln, err := net.Listen("tcp", serverAddr)
|
2021-10-13 07:01:54 +00:00
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
2022-06-07 18:39:11 +00:00
|
|
|
tailscaleLC := &tailscale.LocalClient{}
|
2021-10-13 07:01:54 +00:00
|
|
|
return tls.NewListener(ln, &tls.Config{
|
2022-06-07 18:39:11 +00:00
|
|
|
GetCertificate: tailscaleLC.GetCertificate,
|
2022-02-23 11:24:11 +00:00
|
|
|
MinVersion: tls.VersionTLS12,
|
2021-10-13 07:01:54 +00:00
|
|
|
}), nil
|
|
|
|
} else {
|
|
|
|
// Default
|
2022-10-07 14:19:18 +00:00
|
|
|
return net.Listen("tcp", serverAddr)
|
2021-10-13 07:01:54 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (a *goBlog) listenAndServe(s *http.Server) error {
|
2022-10-07 14:19:18 +00:00
|
|
|
listener, err := a.getTCPListener(s.Addr)
|
2021-10-13 07:01:54 +00:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
return s.Serve(listener)
|
|
|
|
}
|