diff --git a/README.md b/README.md index 61694f9b..3c245816 100644 --- a/README.md +++ b/README.md @@ -744,7 +744,7 @@ Some errors should be fixed during development however: for example error like ` All following endpoint return `401` status code if the API Key is incorrect. -### Authentication endpoints +### Account endpoints #### POST /api/auth/login @@ -845,7 +845,8 @@ Output: if api key is correct, return a json with user name and whether user is "name": "John Wick", "is_premium": false, "email": "john@wick.com", - "in_trial": true + "in_trial": true, + "profile_picture_url": "https://profile.png" } ``` diff --git a/app/api/views/user_info.py b/app/api/views/user_info.py index 76290526..7cfd201b 100644 --- a/app/api/views/user_info.py +++ b/app/api/views/user_info.py @@ -1,10 +1,31 @@ +import base64 +from io import BytesIO + from flask import jsonify, g, request, make_response from flask_login import logout_user +from app import s3 from app.api.base import api_bp, require_api_auth from app.config import SESSION_COOKIE_NAME from app.extensions import db -from app.models import ApiKey +from app.models import ApiKey, File, User +from app.utils import random_string + + +def user_to_dict(user: User) -> dict: + ret = { + "name": user.name, + "is_premium": user.is_premium(), + "email": user.email, + "in_trial": user.in_trial(), + } + + if user.profile_picture_id: + ret["profile_picture_url"] = user.profile_picture.get_url() + else: + ret["profile_picture_url"] = None + + return ret @api_bp.route("/user_info") @@ -15,14 +36,7 @@ def user_info(): """ user = g.user - return jsonify( - { - "name": user.name, - "is_premium": user.is_premium(), - "email": user.email, - "in_trial": user.in_trial(), - } - ) + return jsonify(user_to_dict(user)) @api_bp.route("/api_key", methods=["POST"]) diff --git a/tests/api/test_user_info.py b/tests/api/test_user_info.py index 3a61623b..6fb9419c 100644 --- a/tests/api/test_user_info.py +++ b/tests/api/test_user_info.py @@ -2,6 +2,7 @@ from flask import url_for from app.extensions import db from app.models import User, ApiKey +from tests.utils import login def test_user_in_trial(flask_client): @@ -24,6 +25,7 @@ def test_user_in_trial(flask_client): "name": "Test User", "email": "a@b.c", "in_trial": True, + "profile_picture_url": None, }