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