alibi_core/store/stateless/
jwks.rs1use crate::store::JwkStore;
3use crate::store::stateless::StatelessStore;
4use crate::{AuthError, AuthResult, CreateJwk, Jwk};
5use async_trait::async_trait;
6
7#[async_trait]
8impl JwkStore for StatelessStore {
9 async fn list_jwks(&self) -> AuthResult<Vec<Jwk>> {
10 Ok(self.lock()?.jwks.values().cloned().collect())
11 }
12
13 async fn get_jwk_by_id(&self, id: &str) -> AuthResult<Option<Jwk>> {
14 Ok(self.lock()?.jwks.get(id).cloned())
15 }
16
17 async fn create_jwk(&self, data: CreateJwk) -> AuthResult<Jwk> {
18 let key = Jwk {
19 id: data.id.unwrap_or_else(|| uuid::Uuid::new_v4().to_string()),
20 public_key: data.public_key,
21 private_key: data.private_key,
22 created_at: data.created_at,
23 expires_at: data.expires_at,
24 alg: data.alg,
25 crv: data.crv,
26 };
27 let mut state = self.lock()?;
28 if state.jwks.contains_key(&key.id) {
29 return Err(AuthError::internal("duplicate JWK primary ID"));
30 }
31 _ = state.jwks.insert(key.id.clone(), key.clone());
32 Ok(key)
33 }
34}