"""Removing redundant byIncorrectLoginAttempt field from auth0 users app_metadata.""" from typing import List from auth0.v3.authentication import GetToken from auth0.v3.management import Auth0 from config import AUTH0_DOMAIN, AUTH0_CLIENT_ID, AUTH0_CLIENT_SECRET def auth0_client(domain: str, client_id: str, client_secret: str) -> Auth0: get_token = GetToken(domain) token = get_token.client_credentials(client_id, client_secret, 'https://{}/api/v2/'.format(domain)) management_api_token = token['access_token'] return Auth0(domain, management_api_token) def get_users(auth_client: Auth0, fields: List[str] = None, q: str = None) -> List[dict]: """Get users from auth0. :param auth_client: Auth0 client instance :param fields: fields names list to return data by :param q: Query in Lucene query string syntax :return list of users data. """ users_list = [] page = 0 while True: users_page = auth_client.users.list(fields=fields, q=q, page=page) users_list.extend(users_page["users"]) if users_page["start"] + users_page["limit"] >= users_page["total"]: break page += 1 return users_list def remove_by_incorrect_login_attempt_field_for_user(auth_client: Auth0, *, user_id: str, app_metadata: dict) -> dict: """Remove byIncorrectLoginAttempt from app_metadata of user identified by user_id. :param auth_client: Auth0 client instance :param user_id: id of user to update :param app_metadata: dict got by 'app_metadata' key from updating user data :return dict of updated user data """ block_reasons = app_metadata.get('blockReasons', {}) block_reasons.pop('byIncorrectLoginAttempt', None) metadata_update = { 'app_metadata': { 'blockReasons': block_reasons } } return auth_client.users.update(user_id, metadata_update) def index(): fields = ['user_id', 'app_metadata'] query = 'app_metadata.blockReasons.byIncorrectLoginAttempt:true OR app_metadata.blockReasons.byIncorrectLoginAttempt:false' auth0 = auth0_client(AUTH0_DOMAIN, AUTH0_CLIENT_ID, AUTH0_CLIENT_SECRET) users_list = get_users(auth0, fields=fields, q=query) for user in users_list: remove_by_incorrect_login_attempt_field_for_user(auth0, **user) if __name__ == "__main__": index()