mockforge_http/handlers/
auth_helpers.rs

1//! Authentication helper functions for handlers
2//!
3//! This module provides utilities for extracting user information from authenticated requests.
4
5use axum::extract::Extension;
6use uuid::Uuid;
7
8use crate::auth::types::AuthClaims;
9
10/// Extract user ID from AuthClaims extension
11///
12/// Returns the user ID from AuthClaims if available, otherwise returns None.
13/// For mock server purposes, this allows handlers to work with or without authentication.
14pub fn extract_user_id_from_claims(claims: Option<Extension<AuthClaims>>) -> Option<Uuid> {
15    claims
16        .and_then(|Extension(claims)| claims.sub)
17        .and_then(|sub| Uuid::parse_str(&sub).ok())
18}
19
20/// Extract user ID from AuthClaims extension with fallback
21///
22/// Returns the user ID from AuthClaims if available, otherwise returns a default UUID.
23/// This is useful for mock servers where authentication may be optional.
24pub fn extract_user_id_with_fallback(claims: Option<Extension<AuthClaims>>) -> Uuid {
25    extract_user_id_from_claims(claims).unwrap_or_else(|| {
26        // For mock server, use a deterministic default user ID
27        // In production, this should return an error if authentication is required
28        Uuid::parse_str("00000000-0000-0000-0000-000000000001").unwrap()
29    })
30}
31
32/// Extract username from AuthClaims extension
33///
34/// Returns the username from AuthClaims if available, otherwise returns None.
35pub fn extract_username_from_claims(claims: Option<Extension<AuthClaims>>) -> Option<String> {
36    claims.and_then(|Extension(claims)| claims.username)
37}
38