api_v1.4/hub_api/session.py

71 lines
2.0 KiB
Python

"""
Session
SPDX - License - Identifier: LGPL - 3.0 - or -later
Copyright © 2022 Project Author name guillermo.gutierrezmorote@concordia.ca
"""
import json
import uuid
import datetime
from hub_api.helpers.session_helper import remove_session, active_session, sessions, refresh_session
import hub_api.helpers.session_helper as sh
from flask import request, Response
from flask_restful import Resource
class SessionStart(Resource):
def __init__(self):
pass
@staticmethod
def put():
ip = request.remote_addr
session = eval(request.headers.get('Session', None))
session_id = session['session_id']
active, i = active_session(session_id)
if active:
return Response(json.dumps({'error': 'invalid session'}), status=401)
if session_id == 'debug':
token = 'debug'
else:
token = str(uuid.uuid4())
expire = str(datetime.datetime.now() + datetime.timedelta(minutes=5))
session = {'session_id': session_id,
'token': token,
'expire': expire,
'ip': ip,
'city': sh.city.copy,
'greenery_catalog': sh.greenery_catalog,
'construction_catalog': sh.construction_catalog,
'usage_catalog': sh.usage_catalog,
'greenery_percentage': 0
}
response = {'session_id': session_id, 'token': token}
sessions.append(session)
return Response(json.dumps(response))
class SessionEnd(Resource):
def __init__(self):
pass
@staticmethod
def put():
if remove_session(request):
return Response(json.dumps({'result': 'succeed'}))
return Response(json.dumps({'error': 'invalid session'}), status=401)
class KeepSessionAlive(Resource):
def __init__(self):
pass
@staticmethod
def put():
session = refresh_session(request)
if session is None:
return Response(json.dumps({'error': 'invalid session'}), status=401)
headers = session.headers
response = {'result': 'succeed'}
return Response(json.dumps(response), headers=headers)