"""Interface for ows-users microservice.""" import datetime # noqa from disable_inactive_users import config from disable_inactive_users.connectors import logging from oto import response # noqa from owsrequest import request as requests # noqa logger = logging.get_current_logger() def block_user(user_id): """Block a user. Args: user_id: The Auth0 user_id to disable. Returns: dict: The updated user JSON || False. """ # Strip 'auth0|' prefix to eliminate hmac mismatch error, caused by # `|` character escaping. user_id = user_id.split('|')[1] users_response = requests.process( config.APPLICATION_NAME, config.ENVIRONMENT, 'PATCH', config.SERVICE_NAME_OWS_USERS, '/auth0/users/{}'.format(user_id), json={'blocked': True}) message = users_response.json() if users_response.status_code == 200: return response.Response(message=message) return response.Response( errors=message, status=users_response.status_code) def get_all_inactive_users(page, per_page): """Get inactive users who are not blocked. Args: page: (int) 0-indexed page of results. per_page: (int) Number of user objects per page Returns: list: The page of user results || False. """ query = [] # query last login > 90 days from today end_date = datetime.datetime.now() + datetime.timedelta( -1 * config.INACTIVE_MAX_DAYS) query = ( 'last_login:[* TO {}]' ' AND (blocked:false OR NOT _exists_:blocked)'.format( end_date.strftime('%Y-%m-%d'))) users_response = requests.process( config.APPLICATION_NAME, config.ENVIRONMENT, 'GET', config.SERVICE_NAME_OWS_USERS, '/auth0/users', params={ 'page': page, 'per_page': per_page, 'q': query}) if users_response.status_code == 500: return response.Response( errors=users_response.reason, status=users_response.status_code) message = users_response.json() if users_response.status_code == 200: return response.Response(message=message) return response.Response( errors=message, status=users_response.status_code)