package handlers import ( "strings" "github.com/labstack/echo/v5" ) // deriveBaseURL returns the base URL to use for constructing self-referential // links (OPDS feeds, sidecar config, etc.). It prefers the database-configured // base_url when available, and falls back to deriving the URL from the incoming // HTTP request (Host header + scheme), which is always reachable by the client. // // Proxy header support: X-Forwarded-Proto and X-Forwarded-Host are respected so // that deployments behind TLS-terminating reverse proxies advertise the correct // external URL. func deriveBaseURL(c *echo.Context, dbBaseURL string) string { if dbBaseURL != "" { return strings.TrimRight(dbBaseURL, "/") } scheme := "http" if c.Request().TLS != nil { scheme = "https" } if proto := c.Request().Header.Get("X-Forwarded-Proto"); proto != "" { scheme = proto } host := c.Request().Host if forwarded := c.Request().Header.Get("X-Forwarded-Host"); forwarded != "" { host = forwarded } return scheme + "://" + host }