"""Deativate inactive Auth0 users (who haven't logged in in some time).""" from datetime import datetime import json from dateutil import parser from disable_inactive_users import config from disable_inactive_users.connectors import logging from disable_inactive_users.models import ows_users logger = logging.get_current_logger() def user_is_inactive(last_login, created_at): """Check is a user has been inactive beyond day threshhold. Args: last_login: (str) ISO formatted datetime string created_at: (str) ISO formatted datetime string Returns: bool: Inactive or not """ test_date_str = last_login if not test_date_str: test_date_str = created_at test_date = parser.parse(test_date_str).replace(tzinfo=None) now = datetime.now() return (now - test_date).days >= config.INACTIVE_MAX_DAYS def main(json_input=None, context=None): """Run main.""" page = 0 total_users = 0 logger.info(msg='{} begin'.format(config.APPLICATION_NAME)) users_response = ows_users.get_all_inactive_users( page, config.USERS_PER_PAGE) if users_response.status != 200: raise Exception('Call to ows-users get-users failed: {}'.format( users_response.errors)) users = users_response.message while len(users): for user in users: logger.info(msg=json.dumps( {'action': 'user', 'user': user})) if not user.get('blocked'): if user_is_inactive( user.get('last_login'), user.get('created_at') ): if (config.ENVIRONMENT != 'prod'): block_response = ows_users.block_user(user.get('user_id')) # noqa logger.info(msg=json.dumps( {'action': 'block_auth0_user', 'user': user})) if block_response.status != 200 and config.ENVIRONMENT != 'prod': # noqa raise Exception( ( 'Call to ows-users block_auth0_user' ' failed {}'.format( block_response.errors or block_response.message))) # noqa logger.info(msg=json.dumps( {'action': 'page_complete', 'page': page})) page = page + 1 total_users += len(users) users_response = ows_users.get_all_inactive_users( page, config.USERS_PER_PAGE) if users_response.status != 200: raise Exception( ( 'Call to ows-users get-users' ' failed: {}'.format( users_response.errors))) users = users_response.message logger.info(msg='{} end. total users: {}'.format( config.APPLICATION_NAME, total_users)) if __name__ == '__main__': main()