Update app.py
This commit is contained in:
@@ -68,7 +68,6 @@ logging.getLogger("urllib3").setLevel(logging.WARNING)
|
||||
logging.getLogger("gunicorn.access").setLevel(logging.WARNING)
|
||||
|
||||
logger = logging.getLogger("matrix-interceptor")
|
||||
logger.propagate = False
|
||||
|
||||
def now_iso():
|
||||
return datetime.now(timezone.utc).isoformat()
|
||||
@@ -245,7 +244,7 @@ def seed_known_users():
|
||||
def periodic_seed():
|
||||
while True:
|
||||
seed_known_users()
|
||||
time.sleep(300)
|
||||
time.sleep(60)
|
||||
|
||||
# ============================================================
|
||||
# FALLBACK
|
||||
@@ -281,6 +280,21 @@ def is_user_in_local_rooms(user_id):
|
||||
logger.error(f"Fallback check failed: {e}")
|
||||
|
||||
return False
|
||||
|
||||
# ============================================================
|
||||
# FALLBACK RETRY (CRITICAL FOR CONSISTENCY)
|
||||
# ============================================================
|
||||
|
||||
def fallback_check_with_retry(user_id):
|
||||
"""
|
||||
Retry membership check to handle Matrix eventual consistency.
|
||||
User join may not be immediately visible via API.
|
||||
"""
|
||||
for _ in range(2): # 🔥 2 attempts
|
||||
if is_user_in_local_rooms(user_id):
|
||||
return True
|
||||
time.sleep(0.5) # 🔥 short delay
|
||||
return False
|
||||
|
||||
# ============================================================
|
||||
# DM DETECTION
|
||||
@@ -425,10 +439,12 @@ def invite(room_id, event_id):
|
||||
|
||||
if not is_known_user(sender):
|
||||
|
||||
if is_user_in_local_rooms(sender):
|
||||
if fallback_check_with_retry(sender):
|
||||
remember_user(sender)
|
||||
|
||||
with METRICS_LOCK:
|
||||
METRICS["invite_allowed"] += 1
|
||||
|
||||
return forward_request(
|
||||
"PUT",
|
||||
f"{config.tuwunel_url}/_matrix/federation/v2/invite/{room_id}/{event_id}",
|
||||
@@ -448,17 +464,17 @@ def invite(room_id, event_id):
|
||||
)
|
||||
return Response(status=403)
|
||||
|
||||
remember_user(sender)
|
||||
remember_user(sender)
|
||||
|
||||
with METRICS_LOCK:
|
||||
with METRICS_LOCK:
|
||||
METRICS["invite_allowed"] += 1
|
||||
|
||||
return forward_request(
|
||||
"PUT",
|
||||
f"{config.tuwunel_url}/_matrix/federation/v2/invite/{room_id}/{event_id}",
|
||||
request.headers,
|
||||
payload
|
||||
)
|
||||
return forward_request(
|
||||
"PUT",
|
||||
f"{config.tuwunel_url}/_matrix/federation/v2/invite/{room_id}/{event_id}",
|
||||
request.headers,
|
||||
payload
|
||||
)
|
||||
|
||||
# ============================================================
|
||||
# FORWARD
|
||||
|
||||
Reference in New Issue
Block a user