""" Routes - Users """ import datetime import json from flask import ( Blueprint, Response, request ) from flask_jwt_extended import create_access_token from database.models import UserModel from mongoengine.errors import ( FieldDoesNotExist, NotUniqueError, ValidationError ) from utils.errors import ( unauthorized_error, user_already_exists_error, internal_server_error, schema_validation_error ) auth = Blueprint("auth", __name__) @auth.route('/auth/token', methods=['POST']) def login(): """Receive data for login""" try: body = request.get_json() user = UserModel.objects.get(email=body.get('email')) authorized = user.check_password(body.get('password')) if not authorized: raise PermissionError("Check your password or email") expires = datetime.timedelta(days=7) access_token = create_access_token( identity=str(user.id), expires_delta=expires ) except PermissionError as e: return unauthorized_error(e) except (FieldDoesNotExist, ValidationError) as e: return schema_validation_error(e) except NotUniqueError as e: return user_already_exists_error(e) except Exception as e: return internal_server_error(e) else: return Response( response=json.dumps({ "token": access_token }), status=200, mimetype="applications/json" )