A better Rust ATProto crate

oversight in session persistence

Orual 40c7d5ab 2ff4604b

Changed files
+7 -1
crates
jacquard-oauth
src
+7 -1
crates/jacquard-oauth/src/client.rs
···
}
async fn create_session(&self, data: ClientSessionData<'_>) -> Result<OAuthSession<T, S>> {
Ok(OAuthSession::new(
self.registry.clone(),
self.client.clone(),
···
let refreshed = self.registry.as_ref().get(&did, &sid, true).await?;
let token = AuthorizationToken::Dpop(refreshed.token_set.access_token.clone());
// Write back updated session
-
*self.data.write().await = refreshed.into_static();
Ok(token)
}
}
···
.send(build_http_request(&base_uri, request, &opts)?)
.await
.map_err(|e| TransportError::Other(Box::new(e)))?;
let res = process_response(http_response);
if is_invalid_token_response(&res) {
opts.auth = Some(
···
.await
.map_err(|e| ClientError::Transport(TransportError::Other(e.into())))?,
);
let http_response = self
.client
.dpop_call(&mut dpop)
···
}
async fn create_session(&self, data: ClientSessionData<'_>) -> Result<OAuthSession<T, S>> {
+
self.registry.set(data.clone()).await?;
Ok(OAuthSession::new(
self.registry.clone(),
self.client.clone(),
···
let refreshed = self.registry.as_ref().get(&did, &sid, true).await?;
let token = AuthorizationToken::Dpop(refreshed.token_set.access_token.clone());
// Write back updated session
+
*self.data.write().await = refreshed.clone().into_static();
+
// Store in the registry
+
self.registry.set(refreshed).await?;
Ok(token)
}
}
···
.send(build_http_request(&base_uri, request, &opts)?)
.await
.map_err(|e| TransportError::Other(Box::new(e)))?;
+
drop(guard);
let res = process_response(http_response);
if is_invalid_token_response(&res) {
opts.auth = Some(
···
.await
.map_err(|e| ClientError::Transport(TransportError::Other(e.into())))?,
);
+
let guard = self.data.read().await;
+
let mut dpop = guard.dpop_data.clone();
let http_response = self
.client
.dpop_call(&mut dpop)