diff --git a/app.py b/app.py index 4732e30..fdd505f 100644 --- a/app.py +++ b/app.py @@ -59,9 +59,19 @@ class Config: # ============================================================ log_level = logging.DEBUG if os.getenv("DEBUG", "false").lower() == "true" else logging.INFO -logging.basicConfig(level=log_level) +logging.basicConfig( + level=log_level, + format="%(message)s" +) + +# 🔇 HTTP Noise entfernen logging.getLogger("werkzeug").setLevel(logging.ERROR) +logging.getLogger("urllib3").setLevel(logging.WARNING) + +# 🔇 Gunicorn Access Logs entfernen +logging.getLogger("gunicorn.access").setLevel(logging.WARNING) + logger = logging.getLogger("matrix-interceptor") def now_iso(): @@ -73,7 +83,7 @@ def log_event(event: str, **kwargs): logger.info(f"{base} {details}") def debug_log(title, data): - if config.debug: + if os.getenv("DEBUG", "false").lower() == "true": logger.debug(f"{title}: {json.dumps(data, default=str)}") # ============================================================ @@ -96,7 +106,7 @@ RATE_LIMIT = defaultdict(list) METRICS = defaultdict(int) CACHE_FILE = "/app/cache/known_users.json" -CACHE_DIRTY = False +CACHE_DIRTY = True # ============================================================ # CACHE HANDLING @@ -382,19 +392,32 @@ def invite(room_id, event_id): if domain in config.domain_whitelist: remember_user(sender) - return forward_request( + METRICS["invite_allowed"] += 1 + return forward_request(...) "PUT", f"{config.tuwunel_url}/_matrix/federation/v2/invite/{room_id}/{event_id}", request.headers, payload ) - if config.block_external_dms and is_external(sender): + is_dm = is_likely_dm_event(event) + + if config.block_external_dms and is_dm and is_external(sender): if not is_known_user(sender): + # 🔥 fallback fix if is_user_in_local_rooms(sender): remember_user(sender) + METRICS["invite_allowed"] += 1 + + return forward_request( + "PUT", + f"{config.tuwunel_url}/_matrix/federation/v2/invite/{room_id}/{event_id}", + request.headers, + payload + ) + else: METRICS["invite_blocked"] += 1 log_event(