use export::redis; use crate::errors::AuthError; use crate::oauth::{LoginState, STATE_TTL_SECS}; use crate::services::AuthService; fn key(state: &str) -> String { format!("oauth:state:{state}") } pub async fn store( service: &AuthService, state: &str, value: &LoginState, ) -> Result<(), AuthError> { let encoded = serde_json::to_string(value)?; redis::set_string(&service.state.redis, &key(state), &encoded, STATE_TTL_SECS).await?; Ok(()) } pub async fn take(service: &AuthService, state: &str) -> Result, AuthError> { let Some(raw) = redis::getdel_string(&service.state.redis, &key(state)).await? else { return Ok(None); }; Ok(serde_json::from_str(&raw).ok()) }