From 01025828998b7a9be353edd1e70b5a7a94f2eed5 Mon Sep 17 00:00:00 2001 From: Christopher Carroll Smith Date: Tue, 3 Dec 2024 20:32:39 +0000 Subject: [PATCH 1/3] Avatar upload + dedicated endpoint for serving binary images from database --- routers/user.py | 63 ++++++++++++++++++++++++++++++++---- templates/users/profile.html | 56 +++++++++++++++++++++++++++++--- utils/models.py | 5 ++- 3 files changed, 111 insertions(+), 13 deletions(-) diff --git a/routers/user.py b/routers/user.py index 5639d79..8c3a247 100644 --- a/routers/user.py +++ b/routers/user.py @@ -1,7 +1,8 @@ -from fastapi import APIRouter, Depends, HTTPException, Form -from fastapi.responses import RedirectResponse +from fastapi import APIRouter, Depends, HTTPException, Form, UploadFile, File +from fastapi.responses import RedirectResponse, Response from pydantic import BaseModel, EmailStr -from sqlmodel import Session +from sqlmodel import Session, select +from typing import Optional from utils.models import User from utils.auth import get_session, get_authenticated_user, verify_password @@ -15,16 +16,33 @@ class UpdateProfile(BaseModel): """Request model for updating user profile information""" name: str email: EmailStr - avatar_url: str + avatar_url: Optional[str] = None + avatar_file: Optional[bytes] = None + avatar_content_type: Optional[str] = None @classmethod async def as_form( cls, name: str = Form(...), email: EmailStr = Form(...), - avatar_url: str = Form(...), + avatar_url: Optional[str] = Form(None), + avatar_file: Optional[UploadFile] = File(None), ): - return cls(name=name, email=email, avatar_url=avatar_url) + avatar_data = None + avatar_content_type = None + + if avatar_file: + # Read the file content + avatar_data = await avatar_file.read() + avatar_content_type = avatar_file.content_type + + return cls( + name=name, + email=email, + avatar_url=avatar_url if not avatar_file else None, + avatar_file=avatar_data, + avatar_content_type=avatar_content_type + ) class UserDeleteAccount(BaseModel): @@ -50,7 +68,17 @@ async def update_profile( # Update user details current_user.name = user_profile.name current_user.email = user_profile.email - current_user.avatar_url = user_profile.avatar_url + + # Handle avatar update + if user_profile.avatar_file: + current_user.avatar_url = None + current_user.avatar_data = user_profile.avatar_file + current_user.avatar_content_type = user_profile.avatar_content_type + else: + current_user.avatar_url = user_profile.avatar_url + current_user.avatar_data = None + current_user.avatar_content_type = None + session.commit() session.refresh(current_user) return RedirectResponse(url="/profile", status_code=303) @@ -84,3 +112,24 @@ async def delete_account( # Log out the user return RedirectResponse(url="/auth/logout", status_code=303) + + +@router.get("/avatar/{user_id}") +async def get_avatar( + user_id: int, + session: Session = Depends(get_session) +): + """Serve avatar image from database""" + user = session.exec(select(User).where(User.id == user_id)).first() + if not user: + raise HTTPException(status_code=404, detail="User not found") + + if user.avatar_data: + return Response( + content=user.avatar_data, + media_type=user.avatar_content_type + ) + elif user.avatar_url: + return RedirectResponse(url=user.avatar_url) + else: + raise HTTPException(status_code=404, detail="Avatar not found") diff --git a/templates/users/profile.html b/templates/users/profile.html index 0053993..b51d582 100644 --- a/templates/users/profile.html +++ b/templates/users/profile.html @@ -18,8 +18,8 @@

User Profile

Email: {{ user.email }}

- {% if user.avatar_url %} - User Avatar + {% if user.avatar_url or user.avatar_data %} + User Avatar {% else %} {{ render_silhouette(width=150, height=150) }} {% endif %} @@ -35,7 +35,7 @@

User Profile

Edit Profile
-
+
@@ -45,8 +45,20 @@

User Profile

- - + +
+ + +
+
+ +
+
@@ -103,5 +115,39 @@

User Profile

editProfile.style.display = 'block'; } } + + // Function to toggle between URL and file upload inputs + function toggleAvatarInput() { + var avatarType = document.getElementById('avatar_type').value; + var urlInput = document.getElementById('url_input'); + var fileInput = document.getElementById('file_input'); + var urlField = document.getElementById('avatar_url'); + + if (avatarType === 'url') { + urlInput.style.display = 'block'; + fileInput.style.display = 'none'; + // Clear file input + document.getElementById('avatar_file').value = ''; + } else { + urlInput.style.display = 'none'; + fileInput.style.display = 'block'; + // Clear URL input + urlField.value = ''; + } + } + + // Add form submission validation + document.querySelector('form[action="{{ url_for("update_profile") }}"]').addEventListener('submit', function(e) { + var avatarType = document.getElementById('avatar_type').value; + var urlField = document.getElementById('avatar_url'); + var fileField = document.getElementById('avatar_file'); + + // Clear the unused field before submission + if (avatarType === 'url') { + fileField.value = ''; + } else { + urlField.value = ''; + } + }); {% endblock %} diff --git a/utils/models.py b/utils/models.py index 63d9ec2..ef53aef 100644 --- a/utils/models.py +++ b/utils/models.py @@ -5,7 +5,7 @@ from typing import Optional, List, Union from fastapi import HTTPException from sqlmodel import SQLModel, Field, Relationship -from sqlalchemy import Column, Enum as SQLAlchemyEnum +from sqlalchemy import Column, Enum as SQLAlchemyEnum, LargeBinary from sqlalchemy.orm import Mapped logger = getLogger("uvicorn.error") @@ -181,6 +181,9 @@ class User(SQLModel, table=True): name: str email: str = Field(index=True, unique=True) avatar_url: Optional[str] = None + avatar_data: Optional[bytes] = Field( + default=None, sa_column=Column(LargeBinary)) + avatar_content_type: Optional[str] = None created_at: datetime = Field(default_factory=utc_time) updated_at: datetime = Field(default_factory=utc_time) From f947dc98db2da32b858bf2bab306a1c531fa337f Mon Sep 17 00:00:00 2001 From: "Christopher C. Smith" Date: Sun, 15 Dec 2024 16:24:29 -0500 Subject: [PATCH 2/3] Remove URL upload of avatar Only get avatar if user is authorized --- routers/user.py | 72 +++++++++++++------------------ templates/users/organization.html | 6 +-- templates/users/profile.html | 54 ++--------------------- tests/test_user.py | 71 +++++++++++++++++++++++++++--- utils/models.py | 1 - 5 files changed, 100 insertions(+), 104 deletions(-) diff --git a/routers/user.py b/routers/user.py index 8c3a247..e7c763f 100644 --- a/routers/user.py +++ b/routers/user.py @@ -1,10 +1,10 @@ -from fastapi import APIRouter, Depends, HTTPException, Form, UploadFile, File +from fastapi import APIRouter, Depends, Form, UploadFile, File from fastapi.responses import RedirectResponse, Response from pydantic import BaseModel, EmailStr -from sqlmodel import Session, select +from sqlmodel import Session from typing import Optional -from utils.models import User -from utils.auth import get_session, get_authenticated_user, verify_password +from utils.models import User, DataIntegrityError +from utils.auth import get_session, get_authenticated_user, verify_password, PasswordValidationError router = APIRouter(prefix="/user", tags=["user"]) @@ -16,7 +16,6 @@ class UpdateProfile(BaseModel): """Request model for updating user profile information""" name: str email: EmailStr - avatar_url: Optional[str] = None avatar_file: Optional[bytes] = None avatar_content_type: Optional[str] = None @@ -25,21 +24,18 @@ async def as_form( cls, name: str = Form(...), email: EmailStr = Form(...), - avatar_url: Optional[str] = Form(None), avatar_file: Optional[UploadFile] = File(None), ): avatar_data = None avatar_content_type = None if avatar_file: - # Read the file content avatar_data = await avatar_file.read() avatar_content_type = avatar_file.content_type return cls( name=name, email=email, - avatar_url=avatar_url if not avatar_file else None, avatar_file=avatar_data, avatar_content_type=avatar_content_type ) @@ -62,25 +58,20 @@ async def as_form( @router.post("/update_profile", response_class=RedirectResponse) async def update_profile( user_profile: UpdateProfile = Depends(UpdateProfile.as_form), - current_user: User = Depends(get_authenticated_user), + user: User = Depends(get_authenticated_user), session: Session = Depends(get_session) ): # Update user details - current_user.name = user_profile.name - current_user.email = user_profile.email + user.name = user_profile.name + user.email = user_profile.email # Handle avatar update if user_profile.avatar_file: - current_user.avatar_url = None - current_user.avatar_data = user_profile.avatar_file - current_user.avatar_content_type = user_profile.avatar_content_type - else: - current_user.avatar_url = user_profile.avatar_url - current_user.avatar_data = None - current_user.avatar_content_type = None + user.avatar_data = user_profile.avatar_file + user.avatar_content_type = user_profile.avatar_content_type session.commit() - session.refresh(current_user) + session.refresh(user) return RedirectResponse(url="/profile", status_code=303) @@ -88,48 +79,43 @@ async def update_profile( async def delete_account( user_delete_account: UserDeleteAccount = Depends( UserDeleteAccount.as_form), - current_user: User = Depends(get_authenticated_user), + user: User = Depends(get_authenticated_user), session: Session = Depends(get_session) ): - if not current_user.password: - raise HTTPException( - status_code=500, - detail="User password not found in database; please contact a system administrator" + if not user.password: + raise DataIntegrityError( + resource="User password" ) if not verify_password( user_delete_account.confirm_delete_password, - current_user.password.hashed_password + user.password.hashed_password ): - raise HTTPException( - status_code=400, - detail="Password is incorrect" + raise PasswordValidationError( + field="confirm_delete_password", + message="Password is incorrect" ) # Delete the user - session.delete(current_user) + session.delete(user) session.commit() # Log out the user return RedirectResponse(url="/auth/logout", status_code=303) -@router.get("/avatar/{user_id}") +@router.get("/avatar") async def get_avatar( - user_id: int, + user: User = Depends(get_authenticated_user), session: Session = Depends(get_session) ): """Serve avatar image from database""" - user = session.exec(select(User).where(User.id == user_id)).first() - if not user: - raise HTTPException(status_code=404, detail="User not found") - - if user.avatar_data: - return Response( - content=user.avatar_data, - media_type=user.avatar_content_type + if not user.avatar_data: + raise DataIntegrityError( + resource="User avatar" ) - elif user.avatar_url: - return RedirectResponse(url=user.avatar_url) - else: - raise HTTPException(status_code=404, detail="Avatar not found") + + return Response( + content=user.avatar_data, + media_type=user.avatar_content_type + ) diff --git a/templates/users/organization.html b/templates/users/organization.html index 2e75fa9..913598b 100644 --- a/templates/users/organization.html +++ b/templates/users/organization.html @@ -63,11 +63,7 @@

{{ organization.name }}

{% for user in role.users %} - {% if user.avatar_url %} - User Avatar - {% else %} - {{ render_silhouette(width=40, height=40) }} - {% endif %} + {{ render_silhouette(width=40, height=40) }} {{ user.name }} {{ user.email }} diff --git a/templates/users/profile.html b/templates/users/profile.html index b51d582..fd4ac0b 100644 --- a/templates/users/profile.html +++ b/templates/users/profile.html @@ -18,8 +18,8 @@

User Profile

Email: {{ user.email }}

- {% if user.avatar_url or user.avatar_data %} - User Avatar + {% if user.avatar_data %} + User Avatar {% else %} {{ render_silhouette(width=150, height=150) }} {% endif %} @@ -45,20 +45,8 @@

User Profile

- -
- - -
-
- -
- + +
@@ -115,39 +103,5 @@

User Profile

editProfile.style.display = 'block'; } } - - // Function to toggle between URL and file upload inputs - function toggleAvatarInput() { - var avatarType = document.getElementById('avatar_type').value; - var urlInput = document.getElementById('url_input'); - var fileInput = document.getElementById('file_input'); - var urlField = document.getElementById('avatar_url'); - - if (avatarType === 'url') { - urlInput.style.display = 'block'; - fileInput.style.display = 'none'; - // Clear file input - document.getElementById('avatar_file').value = ''; - } else { - urlInput.style.display = 'none'; - fileInput.style.display = 'block'; - // Clear URL input - urlField.value = ''; - } - } - - // Add form submission validation - document.querySelector('form[action="{{ url_for("update_profile") }}"]').addEventListener('submit', function(e) { - var avatarType = document.getElementById('avatar_type').value; - var urlField = document.getElementById('avatar_url'); - var fileField = document.getElementById('avatar_file'); - - // Clear the unused field before submission - if (avatarType === 'url') { - fileField.value = ''; - } else { - urlField.value = ''; - } - }); {% endblock %} diff --git a/tests/test_user.py b/tests/test_user.py index d6f42d0..674a1c1 100644 --- a/tests/test_user.py +++ b/tests/test_user.py @@ -13,7 +13,9 @@ def test_update_profile_unauthorized(unauth_client: TestClient): data={ "name": "New Name", "email": "new@example.com", - "avatar_url": "https://example.com/avatar.jpg" + }, + files={ + "avatar_file": ("test_avatar.jpg", b"fake image data", "image/jpeg") }, follow_redirects=False ) @@ -23,14 +25,40 @@ def test_update_profile_unauthorized(unauth_client: TestClient): def test_update_profile_authorized(auth_client: TestClient, test_user: User, session: Session): """Test that authorized users can edit their profile""" - + + # Create test image data + test_image_data = b"fake image data" + # Update profile response: Response = auth_client.post( app.url_path_for("update_profile"), data={ "name": "Updated Name", "email": "updated@example.com", - "avatar_url": "https://example.com/new-avatar.jpg" + }, + files={ + "avatar_file": ("test_avatar.jpg", test_image_data, "image/jpeg") + }, + follow_redirects=False + ) + assert response.status_code == 303 + assert response.headers["location"] == app.url_path_for("read_profile") + + # Verify changes in database + session.refresh(test_user) + assert test_user.name == "Updated Name" + assert test_user.email == "updated@example.com" + assert test_user.avatar_data == test_image_data + assert test_user.avatar_content_type == "image/jpeg" + + +def test_update_profile_without_avatar(auth_client: TestClient, test_user: User, session: Session): + """Test that profile can be updated without changing the avatar""" + response: Response = auth_client.post( + app.url_path_for("update_profile"), + data={ + "name": "Updated Name", + "email": "updated@example.com", }, follow_redirects=False ) @@ -41,7 +69,6 @@ def test_update_profile_authorized(auth_client: TestClient, test_user: User, ses session.refresh(test_user) assert test_user.name == "Updated Name" assert test_user.email == "updated@example.com" - assert test_user.avatar_url == "https://example.com/new-avatar.jpg" def test_delete_account_unauthorized(unauth_client: TestClient): @@ -62,7 +89,7 @@ def test_delete_account_wrong_password(auth_client: TestClient, test_user: User) data={"confirm_delete_password": "WrongPassword123!"}, follow_redirects=False ) - assert response.status_code == 400 + assert response.status_code == 422 assert "Password is incorrect" in response.text.strip() @@ -81,3 +108,37 @@ def test_delete_account_success(auth_client: TestClient, test_user: User, sessio # Verify user is deleted from database user = session.get(User, test_user.id) assert user is None + + +def test_get_avatar_authorized(auth_client: TestClient, test_user: User): + """Test getting user avatar""" + # First upload an avatar + test_image_data = b"fake image data" + auth_client.post( + app.url_path_for("update_profile"), + data={ + "name": test_user.name, + "email": test_user.email, + }, + files={ + "avatar_file": ("test_avatar.jpg", test_image_data, "image/jpeg") + }, + ) + + # Then try to retrieve it + response = auth_client.get( + app.url_path_for("get_avatar") + ) + assert response.status_code == 200 + assert response.content == test_image_data + assert response.headers["content-type"] == "image/jpeg" + + +def test_get_avatar_unauthorized(unauth_client: TestClient): + """Test getting avatar for non-existent user""" + response = unauth_client.get( + app.url_path_for("get_avatar"), + follow_redirects=False + ) + assert response.status_code == 303 + assert response.headers["location"] == app.url_path_for("read_login") diff --git a/utils/models.py b/utils/models.py index ef53aef..29e468e 100644 --- a/utils/models.py +++ b/utils/models.py @@ -180,7 +180,6 @@ class User(SQLModel, table=True): id: Optional[int] = Field(default=None, primary_key=True) name: str email: str = Field(index=True, unique=True) - avatar_url: Optional[str] = None avatar_data: Optional[bytes] = Field( default=None, sa_column=Column(LargeBinary)) avatar_content_type: Optional[str] = None From deed7a3c279cef363e6e473af5eb57e5e132f9d0 Mon Sep 17 00:00:00 2001 From: "Christopher C. Smith" Date: Sun, 15 Dec 2024 16:40:25 -0500 Subject: [PATCH 3/3] Updated data model documentation --- docs/architecture.qmd | 17 +++++------------ docs/static/documentation.txt | 17 +++++------------ docs/static/schema.png | Bin 49687 -> 67198 bytes 3 files changed, 10 insertions(+), 24 deletions(-) diff --git a/docs/architecture.qmd b/docs/architecture.qmd index 7dfd136..1079e53 100644 --- a/docs/architecture.qmd +++ b/docs/architecture.qmd @@ -102,18 +102,16 @@ Here are some patterns we've considered for server-side error handling: border-collapse: collapse; } -.styled-table th:nth-child(1) { width: 5%; } -.styled-table th:nth-child(2) { width: 50%; } -.styled-table th:nth-child(3), -.styled-table th:nth-child(4), -.styled-table th:nth-child(5) { width: 15%; } -.styled-table th:nth-child(6) { width: 10%; } +.styled-table th:nth-child(1) { width: 50%; } +.styled-table th:nth-child(2), +.styled-table th:nth-child(3), +.styled-table th:nth-child(4) { width: 15%; } +.styled-table th:nth-child(5) { width: 10%; } - @@ -123,7 +121,6 @@ Here are some patterns we've considered for server-side error handling: - @@ -131,7 +128,6 @@ Here are some patterns we've considered for server-side error handling: - @@ -139,7 +135,6 @@ Here are some patterns we've considered for server-side error handling: - @@ -147,7 +142,6 @@ Here are some patterns we've considered for server-side error handling: - @@ -155,7 +149,6 @@ Here are some patterns we've considered for server-side error handling: - diff --git a/docs/static/documentation.txt b/docs/static/documentation.txt index f15677b..15713bb 100644 --- a/docs/static/documentation.txt +++ b/docs/static/documentation.txt @@ -322,18 +322,16 @@ Here are some patterns we've considered for server-side error handling: border-collapse: collapse; } -.styled-table th:nth-child(1) { width: 5%; } -.styled-table th:nth-child(2) { width: 50%; } -.styled-table th:nth-child(3), -.styled-table th:nth-child(4), -.styled-table th:nth-child(5) { width: 15%; } -.styled-table th:nth-child(6) { width: 10%; } +.styled-table th:nth-child(1) { width: 50%; } +.styled-table th:nth-child(2), +.styled-table th:nth-child(3), +.styled-table th:nth-child(4) { width: 15%; } +.styled-table th:nth-child(5) { width: 10%; }
ID Approach Returns to same page Preserves form inputs
1 Validate with Pydantic dependency, catch and redirect from middleware (with exception message as context) to an error page with "go back" button No YesLow
2 Validate in FastAPI endpoint function body, redirect to origin page with error message query param Yes NoMedium
3 Validate in FastAPI endpoint function body, redirect to origin page with error message query param and form inputs as context so we can re-render page with original form inputs Yes YesHigh
4 Validate with Pydantic dependency, use session context to get form inputs from request, redirect to origin page from middleware with exception message and form inputs as context so we can re-render page with original form inputs Yes YesHigh
5 Validate in either Pydantic dependency or function endpoint body and directly return error message or error toast HTML partial in JSON, then mount error toast with HTMX or some simple layout-level Javascript Yes Yes
- @@ -343,7 +341,6 @@ Here are some patterns we've considered for server-side error handling: - @@ -351,7 +348,6 @@ Here are some patterns we've considered for server-side error handling: - @@ -359,7 +355,6 @@ Here are some patterns we've considered for server-side error handling: - @@ -367,7 +362,6 @@ Here are some patterns we've considered for server-side error handling: - @@ -375,7 +369,6 @@ Here are some patterns we've considered for server-side error handling: - diff --git a/docs/static/schema.png b/docs/static/schema.png index b47a3a19535b28c750a848c990cc1b58a4b64efe..49cacfeb7a5072d44fda6fa15253fae424e3d84e 100644 GIT binary patch literal 67198 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ξ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 literal 49687 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 b`q}W2hq`x3gC`aW{uyd9(mc*|+PeP-t{yEl
ID Approach Returns to same page Preserves form inputs
1 Validate with Pydantic dependency, catch and redirect from middleware (with exception message as context) to an error page with "go back" button No YesLow
2 Validate in FastAPI endpoint function body, redirect to origin page with error message query param Yes NoMedium
3 Validate in FastAPI endpoint function body, redirect to origin page with error message query param and form inputs as context so we can re-render page with original form inputs Yes YesHigh
4 Validate with Pydantic dependency, use session context to get form inputs from request, redirect to origin page from middleware with exception message and form inputs as context so we can re-render page with original form inputs Yes YesHigh
5 Validate in either Pydantic dependency or function endpoint body and directly return error message or error toast HTML partial in JSON, then mount error toast with HTMX or some simple layout-level Javascript Yes Yes