fga-eps-mds/2020.2-Anunbis

View on GitHub
app/services/auth_services.py

Summary

Maintainability
A
0 mins
Test Coverage
from flask_jwt_extended import create_access_token, decode_token
from flask import current_app
from ..schemas.student_schema import StudentSchema
from ..schemas.professor_schema import ProfessorSchema
from datetime import timedelta
from ..ext.email import send_verify_email
from . import user_services


def auth_user(user_json):
    user_db = user_services.get(email=user_json.get("email"))
    if user_db and user_db.verify_password(user_json.get("password")):
        if user_db.is_verified() or current_app.config.get("MAIL_SUPPRESS_SEND"):
            return create_login(user_db)
        else:
            return {
                "message": "User's email not actived. Please, active your e-mail!"
            }, 203
    return {"message": "Email or Password invalid"}, 401


def create_login(user_db):
    access_token = create_access_token(
        identity=user_db,
        additional_claims={"is_student": not user_db.is_professor()},
    )
    schema = (
        ProfessorSchema(only=["reg_professor", "name", "email"])
        if user_db.is_professor()
        else StudentSchema(only=["reg_student", "name", "email", "id_course"])
    )
    return {
        "access_token": access_token,
        "message": "login accepted",
        "user": schema.dump(user_db),
    }, 200


def verify_email(user_db):
    token = create_email_token(user_db)
    send_verify_email(user_db, token)


def create_email_token(user_db):
    return create_access_token(identity=user_db, expires_delta=timedelta(days=1))


def resend_verify_email(user_db):
    if not user_db.is_verified():
        verify_email(user_db)
        return {"message": "Email successfully sent!"}, 200
    else:
        return {"message": "User's e-mail already verified"}, 203


def active_email_user(token_send):
    try:
        token_verified = decode_token(token_send)
        reg_user = token_verified.get("sub")
        user_db = user_services.get(reg=reg_user)
        user_db.active_user()
        user_db.save_changes()
    except Exception:
        return {"message": "Token invalid"}