""" Session helper SPDX - License - Identifier: LGPL - 3.0 - or -later Copyright © 2022 Project Author name guillermo.gutierrezmorote@concordia.ca """ import uuid import datetime import time sessions = {} begin_time = None swagger_data = None city = None greenery_catalog = None construction_catalog = None usage_catalog = None debug_mode = False def expired_sessions_collector(session_timeout_duration): """ Goes through each session in sessions and removes expired session(s) """ while True: if bool(sessions): for _session in list(sessions): _expire = datetime.datetime.strptime(sessions[session]['expire'], '%Y-%m-%d %H:%M:%S.%f') if _expire < datetime.datetime.now(): print("session with session_id: ", session, "expired.") del sessions[session] time.sleep(60 * int(session_timeout_duration)) def _validate_session(session_id, token, application_uuid): """ Checks if session is valid """ try: _session = session(session_id) if debug_mode: token = _session['token'] return bool(_session) and (_session['token'] == token) and _session['application_uuid'] == application_uuid except KeyError: return False def remove_session(session_id, token, application_uuid): """ Remove a session from the sessions array """ if _validate_session(session_id, token, application_uuid): del sessions[session_id] return True return False def refresh_session(session_id, token, application_uuid): """ Validate and extend current session :return: valid session """ if _validate_session(session_id, token, application_uuid): sessions[session_id]['expire'] = str(datetime.datetime.now() + datetime.timedelta(minutes=5)) sessions[session_id]['token'] = str(uuid.uuid4()) return session(session_id) return None def active_session(session_id, token, application_uuid): _is_valid = _validate_session(session_id=session_id, token=token, application_uuid=application_uuid) if _is_valid: refresh_session(session_id, token, application_uuid) return _is_valid def session(session_id) -> {}: return sessions[session_id]