ADDED:
* The ability to show both IPv4 and IPv6 addresses (if the client has
  dual-stack and either the server does as well or a separate ClientInfo
  is running on the "other" net family).
This commit is contained in:
brent saner
2025-12-13 04:19:05 -05:00
parent eb5c44e1c3
commit 9f97fcaf81
12 changed files with 244 additions and 93 deletions

View File

@@ -46,6 +46,7 @@ func NewClient(uaStr string) (r *R00tClient, err error) {
func NewServer(log logging.Logger, cliArgs *args.Args) (srv *Server, err error) {
var s Server
var origin string
var udsSockPerms args.UdsPerms
if log == nil {
@@ -62,6 +63,7 @@ func NewServer(log logging.Logger, cliArgs *args.Args) (srv *Server, err error)
args: cliArgs,
mux: http.NewServeMux(),
sock: nil,
corsOrigins: nil,
reloadChan: make(chan os.Signal),
stopChan: make(chan os.Signal),
}
@@ -73,6 +75,42 @@ func NewServer(log logging.Logger, cliArgs *args.Args) (srv *Server, err error)
s.mux.HandleFunc("/usage.html", s.handleUsage)
s.mux.HandleFunc("/favicon.ico", s.explicit404)
if cliArgs.CORS != nil && len(cliArgs.CORS) > 0 {
if s.corsOrigins == nil {
s.corsOrigins = make(map[string]struct{})
}
for _, origin = range cliArgs.CORS {
s.corsOrigins[strings.ToLower(origin)] = struct{}{}
}
}
if cliArgs.V4Url != nil {
if s.v4Url, err = url.Parse(*cliArgs.V4Url); err != nil {
s.log.Err("server.NewServer: Failed to parse IPv4 URI '%s': %v", *cliArgs.V4Url, err)
return
}
if s.corsOrigins == nil {
s.corsOrigins = make(map[string]struct{})
}
origin = strings.ToLower(fmt.Sprintf("%s://%s", s.v4Url.Scheme, s.v4Url.Host))
s.corsOrigins[origin] = struct{}{}
}
if cliArgs.V6Url != nil {
if s.v6Url, err = url.Parse(*cliArgs.V6Url); err != nil {
s.log.Err("server.NewServer: Failed to parse IPv6 URI '%s': %v", *cliArgs.V6Url, err)
return
}
if s.corsOrigins == nil {
s.corsOrigins = make(map[string]struct{})
}
origin = strings.ToLower(fmt.Sprintf("%s://%s", s.v6Url.Scheme, s.v6Url.Host))
s.corsOrigins[origin] = struct{}{}
}
if s.corsOrigins != nil {
s.log.Debug("server.NewServer: CORS origins: %#v", s.corsOrigins)
}
if s.listenUri, err = url.Parse(cliArgs.Listen.Listen); err != nil {
s.log.Err("server.NewServer: Failed to parse listener URI: %v", err)
return