mount an atproto PDS repository as a FUSE filesystem forked from oppi.li/pdsfs
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758use std::sync::Arc;
use crate::client::DefaultHttpClient;
use atrium_identity::{ did::{CommonDidResolver, CommonDidResolverConfig, DEFAULT_PLC_DIRECTORY_URL}, handle::{AtprotoHandleResolver, AtprotoHandleResolverConfig, DnsTxtResolver}, identity_resolver::{IdentityResolver, IdentityResolverConfig},};use hickory_resolver::TokioResolver;
pub struct HickoryDnsTxtResolver { resolver: TokioResolver,}
impl Default for HickoryDnsTxtResolver { fn default() -> Self { let resolver = TokioResolver::builder_tokio() .expect("failed to create resolver") .build(); Self { resolver } }}
impl DnsTxtResolver for HickoryDnsTxtResolver { async fn resolve( &self, query: &str, ) -> core::result::Result<Vec<String>, Box<dyn std::error::Error + Send + Sync + 'static>> { Ok(self .resolver .txt_lookup(query) .await? .iter() .map(|txt| txt.to_string()) .collect()) }}
pub fn id_resolver() -> IdentityResolver< CommonDidResolver<DefaultHttpClient>, AtprotoHandleResolver<HickoryDnsTxtResolver, DefaultHttpClient>,> { let http_client = Arc::new(DefaultHttpClient::default()); let handle_resolver = AtprotoHandleResolver::new(AtprotoHandleResolverConfig { dns_txt_resolver: HickoryDnsTxtResolver::default(), http_client: Arc::clone(&http_client), }); let did_resolver = CommonDidResolver::new(CommonDidResolverConfig { plc_directory_url: DEFAULT_PLC_DIRECTORY_URL.into(), http_client: Arc::clone(&http_client), }); IdentityResolver::new(IdentityResolverConfig { did_resolver, handle_resolver, })}