""" Authentication api """ __author__ = '@tormakris' __copyright__ = "Copyright 2020, onSpot Team" __module_name__ = "loginapi" __version__text__ = "1" import uuid import musicbrainzngs from flask import request, current_app, abort from flaskaddons.fred import flaskred from resources.userstoreresource import UserStoreResource from schemas.userschema import UserSchema class LoginApi(UserStoreResource): userschema = UserSchema(many=False) def post(self): """ See: https://swagger.kmlabz.com/?urls.primaryName=onSpot%20Backend#/backend/logon """ body = request.get_json() try: userobj = self.userschema.load(body) except Exception as e: current_app.logger.warning(e) abort(417, "invalid json schema") try: musicbrainzngs.auth(userobj['name'], userobj['password']) musicbrainzngs.get_collections() musicbrainzngs.auth(None, None) except Exception as e: current_app.logger.warning(e) abort(401, "login denied to musicbrainz") self.encryptor.store(body) token = str(uuid.uuid4()) flaskred.set(token, userobj['name'].encode('UTF-8')) return { 'token': token }, 200 def delete(self): """ See: https://swagger.kmlabz.com/?urls.primaryName=onSpot%20Backend#/backend/logoff """ try: flaskred.delete(flaskred.get(request.headers.get('Authorization')).decode('UTF-8')) flaskred.delete(request.headers.get('Authorization')) except Exception as e: current_app.logger.warning(e) abort(401, "unauthorized") return "", 204