Spaces:
Running
Running
File size: 1,390 Bytes
d70361b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | """One-shot helper to clear the login-failure counter for a given IP.
Usage: python scripts/reset_login_throttle.py [ip]
Default IP is 127.0.0.1 (local dev). Deletes recent `login_failed` rows so
the IP throttle check_ip_throttle() no longer flags this address.
"""
import os
import sys
from pathlib import Path
HERE = Path(__file__).resolve().parent
ROOT = HERE.parent
sys.path.insert(0, str(ROOT))
os.chdir(ROOT)
try:
from dotenv import load_dotenv
load_dotenv(ROOT / ".env", override=True)
except ImportError:
pass
os.environ.setdefault("APP_MODE", "dda")
from app.database import SessionLocal # noqa: E402
from app.models import LoginHistory # noqa: E402
from app.dda.rbac.models import Role, Module, RolePermission, MenuItem # noqa: E402,F401 — needed for User.role_obj mapper resolution
def main() -> None:
ip = sys.argv[1] if len(sys.argv) > 1 else "127.0.0.1"
db = SessionLocal()
try:
deleted = (
db.query(LoginHistory)
.filter(
LoginHistory.ip_address == ip,
LoginHistory.event_type.in_(("login_failed", "login_blocked", "otp_request_failed")),
)
.delete(synchronize_session=False)
)
db.commit()
print(f"Cleared {deleted} throttle-relevant rows for IP {ip}.")
finally:
db.close()
if __name__ == "__main__":
main()
|