diff --git a/app/api/user.py b/app/api/user.py index 118ecd7a60903481b7d77569046893b30c085714..75937870b8755b9e3f30ecc30613f9efcf693164 100644 --- a/app/api/user.py +++ b/app/api/user.py @@ -11,7 +11,7 @@ This module implements the user API. """ from flask import current_app, Blueprint, jsonify, request from flask_ldap3_login import AuthenticationResponseStatus -from flask_jwt_extended import jwt_required +from flask_jwt_extended import jwt_required, get_current_user from ..extensions import ldap_manager from ..decorators import jwt_groups_accepted from .. import utils, tokens, models @@ -31,6 +31,17 @@ def get_users(): order_by=models.User.username) +@bp.route('/profile') +@jwt_required +def get_user_profile(): + """Return the current user profile + + .. :quickref: User; Get current user profile + """ + user = get_current_user() + return jsonify(user.to_dict()), 200 + + @bp.route('/users', methods=['POST']) @jwt_required @jwt_groups_accepted('admin') diff --git a/tests/functional/test_api.py b/tests/functional/test_api.py index e725def62f172971ea3acd202177111882e68d86..e81cd86e7cd5d4200c0be6d3ab985294245d39a9 100644 --- a/tests/functional/test_api.py +++ b/tests/functional/test_api.py @@ -754,3 +754,13 @@ def test_create_host(client, item_factory, user_token): # check that all items were created assert models.Host.query.count() == 2 + + +def test_get_user_profile(client, readonly_token): + response = get(client, f'{API_URL}/user/profile', token=readonly_token) + assert response.status_code == 200 + user = response.json + assert {'id', 'username', 'groups', 'email', 'display_name'} == set(user.keys()) + assert user['username'] == 'user_ro' + assert user['display_name'] == 'User RO' + assert user['email'] == 'user_ro@example.com'