from typing import Optional from flask import blueprints from flask import make_response from flask import request from flask_api import status from flask_login import login_user from monsun_backend import error from monsun_backend import marshmallow_schemas from monsun_backend import models bp = blueprints.Blueprint("login", __name__) @bp.route( rule="/login", methods=["POST"], ) def login(): email_: Optional[str] = request.form.get("email") if email_ is None: raise error.BadRequest("email is missing") user_: models.User = models.User.query.filter_by(email=email_).first() if not user_: raise error.BadRequest("User does not exist") if user_.check_password(password=request.form.get("password")): if login_user(user_): return make_response( marshmallow_schemas.user_schema.jsonify(user_), status.HTTP_200_OK, ) else: # this shouldn't happen, but one never knows... raise error.InternalServerError("Could not login user") else: raise error.Unauthorized("Password is incorrect")