e870254
use export::redis;
use crate::auth::errors::AuthError;
use crate::auth::oauth::{LoginState, STATE_TTL_SECS};
use crate::auth::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<Option<LoginState>, AuthError> {
let Some(raw) = redis::getdel_string(&service.state.redis, &key(state)).await? else {
return Ok(None);
};
Ok(serde_json::from_str(&raw).ok())
}