rig_onchain_kit/http/
middleware.rs

1use actix_web::{web, HttpRequest};
2use anyhow::Result;
3use privy::auth::UserSession;
4
5use super::state::AppState;
6
7pub async fn verify_auth(req: &HttpRequest) -> Result<UserSession> {
8    let token = req
9        .headers()
10        .get("authorization")
11        .and_then(|h| h.to_str().ok())
12        .ok_or_else(|| anyhow::anyhow!("Missing authorization header"))?;
13
14    let token = token
15        .strip_prefix("Bearer ")
16        .ok_or_else(|| anyhow::anyhow!("Invalid authorization format"))?;
17
18    let state = req
19        .app_data::<web::Data<AppState>>()
20        .ok_or_else(|| anyhow::anyhow!("App state not found"))?;
21
22    match state.privy.authenticate_user(token).await {
23        Ok(session) => Ok(session),
24        Err(e) => Err(anyhow::anyhow!("Authentication failed: {}", e)),
25    }
26}