flyrain commented on code in PR #254:
URL: https://github.com/apache/iceberg-rust/pull/254#discussion_r1520276689
##########
crates/catalog/rest/src/catalog.rs:
##########
@@ -626,6 +688,14 @@ mod _serde {
}
}
+ #[derive(Debug, Serialize, Deserialize)]
+ pub(super) struct TokenResponse {
+ pub(super) access_token: String,
+ pub(super) token_type: String,
+ pub(super) expires_in: u64,
+ pub(super) issued_token_type: String,
Review Comment:
`issued_token_type` should be optional, here is a python fix for reference,
https://github.com/apache/iceberg-python/pull/466
##########
crates/catalog/rest/src/catalog.rs:
##########
@@ -497,13 +516,56 @@ impl RestCatalog {
client: config.try_create_rest_client()?,
config,
};
-
+ catalog.fetch_access_token().await?;
+ catalog.client = catalog.config.try_create_rest_client()?;
catalog.update_config().await?;
catalog.client = catalog.config.try_create_rest_client()?;
Ok(catalog)
}
+ async fn fetch_access_token(&mut self) -> Result<()> {
+ if self.config.props.contains_key("token") {
+ return Ok(());
+ }
+ if let Some(credential) = self.config.props.get("credential") {
+ let (client_id, client_secret) = if credential.contains(':') {
+ let (client_id, client_secret) =
credential.split_once(':').unwrap();
+ (Some(client_id), client_secret)
+ } else {
+ (None, credential.as_str())
+ };
+ let mut params = HashMap::with_capacity(4);
+ params.insert("grant_type", "client_credentials");
+ if let Some(client_id) = client_id {
+ params.insert("client_id", client_id);
+ }
+ params.insert("client_secret", client_secret);
+ params.insert("scope", "catalog");
Review Comment:
`Scope` should be configurable, and we will also need optional configurable
`audience` and `resource`. Here is the python PR for reference,
https://github.com/apache/iceberg-python/pull/486.
I'd also recommend to group required fields and optional fields, so that the
request is more extendable, which makes it easy to add new parameters in the
future. Here are related discussion,
https://github.com/apache/iceberg/pull/9839#discussion_r1511897858
cc @himadripal
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]