API & Client - remove id in user data
This commit is contained in:
parent
2c3bc0f9bc
commit
9f487a4d68
@ -6,7 +6,7 @@ Authentication
|
|||||||
auth.register_user,
|
auth.register_user,
|
||||||
auth.login_user,
|
auth.login_user,
|
||||||
auth.logout_user,
|
auth.logout_user,
|
||||||
auth.get_user_status,
|
auth.get_authenticated_user_profile,
|
||||||
auth.edit_user,
|
auth.edit_user,
|
||||||
auth.edit_picture,
|
auth.edit_picture,
|
||||||
auth.del_picture
|
auth.del_picture
|
||||||
|
@ -316,7 +316,6 @@
|
|||||||
<span class="nt">"created_at"</span><span class="p">:</span> <span class="s2">"Sun, 14 Jul 2019 14:09:58 GMT"</span><span class="p">,</span>
|
<span class="nt">"created_at"</span><span class="p">:</span> <span class="s2">"Sun, 14 Jul 2019 14:09:58 GMT"</span><span class="p">,</span>
|
||||||
<span class="nt">"email"</span><span class="p">:</span> <span class="s2">"sam@example.com"</span><span class="p">,</span>
|
<span class="nt">"email"</span><span class="p">:</span> <span class="s2">"sam@example.com"</span><span class="p">,</span>
|
||||||
<span class="nt">"first_name"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
<span class="nt">"first_name"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span>
|
|
||||||
<span class="nt">"language"</span><span class="p">:</span> <span class="s2">"en"</span><span class="p">,</span>
|
<span class="nt">"language"</span><span class="p">:</span> <span class="s2">"en"</span><span class="p">,</span>
|
||||||
<span class="nt">"last_name"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
<span class="nt">"last_name"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||||
<span class="nt">"location"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
<span class="nt">"location"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||||
@ -379,7 +378,6 @@
|
|||||||
<span class="nt">"created_at"</span><span class="p">:</span> <span class="s2">"Sun, 14 Jul 2019 14:09:58 GMT"</span><span class="p">,</span>
|
<span class="nt">"created_at"</span><span class="p">:</span> <span class="s2">"Sun, 14 Jul 2019 14:09:58 GMT"</span><span class="p">,</span>
|
||||||
<span class="nt">"email"</span><span class="p">:</span> <span class="s2">"sam@example.com"</span><span class="p">,</span>
|
<span class="nt">"email"</span><span class="p">:</span> <span class="s2">"sam@example.com"</span><span class="p">,</span>
|
||||||
<span class="nt">"first_name"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
<span class="nt">"first_name"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span>
|
|
||||||
<span class="nt">"language"</span><span class="p">:</span> <span class="s2">"en"</span><span class="p">,</span>
|
<span class="nt">"language"</span><span class="p">:</span> <span class="s2">"en"</span><span class="p">,</span>
|
||||||
<span class="nt">"last_name"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
<span class="nt">"last_name"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||||
<span class="nt">"location"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
<span class="nt">"location"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||||
|
@ -148,7 +148,6 @@
|
|||||||
<span class="nt">"created_at"</span><span class="p">:</span> <span class="s2">"Sun, 14 Jul 2019 14:09:58 GMT"</span><span class="p">,</span>
|
<span class="nt">"created_at"</span><span class="p">:</span> <span class="s2">"Sun, 14 Jul 2019 14:09:58 GMT"</span><span class="p">,</span>
|
||||||
<span class="nt">"email"</span><span class="p">:</span> <span class="s2">"admin@example.com"</span><span class="p">,</span>
|
<span class="nt">"email"</span><span class="p">:</span> <span class="s2">"admin@example.com"</span><span class="p">,</span>
|
||||||
<span class="nt">"first_name"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
<span class="nt">"first_name"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
|
||||||
<span class="nt">"language"</span><span class="p">:</span> <span class="s2">"en"</span><span class="p">,</span>
|
<span class="nt">"language"</span><span class="p">:</span> <span class="s2">"en"</span><span class="p">,</span>
|
||||||
<span class="nt">"last_name"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
<span class="nt">"last_name"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||||
<span class="nt">"location"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
<span class="nt">"location"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||||
@ -172,7 +171,6 @@
|
|||||||
<span class="nt">"created_at"</span><span class="p">:</span> <span class="s2">"Sat, 20 Jul 2019 11:27:03 GMT"</span><span class="p">,</span>
|
<span class="nt">"created_at"</span><span class="p">:</span> <span class="s2">"Sat, 20 Jul 2019 11:27:03 GMT"</span><span class="p">,</span>
|
||||||
<span class="nt">"email"</span><span class="p">:</span> <span class="s2">"sam@example.com"</span><span class="p">,</span>
|
<span class="nt">"email"</span><span class="p">:</span> <span class="s2">"sam@example.com"</span><span class="p">,</span>
|
||||||
<span class="nt">"first_name"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
<span class="nt">"first_name"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span>
|
|
||||||
<span class="nt">"language"</span><span class="p">:</span> <span class="s2">"fr"</span><span class="p">,</span>
|
<span class="nt">"language"</span><span class="p">:</span> <span class="s2">"fr"</span><span class="p">,</span>
|
||||||
<span class="nt">"last_name"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
<span class="nt">"last_name"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||||
<span class="nt">"location"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
<span class="nt">"location"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||||
@ -221,7 +219,7 @@
|
|||||||
<code class="sig-name descname">GET </code><code class="sig-name descname">/api/users/</code><span class="sig-paren">(</span><em class="sig-param">user_name</em><span class="sig-paren">)</span><a class="headerlink" href="#get--api-users-(user_name)" title="Permalink to this definition">¶</a></dt>
|
<code class="sig-name descname">GET </code><code class="sig-name descname">/api/users/</code><span class="sig-paren">(</span><em class="sig-param">user_name</em><span class="sig-paren">)</span><a class="headerlink" href="#get--api-users-(user_name)" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>Get single user details</p>
|
<dd><p>Get single user details</p>
|
||||||
<p><strong>Example request</strong>:</p>
|
<p><strong>Example request</strong>:</p>
|
||||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">GET</span> <span class="nn">/api/users/1</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">GET</span> <span class="nn">/api/users/admin</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||||
<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
|
<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
@ -238,7 +236,6 @@
|
|||||||
<span class="nt">"created_at"</span><span class="p">:</span> <span class="s2">"Sun, 14 Jul 2019 14:09:58 GMT"</span><span class="p">,</span>
|
<span class="nt">"created_at"</span><span class="p">:</span> <span class="s2">"Sun, 14 Jul 2019 14:09:58 GMT"</span><span class="p">,</span>
|
||||||
<span class="nt">"email"</span><span class="p">:</span> <span class="s2">"admin@example.com"</span><span class="p">,</span>
|
<span class="nt">"email"</span><span class="p">:</span> <span class="s2">"admin@example.com"</span><span class="p">,</span>
|
||||||
<span class="nt">"first_name"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
<span class="nt">"first_name"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||||
<span class="nt">"id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
|
||||||
<span class="nt">"language"</span><span class="p">:</span> <span class="s2">"en"</span><span class="p">,</span>
|
<span class="nt">"language"</span><span class="p">:</span> <span class="s2">"en"</span><span class="p">,</span>
|
||||||
<span class="nt">"last_name"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
<span class="nt">"last_name"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||||
<span class="nt">"location"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
<span class="nt">"location"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||||
@ -291,11 +288,11 @@
|
|||||||
</dd></dl>
|
</dd></dl>
|
||||||
|
|
||||||
<dl class="get">
|
<dl class="get">
|
||||||
<dt id="get--api-users-(user_id)-picture">
|
<dt id="get--api-users-(user_name)-picture">
|
||||||
<code class="sig-name descname">GET </code><code class="sig-name descname">/api/users/</code><span class="sig-paren">(</span><em class="sig-param">user_id</em><span class="sig-paren">)</span><code class="sig-name descname">/picture</code><a class="headerlink" href="#get--api-users-(user_id)-picture" title="Permalink to this definition">¶</a></dt>
|
<code class="sig-name descname">GET </code><code class="sig-name descname">/api/users/</code><span class="sig-paren">(</span><em class="sig-param">user_name</em><span class="sig-paren">)</span><code class="sig-name descname">/picture</code><a class="headerlink" href="#get--api-users-(user_name)-picture" title="Permalink to this definition">¶</a></dt>
|
||||||
<dd><p>get user picture</p>
|
<dd><p>get user picture</p>
|
||||||
<p><strong>Example request</strong>:</p>
|
<p><strong>Example request</strong>:</p>
|
||||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">GET</span> <span class="nn">/api/users/1/picture</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">GET</span> <span class="nn">/api/users/admin/picture</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||||
<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
|
<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
@ -307,7 +304,7 @@
|
|||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Parameters</dt>
|
<dt class="field-odd">Parameters</dt>
|
||||||
<dd class="field-odd"><ul class="simple">
|
<dd class="field-odd"><ul class="simple">
|
||||||
<li><p><strong>user_id</strong> (<em>integer</em>) – user id</p></li>
|
<li><p><strong>user_name</strong> (<em>integer</em>) – user name</p></li>
|
||||||
</ul>
|
</ul>
|
||||||
</dd>
|
</dd>
|
||||||
<dt class="field-even">Status Codes</dt>
|
<dt class="field-even">Status Codes</dt>
|
||||||
|
@ -217,12 +217,12 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>
|
<td>
|
||||||
<a href="api/users.html#get--api-users-(user_id)-picture"><code class="xref">GET /api/users/(user_id)/picture</code></a></td><td>
|
<a href="api/users.html#get--api-users-(user_name)"><code class="xref">GET /api/users/(user_name)</code></a></td><td>
|
||||||
<em></em></td></tr>
|
<em></em></td></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>
|
<td>
|
||||||
<a href="api/users.html#get--api-users-(user_name)"><code class="xref">GET /api/users/(user_name)</code></a></td><td>
|
<a href="api/users.html#get--api-users-(user_name)-picture"><code class="xref">GET /api/users/(user_name)/picture</code></a></td><td>
|
||||||
<em></em></td></tr>
|
<em></em></td></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td></td>
|
<td></td>
|
||||||
|
BIN
docs/objects.inv
BIN
docs/objects.inv
Binary file not shown.
File diff suppressed because one or more lines are too long
@ -6,7 +6,7 @@ Authentication
|
|||||||
auth.register_user,
|
auth.register_user,
|
||||||
auth.login_user,
|
auth.login_user,
|
||||||
auth.logout_user,
|
auth.logout_user,
|
||||||
auth.get_user_status,
|
auth.get_authenticated_user_profile,
|
||||||
auth.edit_user,
|
auth.edit_user,
|
||||||
auth.edit_picture,
|
auth.edit_picture,
|
||||||
auth.del_picture
|
auth.del_picture
|
||||||
|
@ -261,7 +261,7 @@ def test_decode_auth_token(app, user_1):
|
|||||||
|
|
||||||
def test_user_no_picture(app, user_1):
|
def test_user_no_picture(app, user_1):
|
||||||
client = app.test_client()
|
client = app.test_client()
|
||||||
response = client.get('/api/users/1/picture')
|
response = client.get(f'/api/users/{user_1.username}/picture')
|
||||||
data = json.loads(response.data.decode())
|
data = json.loads(response.data.decode())
|
||||||
|
|
||||||
assert response.status_code == 404
|
assert response.status_code == 404
|
||||||
@ -271,7 +271,7 @@ def test_user_no_picture(app, user_1):
|
|||||||
|
|
||||||
def test_user_picture_no_user(app, user_1):
|
def test_user_picture_no_user(app, user_1):
|
||||||
client = app.test_client()
|
client = app.test_client()
|
||||||
response = client.get('/api/users/2/picture')
|
response = client.get('/api/users/not_existing/picture')
|
||||||
data = json.loads(response.data.decode())
|
data = json.loads(response.data.decode())
|
||||||
|
|
||||||
assert response.status_code == 404
|
assert response.status_code == 404
|
||||||
|
@ -2,7 +2,6 @@ def test_user_model(app, user_1):
|
|||||||
assert '<User \'test\'>' == str(user_1)
|
assert '<User \'test\'>' == str(user_1)
|
||||||
|
|
||||||
serialized_user = user_1.serialize()
|
serialized_user = user_1.serialize()
|
||||||
assert 1 == serialized_user['id']
|
|
||||||
assert 'test' == serialized_user['username']
|
assert 'test' == serialized_user['username']
|
||||||
assert 'created_at' in serialized_user
|
assert 'created_at' in serialized_user
|
||||||
assert serialized_user['admin'] is False
|
assert serialized_user['admin'] is False
|
||||||
|
@ -237,7 +237,7 @@ def login_user():
|
|||||||
|
|
||||||
@auth_blueprint.route('/auth/logout', methods=['GET'])
|
@auth_blueprint.route('/auth/logout', methods=['GET'])
|
||||||
@authenticate
|
@authenticate
|
||||||
def logout_user(user_id):
|
def logout_user(auth_user_id):
|
||||||
"""
|
"""
|
||||||
user logout
|
user logout
|
||||||
|
|
||||||
@ -285,7 +285,7 @@ def logout_user(user_id):
|
|||||||
if auth_header:
|
if auth_header:
|
||||||
auth_token = auth_header.split(" ")[1]
|
auth_token = auth_header.split(" ")[1]
|
||||||
resp = User.decode_auth_token(auth_token)
|
resp = User.decode_auth_token(auth_token)
|
||||||
if not isinstance(user_id, str):
|
if not isinstance(auth_user_id, str):
|
||||||
response_object = {
|
response_object = {
|
||||||
'status': 'success',
|
'status': 'success',
|
||||||
'message': 'Successfully logged out.',
|
'message': 'Successfully logged out.',
|
||||||
@ -304,7 +304,7 @@ def logout_user(user_id):
|
|||||||
|
|
||||||
@auth_blueprint.route('/auth/profile', methods=['GET'])
|
@auth_blueprint.route('/auth/profile', methods=['GET'])
|
||||||
@authenticate
|
@authenticate
|
||||||
def get_user_status(user_id):
|
def get_authenticated_user_profile(auth_user_id):
|
||||||
"""
|
"""
|
||||||
get authenticated user info
|
get authenticated user info
|
||||||
|
|
||||||
@ -330,7 +330,6 @@ def get_user_status(user_id):
|
|||||||
"created_at": "Sun, 14 Jul 2019 14:09:58 GMT",
|
"created_at": "Sun, 14 Jul 2019 14:09:58 GMT",
|
||||||
"email": "sam@example.com",
|
"email": "sam@example.com",
|
||||||
"first_name": null,
|
"first_name": null,
|
||||||
"id": 2,
|
|
||||||
"language": "en",
|
"language": "en",
|
||||||
"last_name": null,
|
"last_name": null,
|
||||||
"location": null,
|
"location": null,
|
||||||
@ -360,14 +359,14 @@ def get_user_status(user_id):
|
|||||||
- Invalid token. Please log in again.
|
- Invalid token. Please log in again.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
user = User.query.filter_by(id=user_id).first()
|
user = User.query.filter_by(id=auth_user_id).first()
|
||||||
response_object = {'status': 'success', 'data': user.serialize()}
|
response_object = {'status': 'success', 'data': user.serialize()}
|
||||||
return jsonify(response_object), 200
|
return jsonify(response_object), 200
|
||||||
|
|
||||||
|
|
||||||
@auth_blueprint.route('/auth/profile/edit', methods=['POST'])
|
@auth_blueprint.route('/auth/profile/edit', methods=['POST'])
|
||||||
@authenticate
|
@authenticate
|
||||||
def edit_user(user_id):
|
def edit_user(auth_user_id):
|
||||||
"""
|
"""
|
||||||
edit authenticated user
|
edit authenticated user
|
||||||
|
|
||||||
@ -393,7 +392,6 @@ def edit_user(user_id):
|
|||||||
"created_at": "Sun, 14 Jul 2019 14:09:58 GMT",
|
"created_at": "Sun, 14 Jul 2019 14:09:58 GMT",
|
||||||
"email": "sam@example.com",
|
"email": "sam@example.com",
|
||||||
"first_name": null,
|
"first_name": null,
|
||||||
"id": 2,
|
|
||||||
"language": "en",
|
"language": "en",
|
||||||
"last_name": null,
|
"last_name": null,
|
||||||
"location": null,
|
"location": null,
|
||||||
@ -476,7 +474,7 @@ def edit_user(user_id):
|
|||||||
).decode()
|
).decode()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
user = User.query.filter_by(id=user_id).first()
|
user = User.query.filter_by(id=auth_user_id).first()
|
||||||
user.first_name = first_name
|
user.first_name = first_name
|
||||||
user.last_name = last_name
|
user.last_name = last_name
|
||||||
user.bio = bio
|
user.bio = bio
|
||||||
@ -513,7 +511,7 @@ def edit_user(user_id):
|
|||||||
|
|
||||||
@auth_blueprint.route('/auth/picture', methods=['POST'])
|
@auth_blueprint.route('/auth/picture', methods=['POST'])
|
||||||
@authenticate
|
@authenticate
|
||||||
def edit_picture(user_id):
|
def edit_picture(auth_user_id):
|
||||||
"""
|
"""
|
||||||
update authenticated user picture
|
update authenticated user picture
|
||||||
|
|
||||||
@ -573,15 +571,17 @@ def edit_picture(user_id):
|
|||||||
file = request.files['file']
|
file = request.files['file']
|
||||||
filename = secure_filename(file.filename)
|
filename = secure_filename(file.filename)
|
||||||
dirpath = os.path.join(
|
dirpath = os.path.join(
|
||||||
current_app.config['UPLOAD_FOLDER'], 'pictures', str(user_id)
|
current_app.config['UPLOAD_FOLDER'], 'pictures', str(auth_user_id)
|
||||||
)
|
)
|
||||||
if not os.path.exists(dirpath):
|
if not os.path.exists(dirpath):
|
||||||
os.makedirs(dirpath)
|
os.makedirs(dirpath)
|
||||||
absolute_picture_path = os.path.join(dirpath, filename)
|
absolute_picture_path = os.path.join(dirpath, filename)
|
||||||
relative_picture_path = os.path.join('pictures', str(user_id), filename)
|
relative_picture_path = os.path.join(
|
||||||
|
'pictures', str(auth_user_id), filename
|
||||||
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
user = User.query.filter_by(id=user_id).first()
|
user = User.query.filter_by(id=auth_user_id).first()
|
||||||
if user.picture is not None:
|
if user.picture is not None:
|
||||||
old_picture_path = get_absolute_file_path(user.picture)
|
old_picture_path = get_absolute_file_path(user.picture)
|
||||||
if os.path.isfile(get_absolute_file_path(old_picture_path)):
|
if os.path.isfile(get_absolute_file_path(old_picture_path)):
|
||||||
@ -608,7 +608,7 @@ def edit_picture(user_id):
|
|||||||
|
|
||||||
@auth_blueprint.route('/auth/picture', methods=['DELETE'])
|
@auth_blueprint.route('/auth/picture', methods=['DELETE'])
|
||||||
@authenticate
|
@authenticate
|
||||||
def del_picture(user_id):
|
def del_picture(auth_user_id):
|
||||||
"""
|
"""
|
||||||
delete authenticated user picture
|
delete authenticated user picture
|
||||||
|
|
||||||
@ -637,7 +637,7 @@ def del_picture(user_id):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
user = User.query.filter_by(id=user_id).first()
|
user = User.query.filter_by(id=auth_user_id).first()
|
||||||
picture_path = get_absolute_file_path(user.picture)
|
picture_path = get_absolute_file_path(user.picture)
|
||||||
if os.path.isfile(picture_path):
|
if os.path.isfile(picture_path):
|
||||||
os.remove(picture_path)
|
os.remove(picture_path)
|
||||||
|
@ -110,7 +110,6 @@ class User(db.Model):
|
|||||||
.first()
|
.first()
|
||||||
)
|
)
|
||||||
return {
|
return {
|
||||||
'id': self.id,
|
|
||||||
'username': self.username,
|
'username': self.username,
|
||||||
'email': self.email,
|
'email': self.email,
|
||||||
'created_at': self.created_at,
|
'created_at': self.created_at,
|
||||||
|
@ -37,7 +37,6 @@ def get_users(auth_user_id):
|
|||||||
"created_at": "Sun, 14 Jul 2019 14:09:58 GMT",
|
"created_at": "Sun, 14 Jul 2019 14:09:58 GMT",
|
||||||
"email": "admin@example.com",
|
"email": "admin@example.com",
|
||||||
"first_name": null,
|
"first_name": null,
|
||||||
"id": 1,
|
|
||||||
"language": "en",
|
"language": "en",
|
||||||
"last_name": null,
|
"last_name": null,
|
||||||
"location": null,
|
"location": null,
|
||||||
@ -61,7 +60,6 @@ def get_users(auth_user_id):
|
|||||||
"created_at": "Sat, 20 Jul 2019 11:27:03 GMT",
|
"created_at": "Sat, 20 Jul 2019 11:27:03 GMT",
|
||||||
"email": "sam@example.com",
|
"email": "sam@example.com",
|
||||||
"first_name": null,
|
"first_name": null,
|
||||||
"id": 2,
|
|
||||||
"language": "fr",
|
"language": "fr",
|
||||||
"last_name": null,
|
"last_name": null,
|
||||||
"location": null,
|
"location": null,
|
||||||
@ -108,7 +106,7 @@ def get_single_user(auth_user_id, user_name):
|
|||||||
|
|
||||||
.. sourcecode:: http
|
.. sourcecode:: http
|
||||||
|
|
||||||
GET /api/users/1 HTTP/1.1
|
GET /api/users/admin HTTP/1.1
|
||||||
Content-Type: application/json
|
Content-Type: application/json
|
||||||
|
|
||||||
**Example response**:
|
**Example response**:
|
||||||
@ -127,7 +125,6 @@ def get_single_user(auth_user_id, user_name):
|
|||||||
"created_at": "Sun, 14 Jul 2019 14:09:58 GMT",
|
"created_at": "Sun, 14 Jul 2019 14:09:58 GMT",
|
||||||
"email": "admin@example.com",
|
"email": "admin@example.com",
|
||||||
"first_name": null,
|
"first_name": null,
|
||||||
"id": 1,
|
|
||||||
"language": "en",
|
"language": "en",
|
||||||
"last_name": null,
|
"last_name": null,
|
||||||
"location": null,
|
"location": null,
|
||||||
@ -177,15 +174,15 @@ def get_single_user(auth_user_id, user_name):
|
|||||||
return jsonify(response_object), 404
|
return jsonify(response_object), 404
|
||||||
|
|
||||||
|
|
||||||
@users_blueprint.route('/users/<user_id>/picture', methods=['GET'])
|
@users_blueprint.route('/users/<user_name>/picture', methods=['GET'])
|
||||||
def get_picture(user_id):
|
def get_picture(user_name):
|
||||||
""" get user picture
|
""" get user picture
|
||||||
|
|
||||||
**Example request**:
|
**Example request**:
|
||||||
|
|
||||||
.. sourcecode:: http
|
.. sourcecode:: http
|
||||||
|
|
||||||
GET /api/users/1/picture HTTP/1.1
|
GET /api/users/admin/picture HTTP/1.1
|
||||||
Content-Type: application/json
|
Content-Type: application/json
|
||||||
|
|
||||||
**Example response**:
|
**Example response**:
|
||||||
@ -195,7 +192,7 @@ def get_picture(user_id):
|
|||||||
HTTP/1.1 200 OK
|
HTTP/1.1 200 OK
|
||||||
Content-Type: image/jpeg
|
Content-Type: image/jpeg
|
||||||
|
|
||||||
:param integer user_id: user id
|
:param integer user_name: user name
|
||||||
|
|
||||||
:statuscode 200: success
|
:statuscode 200: success
|
||||||
:statuscode 404:
|
:statuscode 404:
|
||||||
@ -205,7 +202,7 @@ def get_picture(user_id):
|
|||||||
"""
|
"""
|
||||||
response_object = {'status': 'not found', 'message': 'No picture.'}
|
response_object = {'status': 'not found', 'message': 'No picture.'}
|
||||||
try:
|
try:
|
||||||
user = User.query.filter_by(id=int(user_id)).first()
|
user = User.query.filter_by(username=user_name).first()
|
||||||
if not user:
|
if not user:
|
||||||
response_object = {
|
response_object = {
|
||||||
'status': 'fail',
|
'status': 'fail',
|
||||||
|
@ -7,6 +7,7 @@ import { Link } from 'react-router-dom'
|
|||||||
import Message from '../../Common/Message'
|
import Message from '../../Common/Message'
|
||||||
import { history } from '../../../index'
|
import { history } from '../../../index'
|
||||||
import { getOrUpdateData } from '../../../actions'
|
import { getOrUpdateData } from '../../../actions'
|
||||||
|
import { apiUrl } from '../../../utils'
|
||||||
|
|
||||||
class AdminUsers extends React.Component {
|
class AdminUsers extends React.Component {
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
@ -28,7 +29,7 @@ class AdminUsers extends React.Component {
|
|||||||
<table className="table">
|
<table className="table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>{t('administration:id')}</th>
|
<th>#</th>
|
||||||
<th>{t('user:Username')}</th>
|
<th>{t('user:Username')}</th>
|
||||||
<th>{t('user:Email')}</th>
|
<th>{t('user:Email')}</th>
|
||||||
<th>{t('user:Registration Date')}</th>
|
<th>{t('user:Registration Date')}</th>
|
||||||
@ -38,8 +39,18 @@ class AdminUsers extends React.Component {
|
|||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{users.map(user => (
|
{users.map(user => (
|
||||||
<tr key={user.id}>
|
<tr key={user.username}>
|
||||||
<th scope="row">{user.id}</th>
|
<td>
|
||||||
|
{user.picture === true && (
|
||||||
|
<img
|
||||||
|
alt="Avatar"
|
||||||
|
src={`${apiUrl}users/${
|
||||||
|
user.username
|
||||||
|
}/picture?${Date.now()}`}
|
||||||
|
className="img-fluid App-nav-profile-img"
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<Link to={`/users/${user.username}`}>
|
<Link to={`/users/${user.username}`}>
|
||||||
{user.username}
|
{user.username}
|
||||||
|
@ -8,7 +8,7 @@ import { apiUrl } from '../../utils'
|
|||||||
|
|
||||||
class NavBar extends React.PureComponent {
|
class NavBar extends React.PureComponent {
|
||||||
render() {
|
render() {
|
||||||
const { admin, id, isAuthenticated, picture, t, username } = this.props
|
const { admin, isAuthenticated, picture, t, username } = this.props
|
||||||
return (
|
return (
|
||||||
<header>
|
<header>
|
||||||
<nav className="navbar navbar-expand-lg navbar-light bg-light">
|
<nav className="navbar navbar-expand-lg navbar-light bg-light">
|
||||||
@ -120,7 +120,7 @@ class NavBar extends React.PureComponent {
|
|||||||
{picture === true && (
|
{picture === true && (
|
||||||
<img
|
<img
|
||||||
alt="Avatar"
|
alt="Avatar"
|
||||||
src={`${apiUrl}users/${id}/picture?${Date.now()}`}
|
src={`${apiUrl}users/${username}/picture?${Date.now()}`}
|
||||||
className="img-fluid App-nav-profile-img"
|
className="img-fluid App-nav-profile-img"
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
@ -161,7 +161,6 @@ class NavBar extends React.PureComponent {
|
|||||||
export default withTranslation()(
|
export default withTranslation()(
|
||||||
connect(({ user }) => ({
|
connect(({ user }) => ({
|
||||||
admin: user.admin,
|
admin: user.admin,
|
||||||
id: user.id,
|
|
||||||
isAuthenticated: user.isAuthenticated,
|
isAuthenticated: user.isAuthenticated,
|
||||||
picture: user.picture,
|
picture: user.picture,
|
||||||
username: user.username,
|
username: user.username,
|
||||||
|
@ -89,7 +89,7 @@ function ProfileDetail({
|
|||||||
<img
|
<img
|
||||||
alt="Profile"
|
alt="Profile"
|
||||||
src={
|
src={
|
||||||
`${apiUrl}users/${user.id}/picture` +
|
`${apiUrl}users/${user.username}/picture` +
|
||||||
`?${Date.now()}`
|
`?${Date.now()}`
|
||||||
}
|
}
|
||||||
className="img-fluid App-profile-img-small"
|
className="img-fluid App-profile-img-small"
|
||||||
|
@ -23,7 +23,7 @@ class UserProfile extends React.Component {
|
|||||||
<div>
|
<div>
|
||||||
{user && (
|
{user && (
|
||||||
<ProfileDetail
|
<ProfileDetail
|
||||||
editable={currentUser.id === user.id}
|
editable={currentUser.username === user.username}
|
||||||
t={t}
|
t={t}
|
||||||
user={user}
|
user={user}
|
||||||
/>
|
/>
|
||||||
|
Loading…
Reference in New Issue
Block a user