detached 133ff88

fix(auth): use X-Forwarded-Host for token realm URL

When behind proxy, use X-Forwarded-Host header for the Bearer realm
URL instead of the proxied Host header (localhost:5000).
commit
133ff8889f05ae5f2711df154e8d4732b1b2a256
author
brice · · 2026-01-15 12:54 UTC
parent
dbdcf7e
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
refs
tag: v2.2.3
1 file · +6 -1
M internal/adapters/in/http/middleware/auth.go +6 -1
@@ -382,6 +382,11 @@ func sendUnauthorized(w http.ResponseWriter, authType domain.AuthType, host stri
382382 switch authType {
383383 case domain.AuthTypeToken:
384384 // For token auth, indicate the token server endpoint
385+ // Use X-Forwarded-Host if behind proxy, otherwise use Host header
386+ realmHost := r.Header.Get("X-Forwarded-Host")
387+ if realmHost == "" {
388+ realmHost = host
389+ }
385390 // Detect scheme from request (TLS or X-Forwarded-Proto header)
386391 scheme := "http"
387392 if r.TLS != nil {
@@ -389,7 +394,7 @@ func sendUnauthorized(w http.ResponseWriter, authType domain.AuthType, host stri
389394 } else if proto := r.Header.Get("X-Forwarded-Proto"); proto != "" {
390395 scheme = proto
391396 }
392- realm := scheme + "://" + host + "/v2/token"
397+ realm := scheme + "://" + realmHost + "/v2/token"
393398 w.Header().Set("WWW-Authenticate", `Bearer realm="`+realm+`",service="gordon-registry"`)
394399 default:
395400 w.Header().Set("WWW-Authenticate", `Basic realm="Gordon Registry"`)
@@ -382,6 +382,11 @@ func sendUnauthorized(w http.ResponseWriter, authType domain.AuthType, host stri
382 switch authType {382 switch authType {
383 case domain.AuthTypeToken:383 case domain.AuthTypeToken:
384 // For token auth, indicate the token server endpoint384 // For token auth, indicate the token server endpoint
385+ // Use X-Forwarded-Host if behind proxy, otherwise use Host header
386+ realmHost := r.Header.Get("X-Forwarded-Host")
387+ if realmHost == "" {
388+ realmHost = host
389+ }
385 // Detect scheme from request (TLS or X-Forwarded-Proto header)390 // Detect scheme from request (TLS or X-Forwarded-Proto header)
386 scheme := "http"391 scheme := "http"
387 if r.TLS != nil {392 if r.TLS != nil {
@@ -389,7 +394,7 @@ func sendUnauthorized(w http.ResponseWriter, authType domain.AuthType, host stri
389 } else if proto := r.Header.Get("X-Forwarded-Proto"); proto != "" {394 } else if proto := r.Header.Get("X-Forwarded-Proto"); proto != "" {
390 scheme = proto395 scheme = proto
391 }396 }
392- realm := scheme + "://" + host + "/v2/token"397+ realm := scheme + "://" + realmHost + "/v2/token"
393 w.Header().Set("WWW-Authenticate", `Bearer realm="`+realm+`",service="gordon-registry"`)398 w.Header().Set("WWW-Authenticate", `Bearer realm="`+realm+`",service="gordon-registry"`)
394 default:399 default:
395 w.Header().Set("WWW-Authenticate", `Basic realm="Gordon Registry"`)400 w.Header().Set("WWW-Authenticate", `Basic realm="Gordon Registry"`)

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 7

Tags 106

↑↓ moveenter openesc close