Files
app/backend/tests/test_access_log.py

81 lines
2.5 KiB
Python

"""A credential in a query string or a hook's path stays out of uvicorn's request lines."""
import logging
import fluksio.main # noqa: F401 - installs the filter
def test_a_token_in_the_query_is_not_logged() -> None:
records: list[logging.LogRecord] = []
handler = logging.Handler()
handler.emit = records.append # type: ignore[method-assign]
log = logging.getLogger("uvicorn.error")
level = log.level
log.addHandler(handler)
log.setLevel(logging.INFO)
try:
log.info(
'%s - "WebSocket %s" [accepted]',
"192.0.2.1:0",
"/api/v1/flows/ws?token=s3cr3t&x=1",
)
finally:
log.removeHandler(handler)
log.setLevel(level)
assert [record.getMessage() for record in records] == [
'192.0.2.1:0 - "WebSocket /api/v1/flows/ws?token=***&x=1" [accepted]'
]
def test_the_pairing_secret_is_not_logged() -> None:
records: list[logging.LogRecord] = []
handler = logging.Handler()
handler.emit = records.append # type: ignore[method-assign]
log = logging.getLogger("uvicorn.access")
level = log.level
log.addHandler(handler)
log.setLevel(logging.INFO)
try:
log.info(
'%s - "%s %s HTTP/%s" %d',
"192.0.2.1:0",
"GET",
"/api/v1/devices/pair/ABCD2345?secret=s3cr3t",
"1.1",
202,
)
finally:
log.removeHandler(handler)
log.setLevel(level)
assert [record.getMessage() for record in records] == [
'192.0.2.1:0 - "GET /api/v1/devices/pair/ABCD2345?secret=*** HTTP/1.1" 202'
]
def test_a_hooks_secret_is_not_logged() -> None:
records: list[logging.LogRecord] = []
handler = logging.Handler()
handler.emit = records.append # type: ignore[method-assign]
log = logging.getLogger("uvicorn.access")
level = log.level
log.addHandler(handler)
log.setLevel(logging.INFO)
try:
for path in (
"/hooks/home/tick/s3cr3t",
"/hooks/home/a/b/s3cr3t?x=1",
"/hooks/home//s3cr3t",
):
log.info('%s - "%s %s HTTP/%s" %d', "192.0.2.1:0", "POST", path, "1.1", 202)
finally:
log.removeHandler(handler)
log.setLevel(level)
assert [record.getMessage() for record in records] == [
'192.0.2.1:0 - "POST /hooks/home/tick/*** HTTP/1.1" 202',
'192.0.2.1:0 - "POST /hooks/home/a/b/***?x=1 HTTP/1.1" 202',
'192.0.2.1:0 - "POST /hooks/home//*** HTTP/1.1" 202',
]