diff --git a/consumer/src/backfill/mod.rs b/consumer/src/backfill/mod.rs index f65dfa3c..53869521 100644 --- a/consumer/src/backfill/mod.rs +++ b/consumer/src/backfill/mod.rs @@ -147,14 +147,11 @@ async fn backfill_actor( eyre::bail!("missing did doc"); }; - let Some(service) = did_doc - .service - .and_then(|services| services.into_iter().find(|svc| svc.id == PDS_SERVICE_ID)) - else { + let Some(service) = did_doc.find_service_by_id(PDS_SERVICE_ID) else { eyre::bail!("DID doc contained no service endpoint"); }; - let pds_url = service.service_endpoint; + let pds_url = service.service_endpoint.clone(); // check the repo status before we attempt to resolve the handle. There's a case where we can't // resolve the handle in the DID doc because the acc is already deleted. diff --git a/did-resolver/src/types.rs b/did-resolver/src/types.rs index fc2dd433..fc8b648d 100644 --- a/did-resolver/src/types.rs +++ b/did-resolver/src/types.rs @@ -12,6 +12,20 @@ pub struct DidDocument { pub verification_method: Option>, } +impl DidDocument { + pub fn find_service_by_id(&self, service: &str) -> Option<&DidService> { + self.service + .as_ref() + .and_then(|services| services.iter().find(|s| s.id == service)) + } + + pub fn find_verif_method_by_type(&self, ty: &str) -> Option<&DidVerificationMethod> { + self.verification_method + .as_ref() + .and_then(|methods| methods.iter().find(|m| m.ty == ty)) + } +} + #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] pub struct DidService { diff --git a/parakeet/src/xrpc/jwt.rs b/parakeet/src/xrpc/jwt.rs index c4d65386..78d973d0 100644 --- a/parakeet/src/xrpc/jwt.rs +++ b/parakeet/src/xrpc/jwt.rs @@ -60,16 +60,14 @@ impl JwtVerifier { let did_doc = self.resolver.resolve_did(did).await.ok()??; // try find the multibase key - let multikey = did_doc - .verification_method - .and_then(|vms| vms.into_iter().find(|vm| vm.ty == "Multikey"))?; + let multikey = did_doc.find_verif_method_by_type("Multikey")?; { let mut l = self.key_cache.write().await; l.insert(did.to_string(), multikey.public_key_multibase.clone()); } - Some(multikey.public_key_multibase) + Some(multikey.public_key_multibase.clone()) } pub fn verify_jwt_multibase(&self, token: &str, multibase_key: &str) -> Option {