Detect impossible travel (defense)
pythonFlag session reuse from distant geos within an impossible time window.
from dataclasses import dataclass
from datetime import datetime
@dataclass
class Login:
user: str
city: str
lat: float
lon: float
at: datetime
def haversine_km(a: Login, b: Login) -> float:
# stub: plug in a real haversine if needed
return abs(a.lat - b.lat) * 111 + abs(a.lon - b.lon) * 85
def impossible_travel(prev: Login, curr: Login, max_kmh: float = 900) -> bool:
hours = (curr.at - prev.at).total_seconds() / 3600
if hours <= 0:
return True
return haversine_km(prev, curr) / hours > max_kmh