fix(proxy): use parse-time {$SHARE_KEY} in share_gate instead of runtime placeholder
Deploy Caddyfile to valhalla / deploy (push) Successful in 44s
Deploy Caddyfile to valhalla / deploy (push) Successful in 44s
{env.SHARE_KEY} is not resolved by Caddy's query matcher or CEL expression at
request time — the literal placeholder string was compared against the URL key,
causing every external request to fall through to 403. {$SHARE_KEY} is
substituted by the Caddyfile adapter at reload/start, baking the literal key
value into the compiled config.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
bf8caccd88
commit
d654e6df90
@@ -36,22 +36,27 @@
|
||||
remote_ip 192.168.1.0/24 172.16.0.0/12 100.64.0.0/10 127.0.0.1
|
||||
}
|
||||
|
||||
# Shared-link gate — external users visit ?k={$SHARE_KEY} once to get a 30-day cookie.
|
||||
# Shared-link gate — external users visit ?k=<SHARE_KEY> once to get a 30-day cookie.
|
||||
# Internal IPs and tailnet clients pass through unconditionally.
|
||||
# Usage: import share_gate (replaces import internal_only on shared services)
|
||||
# Uses {$SHARE_KEY} (parse-time substitution) — baked in at caddy reload/start when the
|
||||
# env var is set. Rotate: update SHARE_KEY in stack.env, push → Portainer redeploys → key changes.
|
||||
(share_gate) {
|
||||
@external not remote_ip 192.168.1.0/24 172.16.0.0/12 100.64.0.0/10 127.0.0.1
|
||||
handle @external {
|
||||
route {
|
||||
@has_key query k={$SHARE_KEY}
|
||||
handle @has_key {
|
||||
header Set-Cookie "share_access={$SHARE_KEY}; Path=/; Max-Age=2592000; HttpOnly; Secure; SameSite=Strict"
|
||||
redir {http.request.uri.path} 302
|
||||
}
|
||||
|
||||
@deny_external {
|
||||
not remote_ip 192.168.1.0/24 172.16.0.0/12 100.64.0.0/10 127.0.0.1
|
||||
not expression `{http.request.cookie.share_access} == "{$SHARE_KEY}"`
|
||||
@has_cookie expression `{http.request.cookie.share_access} == "{$SHARE_KEY}"`
|
||||
handle @has_cookie {
|
||||
}
|
||||
handle {
|
||||
respond "Access denied" 403
|
||||
}
|
||||
}
|
||||
respond @deny_external "Access denied" 403
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user