feat(caddy): serve Audiobookshelf outside the guard chain
The Audiobookshelf phone app could never sign in over the public name. The guard chain answered its /ping and /socket.io/ handshake with Anubis challenge HTML, so the app evaluated 'isInit' in e.data on a non-object and reported "Failed to contact server" while the container's request log recorded nothing at all. Anubis demands a JavaScript proof-of-work and the authentik outpost works from a session cookie: the chain is browser-only by construction, and a native client, a podcast RSS reader or an OPDS client cannot pass it. Audiobookshelf authenticates itself (local accounts plus authentik OIDC), so it joins jelly/plex/*arr in the exempt set: the public site block dials the container directly, keeping the X-Forwarded-Proto pin its OIDC origin check depends on, and the @audiobooks route leaves the post-auth listener so one host has one owner. The IdP rows that guarded the name go after this deploys, never before. tests/e2e/specs/14-guard.spec.ts loses audiobooks as a guarded target and gains the exemption assertion (app bytes to an anonymous client, the app's own 401, never challenge HTML); tests/anubis.bats pins the route shape.
This commit is contained in:
1 parent
6083903ccb
commit
2a48751283
3 files changed
+98
-45
No files matched your search
+11
-2
@@ -75,8 +75,10 @@ PY
|
||||
}
|
||||
|
||||
@test "exempt vhosts never route through anubis (auth, plex, own-auth apps)" {
|
||||
# The IdP login flow and git smart-HTTP clients cannot solve challenges;
|
||||
# these vhosts bypass the chain by construction.
|
||||
# The IdP login flow, git smart-HTTP clients, and any non-browser client (the
|
||||
# Audiobookshelf phone app, podcast RSS readers) cannot solve a challenge, so
|
||||
# services that enforce their own complete auth bypass the chain by
|
||||
# construction — the gate would answer their API calls with HTML.
|
||||
local block
|
||||
block=$(awk '/^auth\.franksdank\.cloud/,/^}/' "$CADDY")
|
||||
echo "$block" | grep -q 'reverse_proxy authentik-server:9000'
|
||||
@@ -84,4 +86,11 @@ PY
|
||||
block=$(awk '/^plex\.franksdank\.cloud/,/^}/' "$CADDY")
|
||||
echo "$block" | grep -q '192\.168\.0\.235:32400'
|
||||
! echo "$block" | grep -q anubis
|
||||
block=$(awk '/^audiobooks\.franksdank\.cloud/,/^}/' "$CADDY")
|
||||
echo "$block" | grep -q '192\.168\.0\.235:8000'
|
||||
! echo "$block" | grep -q anubis
|
||||
# The exemption is total: the post-auth listener must not still carry an
|
||||
# audiobooks route. A leftover handle there is a second owner for one host,
|
||||
# and its X-Forwarded-Proto pin would silently disagree with the edge.
|
||||
! grep -q '@audiobooks host audiobooks.franksdank.cloud' "$CADDY"
|
||||
}
|
||||
Reference in new issue
Block a user