from datetime import datetime, timedelta from typing import Dict, List, Tuple from auth0_unblock_bruteforce_users.config import AUTH0_TIME_FORMAT, UNBLOCK_USER_IN def str_to_date(str_date: str) -> datetime: """Str to date. Args: str_date: Date as str. Returns: Datetime. """ return datetime.strptime(str_date, AUTH0_TIME_FORMAT) def get_dict_of_blocked_users(logs: Dict) -> List[Dict]: """get_dict_of_blocked_users. Get list of unique users with their user_name and last datetime when they were blocked Args: logs: Dict. logs from Auth0 Returns: list[dict]: """ data = [log for _, log in logs.items()] result = [] users = set() for record in data: if record["user_name"] not in users: users.add(record["user_name"]) result.append({"user_name": record["user_name"], "date": str_to_date(record["date"])}) return result def check_to_unblock(user_to_check: Dict) -> Tuple[str, bool]: """Str to date. Args: user_to_check: Dict. Returns: User: user_name of the user that is checked for unblock Bool: True or False whether he should be unblocked or not """ user_name, user_blocked_date = user_to_check["user_name"], user_to_check["date"] return user_name, (datetime.now() - user_blocked_date) > timedelta(minutes=UNBLOCK_USER_IN)