From f8483b569d3fa985105fc7c9fc74a03787b9fd4a Mon Sep 17 00:00:00 2001 From: Benjamin Bertrand <benjamin.bertrand@esss.se> Date: Tue, 20 Feb 2018 10:45:25 +0100 Subject: [PATCH] Add API endpoint to retrieve current user profile --- app/api/user.py | 13 ++++++++++++- tests/functional/test_api.py | 10 ++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/app/api/user.py b/app/api/user.py index 118ecd7..7593787 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 e725def..e81cd86 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' -- GitLab