#!/usr/bin/env python3 import uuid from flask_restful import Resource from flask import request, current_app, abort, request from fred import flaskred from config import ENCODED_SECRET_KEY from schemas import UserSchema, ListSchema, TrackSchema from aes_encrypt import EncryptedUserRedis """ Flask Restful endpoints """ __author__ = '@tormakris' __copyright__ = "Copyright 2020, onSpot Team" __module_name__ = "resources" __version__text__ = "1" INVALID_JSON_SCHEMA_MSG = "invalid json schema" class LoginApi(Resource): """ See: https://swagger.kmlabz.com/?urls.primaryName=onSpot%20Backend#/backend/logon """ userschema = UserSchema(many=False) encryptor = EncryptedUserRedis(ENCODED_SECRET_KEY) def post(self): body = request.get_json() try: userobj = self.userschema.load(body) except Exception as e: current_app.logger.warning(e) abort(417, INVALID_JSON_SCHEMA_MSG) self.encryptor.store(body) token = str(uuid.uuid4()) flaskred.set(token, userobj['name'].encode('UTF-8')) return { 'token': token }, 200 class LogoffApi(Resource): """ See: https://swagger.kmlabz.com/?urls.primaryName=onSpot%20Backend#/backend/logoff """ def delelete(self): flaskred.delete(flaskred.get(request.headers.get('Authorization')).decode('UTF-8')) flaskred.delete(request.headers.get('Authorization')) return 204 class MeApi(Resource): """ See: https://swagger.kmlabz.com/?urls.primaryName=onSpot%20Backend#/backend/currentUser """ def get(self): return {"name": flaskred.get(request.headers.get('Authorization')).decode('UTF-8')}, 200