forked from username/flaskpaste
perf: cache is_trusted_proxy result per request
This commit is contained in:
@@ -600,12 +600,20 @@ def require_auth() -> Response | None:
|
|||||||
|
|
||||||
|
|
||||||
def is_trusted_proxy() -> bool:
|
def is_trusted_proxy() -> bool:
|
||||||
"""Verify request comes from trusted reverse proxy via shared secret."""
|
"""Verify request comes from trusted reverse proxy via shared secret.
|
||||||
|
|
||||||
|
Result is cached per-request in Flask's g object for efficiency.
|
||||||
|
"""
|
||||||
|
if hasattr(g, "_trusted_proxy"):
|
||||||
|
return g._trusted_proxy
|
||||||
|
|
||||||
expected = current_app.config.get("TRUSTED_PROXY_SECRET", "")
|
expected = current_app.config.get("TRUSTED_PROXY_SECRET", "")
|
||||||
if not expected:
|
if not expected:
|
||||||
|
g._trusted_proxy = True
|
||||||
return True
|
return True
|
||||||
provided = request.headers.get("X-Proxy-Secret", "")
|
provided = request.headers.get("X-Proxy-Secret", "")
|
||||||
return hmac.compare_digest(expected, provided)
|
g._trusted_proxy = hmac.compare_digest(expected, provided)
|
||||||
|
return g._trusted_proxy
|
||||||
|
|
||||||
|
|
||||||
def get_client_fingerprint() -> str | None:
|
def get_client_fingerprint() -> str | None:
|
||||||
|
|||||||
Reference in New Issue
Block a user