(
store: &Store,
provider: &Provider,
credential_key: &str,
minted: &MintedCredential,
)
| 398 | } |
| 399 | |
| 400 | async fn apply_minted_credential( |
| 401 | store: &Store, |
| 402 | provider: &Provider, |
| 403 | credential_key: &str, |
| 404 | minted: &MintedCredential, |
| 405 | ) -> Result<(), Status> { |
| 406 | let mut updated = provider.clone(); |
| 407 | updated |
| 408 | .credentials |
| 409 | .insert(credential_key.to_string(), minted.access_token.clone()); |
| 410 | if minted.expires_at_ms > 0 { |
| 411 | updated |
| 412 | .credential_expires_at_ms |
| 413 | .insert(credential_key.to_string(), minted.expires_at_ms); |
| 414 | } else { |
| 415 | updated.credential_expires_at_ms.remove(credential_key); |
| 416 | } |
| 417 | crate::grpc::provider::validate_provider_update_against_attached_sandboxes(store, &updated) |
| 418 | .await?; |
| 419 | store |
| 420 | .update_message_cas::<Provider, _>(provider.object_id(), 0, |current| { |
| 421 | current |
| 422 | .credentials |
| 423 | .insert(credential_key.to_string(), minted.access_token.clone()); |
| 424 | if minted.expires_at_ms > 0 { |
| 425 | current |
| 426 | .credential_expires_at_ms |
| 427 | .insert(credential_key.to_string(), minted.expires_at_ms); |
| 428 | } else { |
| 429 | current.credential_expires_at_ms.remove(credential_key); |
| 430 | } |
| 431 | }) |
| 432 | .await |
| 433 | .map(|_| ()) |
| 434 | .map_err(|e| Status::internal(format!("persist refreshed provider credential failed: {e}"))) |
| 435 | } |
| 436 | |
| 437 | async fn mint_credential( |
| 438 | state: &StoredProviderCredentialRefreshState, |
no test coverage detected