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