+7
-1
crates/jacquard-oauth/src/client.rs
+7
-1
crates/jacquard-oauth/src/client.rs
···
204
204
}
205
205
206
206
async fn create_session(&self, data: ClientSessionData<'_>) -> Result<OAuthSession<T, S>> {
207
+
self.registry.set(data.clone()).await?;
207
208
Ok(OAuthSession::new(
208
209
self.registry.clone(),
209
210
self.client.clone(),
···
336
337
let refreshed = self.registry.as_ref().get(&did, &sid, true).await?;
337
338
let token = AuthorizationToken::Dpop(refreshed.token_set.access_token.clone());
338
339
// Write back updated session
339
-
*self.data.write().await = refreshed.into_static();
340
+
*self.data.write().await = refreshed.clone().into_static();
341
+
// Store in the registry
342
+
self.registry.set(refreshed).await?;
340
343
Ok(token)
341
344
}
342
345
}
···
390
393
.send(build_http_request(&base_uri, request, &opts)?)
391
394
.await
392
395
.map_err(|e| TransportError::Other(Box::new(e)))?;
396
+
drop(guard);
393
397
let res = process_response(http_response);
394
398
if is_invalid_token_response(&res) {
395
399
opts.auth = Some(
···
397
401
.await
398
402
.map_err(|e| ClientError::Transport(TransportError::Other(e.into())))?,
399
403
);
404
+
let guard = self.data.read().await;
405
+
let mut dpop = guard.dpop_data.clone();
400
406
let http_response = self
401
407
.client
402
408
.dpop_call(&mut dpop)