from flask import Blueprint, request, session from sqlalchemy.exc import IntegrityError from webargs import fields, validate from webargs.flaskparser import parser, use_args from server import model from server.library.util import merge from server.database import db from server.response import respond, success from server.library.schema import schema from server.exc import NotFound, LoginError, AlreadyExists, InvalidEntity User = Blueprint("user", __name__) @User.route("/user", methods=["POST"]) @use_args(schema(model.User, only=("name", "email", "password"))) def create(details): try: user = model.User(**details) db.session.add(user) db.session.flush() # Log the user in session = user.login() db.session.commit() db.session.refresh(user) return respond({ "key": session.key, "user": user }) except NotFound as nf: raise InvalidEntity("Institution", "domain", nf.meta["fields"]["domain"]) except IntegrityError as ie: raise AlreadyExists("User", "email", details["email"])
from flask import Blueprint, request, session, g from webargs import fields, validate from webargs.flaskparser import use_kwargs from server.model import User from server.database import db from server.response import respond, success from server.exc import HttpException, NotFound from server.library.util import merge from server.library.schema import schema from server.middleware import authorize Auth = Blueprint("auth", __name__) userSchema = schema(User, only=("email", "password")) @Auth.route("/login", methods=["POST"]) @use_kwargs(userSchema) def auth(email, password): """Log a user in. POST { username: String, password: String } -> 200 { success: Boolean, session: String } -> 400 PUT { session } -> 200 # Session key valid -> 400 # Session key invalid """ try: # Get the user user = User.getBy(db.session, email=email) except NotFound: