fix: address multiple code quality improvements across backend and frontend
Backend fixes: - Fix JWT sub claim: encode as str(user.id), decode with int() cast (python-jose requirement) - Replace all deprecated datetime.utcnow() with datetime.now(timezone.utc) - Replace deprecated FastAPI @app.on_event() with modern lifespan context manager - Replace deprecated Pydantic class Config with model_config = ConfigDict(...) - Replace deprecated Pydantic .dict() with .model_dump() - Fix overly broad except (GmailInjectionError, Exception) → except Exception - Remove unused GmailInjectionError import - Fix TokenPayload schema sub field type from int to str Frontend: - Create frontend/src/lib/api.ts — API client module with auth, user, mail accounts, processing runs APIs - Add !frontend/src/lib/ to .gitignore negation Tests: - Add 3 new JWT tests (sub string encoding, access token type, refresh token type) - Update test_token_payload_schema for string sub claim - All 128 tests pass Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com> Agent-Logs-Url: https://github.com/christianlouis/pop_puller_to_gmail/sessions/e0b13eb0-8de7-4f02-81e4-e202cbba4608
This commit is contained in:
@@ -29,6 +29,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- Unit tests for credential encryption edge cases (empty, long, unicode, special chars)
|
||||
- Unit tests for FastAPI application factory and core endpoints (root, health, OpenAPI)
|
||||
- Unit tests for Pydantic schema validation (users, mail accounts, notifications, subscriptions)
|
||||
- Unit tests for JWT `sub` claim string encoding and token type verification
|
||||
- Created `frontend/src/lib/api.ts` — API client module (fixes frontend compilation blocker)
|
||||
- Reached 57% test coverage (up from 54%)
|
||||
|
||||
### Changed
|
||||
@@ -47,6 +49,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- Removed CodeQL analysis from CI pipeline (was blocking builds)
|
||||
|
||||
### Fixed
|
||||
- JWT `sub` claim now encoded as string per JWT spec (python-jose rejects integer subjects)
|
||||
- `TokenPayload` schema `sub` field type changed from `int` to `str` for consistency
|
||||
- Replaced deprecated `datetime.utcnow()` with `datetime.now(timezone.utc)` throughout backend
|
||||
- Replaced deprecated FastAPI `@app.on_event()` handlers with modern `lifespan` context manager
|
||||
- Replaced deprecated Pydantic `class Config` with `model_config = ConfigDict(...)` in all schemas
|
||||
- Replaced deprecated Pydantic `.dict()` with `.model_dump()` in mail account updates
|
||||
- Removed overly broad `except (GmailInjectionError, Exception)` in task error handler
|
||||
- Bare exception handlers replaced with specific types
|
||||
- Open redirect vulnerability in OAuth redirect_uri
|
||||
- Default encryption keys security issue
|
||||
|
||||
Reference in New Issue
Block a user