from flask_httpauth import HTTPBasicAuth, HTTPTokenAuth from sqlalchemy import or_ from werkzeug.http import HTTP_STATUS_CODES from ..models import User basic_auth = HTTPBasicAuth() token_auth = HTTPTokenAuth() @basic_auth.verify_password def verify_password(email_or_username, password): user = User.query.filter(or_(User.username == email_or_username, User.email == email_or_username.lower())).first() if user and user.verify_password(password): return user @basic_auth.error_handler def basic_auth_error(status): return {'error': HTTP_STATUS_CODES.get(status, 'Unknown error')}, status @token_auth.verify_token def verify_token(token): return User.check_token(token) if token else None @token_auth.error_handler def token_auth_error(status): return {'error': HTTP_STATUS_CODES.get(status, 'Unknown error')}, status