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

@@ -3,24 +3,24 @@ package server
import (
`encoding/json`
`encoding/xml`
"errors"
"fmt"
"net"
"net/http"
`errors`
`fmt`
`net`
`net/http`
`net/http/fcgi`
"net/netip"
"net/url"
"os"
"os/signal"
"strings"
"sync"
`net/netip`
`net/url`
`os`
`os/signal`
`strings`
`sync`
`syscall`
sysd "github.com/coreos/go-systemd/daemon"
"github.com/davecgh/go-spew/spew"
sysd `github.com/coreos/go-systemd/daemon`
`github.com/davecgh/go-spew/spew`
`github.com/goccy/go-yaml`
`r00t2.io/clientinfo/version`
"r00t2.io/goutils/multierr"
`r00t2.io/goutils/multierr`
)
// Close cleanly closes any remnants of a Server. Stop should be used instead to cleanly shut down; this is a little more aggressive.
@@ -267,8 +267,10 @@ func (s *Server) explicit404(resp http.ResponseWriter, req *http.Request) {
func (s *Server) handleDefault(resp http.ResponseWriter, req *http.Request) {
var err error
var ok bool
var page *Page
var uas []string
var origin string
var reqdMimes []string
var parsedUA *R00tClient
var nAP netip.AddrPort
@@ -280,13 +282,20 @@ func (s *Server) handleDefault(resp http.ResponseWriter, req *http.Request) {
var outerFmt string = mediaJSON
s.log.Debug("server.Server.handleDefault: Handling request:\n%s", spew.Sdump(req))
origin = req.Header.Get("Origin")
if s.corsOrigins != nil && len(s.corsOrigins) != 0 && origin != "" {
if _, ok = s.corsOrigins[origin]; ok {
resp.Header().Set("Access-Control-Allow-Origin", origin)
resp.Header().Add("Vary", "Origin")
}
}
resp.Header().Set("ClientInfo-Version", version.Ver.Short())
page = &Page{
Info: &R00tInfo{
Client: nil,
IP: nil,
IP: netip.Addr{},
Port: 0,
Headers: XmlHeaders(req.Header),
Req: req,
@@ -301,7 +310,7 @@ func (s *Server) handleDefault(resp http.ResponseWriter, req *http.Request) {
// First the client info.
remAddrPort = req.RemoteAddr
if s.isHttp && req.Header.Get(httpRealHdr) != "" {
// TODO: WHitelist explicit reverse proxy addr(s)?
// TODO: Whitelist explicit reverse proxy addr(s)?
remAddrPort = req.Header.Get(httpRealHdr)
req.Header.Del(httpRealHdr)
}
@@ -315,7 +324,7 @@ func (s *Server) handleDefault(resp http.ResponseWriter, req *http.Request) {
*/
err = nil
}
page.Info.IP = net.ParseIP(nAP.Addr().String())
page.Info.IP = nAP.Addr().Unmap()
page.Info.Port = nAP.Port()
}
if req.URL != nil {
@@ -547,6 +556,8 @@ func (s *Server) renderHTML(page *Page, resp http.ResponseWriter) (err error) {
var b []byte
page.srv = s
if page.RawFmt != nil {
switch *page.RawFmt {
case mediaHTML: