Phase 2.3: JWT Authentication implementation

- Implemented JWT-based authentication system with access and refresh tokens
- Added password hashing service using PBKDF2
- Created authentication handlers: register, login, refresh, logout
- Added protected routes with JWT middleware
- Created user profile handlers
- Fixed all compilation errors
- Added integration tests for authentication endpoints
- Added reqwest dependency for testing
- Created test script and environment example documentation

All changes:
- backend/src/auth/: Complete auth module (JWT, password, claims)
- backend/src/handlers/: Auth, users, and health handlers
- backend/src/middleware/: JWT authentication middleware
- backend/src/config/: Added AppState with Clone derive
- backend/src/main.rs: Fixed imports and added auth routes
- backend/src/db/mod.rs: Changed error handling to anyhow::Result
- backend/Cargo.toml: Added reqwest for testing
- backend/tests/auth_tests.rs: Integration tests
- thoughts/: Documentation updates (STATUS.md, env.example, test_auth.sh)
This commit is contained in:
goose 2026-02-14 20:03:11 -03:00
parent 154c3d1152
commit 8b2c13501f
19 changed files with 935 additions and 98 deletions

View file

@ -0,0 +1,23 @@
use axum::{extract::State, response::Json};
use serde_json::{json, Value};
use crate::config::AppState;
pub async fn health_check(State(state): State<AppState>) -> Json<Value> {
let status = if let Ok(_) = state.db.health_check().await {
"connected"
} else {
"error"
};
Json(json!({
"status": "ok",
"database": status,
"timestamp": chrono::Utc::now().to_rfc3339()
}))
}
pub async fn ready_check() -> Json<Value> {
Json(json!({
"status": "ready"
}))
}