Skip to content

Commit 815ec70

Browse files
michaelmcneesclaude
andcommitted
fix: sslmode=prefer warning for non-loopback hosts, prefix nav globals
- Warn at startup when database URL uses sslmode=prefer with a non-loopback host (localhost/127.0.0.1/::1 are excluded) - Prefix inline script globals in Nav.astro (_mantleNavRetries, _mantleDeferInitNav) to avoid collisions Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 9b08941 commit 815ec70

2 files changed

Lines changed: 25 additions & 10 deletions

File tree

internal/config/config.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import (
55
"crypto/rand"
66
"encoding/hex"
77
"fmt"
8+
"log"
9+
"net/url"
810
"os"
911
"time"
1012

@@ -231,6 +233,19 @@ func Load(cmd *cobra.Command) (*Config, error) {
231233
return nil, err
232234
}
233235

236+
// Warn if database URL uses sslmode=prefer on a non-loopback host.
237+
if dbURL := cfg.Database.URL; dbURL != "" {
238+
if parsed, err := url.Parse(dbURL); err == nil {
239+
host := parsed.Hostname()
240+
if host != "localhost" && host != "127.0.0.1" && host != "::1" {
241+
q := parsed.Query()
242+
if q.Get("sslmode") == "prefer" {
243+
log.Printf("WARNING: database URL uses sslmode=prefer for non-loopback host %q; consider sslmode=require for production", host)
244+
}
245+
}
246+
}
247+
}
248+
234249
// Generate default NodeID if not set.
235250
// Format: hostname:pid:random8chars — the random suffix ensures uniqueness
236251
// across Kubernetes container restarts where PID 1 is common.

site/src/components/Nav.astro

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -102,21 +102,21 @@ function initNav() {
102102
}
103103
// Defer init until sidebar DOM exists (Nav renders before DocsSidebar).
104104
// Bail after a few frames if sidebar never appears (non-docs pages).
105-
var _navRetries = 0;
106-
var _navMaxRetries = 10;
107-
function deferInitNav() {
105+
var _mantleNavRetries = 0;
106+
var _mantleNavMaxRetries = 10;
107+
function _mantleDeferInitNav() {
108108
if (document.getElementById('docs-sidebar-mobile')) {
109109
initNav();
110-
} else if (_navRetries < _navMaxRetries) {
111-
_navRetries++;
112-
requestAnimationFrame(deferInitNav);
110+
} else if (_mantleNavRetries < _mantleNavMaxRetries) {
111+
_mantleNavRetries++;
112+
requestAnimationFrame(_mantleDeferInitNav);
113113
}
114114
// else: sidebar doesn't exist on this page — stop trying
115115
}
116-
_navRetries = 0;
117-
deferInitNav();
116+
_mantleNavRetries = 0;
117+
_mantleDeferInitNav();
118118
document.addEventListener('astro:after-swap', function() {
119-
_navRetries = 0;
120-
deferInitNav();
119+
_mantleNavRetries = 0;
120+
_mantleDeferInitNav();
121121
});
122122
</script>

0 commit comments

Comments
 (0)