diff --git a/tildes/openapi_beta.yaml b/tildes/openapi_beta.yaml
index 48ec7e7..3f27904 100644
--- a/tildes/openapi_beta.yaml
+++ b/tildes/openapi_beta.yaml
@@ -409,6 +409,12 @@ components:
properties:
username:
type: string
+ joined_at:
+ type: string
+ nullable: true
+ bio_rendered_html:
+ type: string
+ nullable: true
Pagination:
type: object
diff --git a/tildes/tildes/templates/user.jinja2 b/tildes/tildes/templates/user.jinja2
index 6d19357..f57043b 100644
--- a/tildes/tildes/templates/user.jinja2
+++ b/tildes/tildes/templates/user.jinja2
@@ -171,18 +171,18 @@
{% endif %}
{% if request.has_permission("view_info", user) %}
-
User info
-
- - Registered
- - {{ user.created_time.strftime('%B %-d, %Y') }}
-
- {% if user.bio_rendered_html %}
-
-
- Bio
- - {{ user.bio_rendered_html|safe }}
-
- {% endif %}
-
+ User info
+
+ - Registered
+ - {{ user.created_time.strftime('%B %-d, %Y') }}
+
+ {% if user.bio_rendered_html %}
+
+
- Bio
+ - {{ user.bio_rendered_html|safe }}
+
+ {% endif %}
+
{% endif %}
{% if request.has_permission('message', user) %}
diff --git a/tildes/tildes/views/api/beta/user.py b/tildes/tildes/views/api/beta/user.py
index 23b0ffa..9428833 100644
--- a/tildes/tildes/views/api/beta/user.py
+++ b/tildes/tildes/views/api/beta/user.py
@@ -19,15 +19,27 @@ from tildes.views.api.beta.comment import comment_to_api_dict
from tildes.views.api.beta.topic import topic_to_api_dict
-def _user_to_api_dict(user: User) -> dict:
+def _user_to_api_dict(request: Request, user: User) -> dict:
"""Convert a User object to a dictionary for JSON serialization.
The schema is defined in our OpenAPI YAML file.
"""
+
+ # Some fields do not require permissions
+ username = user.username
+
+ # Check permissions for viewing user details (and set safe defaults)
+ joined_at = None
+ bio_rendered_html = None
+
+ if request.has_permission("view_info", user):
+ joined_at = user.created_time.isoformat()
+ bio_rendered_html = user.bio_rendered_html
+
return {
- "username": user.username,
- "joined_at": user.created_time.isoformat(),
- "bio_rendered_html": user.bio_rendered_html,
+ "username": username,
+ "joined_at": joined_at,
+ "bio_rendered_html": bio_rendered_html,
}
@@ -97,7 +109,7 @@ def get_user(request: Request) -> dict: # noqa
# Construct the final response JSON object
response = {
- "user": _user_to_api_dict(user),
+ "user": _user_to_api_dict(request, user),
"history": processed_results,
"pagination": {
"item_count": len(processed_results),