"""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', ]