Skip to content

Commit

Permalink
Add one enum entry per kind of credential configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
felipecrv committed Jan 4, 2024
1 parent a4053ad commit ef12c27
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 24 deletions.
45 changes: 26 additions & 19 deletions cpp/src/arrow/filesystem/azurefs.cc
Original file line number Diff line number Diff line change
Expand Up @@ -64,14 +64,17 @@ bool AzureOptions::Equals(const AzureOptions& other) const {
return false;
}
switch (credential_kind_) {
case CredentialKind::kDefaultCredential:
case CredentialKind::kAnonymousCredential:
case CredentialKind::kDefault:
case CredentialKind::kAnonymous:
return true;
case CredentialKind::kTokenCredential:
return token_credential_ == other.token_credential_;
case CredentialKind::kStorageSharedKeyCredential:
case CredentialKind::kStorageSharedKey:
return storage_shared_key_credential_->AccountName ==
other.storage_shared_key_credential_->AccountName;
case CredentialKind::kClientSecret:
case CredentialKind::kManagedIdentity:
case CredentialKind::kWorkloadIdentity:
return token_credential_->GetCredentialName() ==
other.token_credential_->GetCredentialName();
}
DCHECK(false);
return false;
Expand Down Expand Up @@ -106,18 +109,18 @@ std::string AzureOptions::AccountDfsUrl(const std::string& account_name) const {
}

Status AzureOptions::ConfigureDefaultCredential() {
credential_kind_ = CredentialKind::kDefaultCredential;
credential_kind_ = CredentialKind::kDefault;
token_credential_ = std::make_shared<Azure::Identity::DefaultAzureCredential>();
return Status::OK();
}

Status AzureOptions::ConfigureAnonymousCredential() {
credential_kind_ = CredentialKind::kAnonymousCredential;
credential_kind_ = CredentialKind::kAnonymous;
return Status::OK();
}

Status AzureOptions::ConfigureAccountKeyCredential(const std::string& account_key) {
credential_kind_ = CredentialKind::kStorageSharedKeyCredential;
credential_kind_ = CredentialKind::kStorageSharedKey;
if (account_name.empty()) {
return Status::Invalid("AzureOptions doesn't contain a valid account name");
}
Expand All @@ -129,21 +132,21 @@ Status AzureOptions::ConfigureAccountKeyCredential(const std::string& account_ke
Status AzureOptions::ConfigureClientSecretCredential(const std::string& tenant_id,
const std::string& client_id,
const std::string& client_secret) {
credential_kind_ = CredentialKind::kTokenCredential;
credential_kind_ = CredentialKind::kClientSecret;
token_credential_ = std::make_shared<Azure::Identity::ClientSecretCredential>(
tenant_id, client_id, client_secret);
return Status::OK();
}

Status AzureOptions::ConfigureManagedIdentityCredential(const std::string& client_id) {
credential_kind_ = CredentialKind::kTokenCredential;
credential_kind_ = CredentialKind::kManagedIdentity;
token_credential_ =
std::make_shared<Azure::Identity::ManagedIdentityCredential>(client_id);
return Status::OK();
}

Status AzureOptions::ConfigureWorkloadIdentityCredential() {
credential_kind_ = CredentialKind::kTokenCredential;
credential_kind_ = CredentialKind::kWorkloadIdentity;
token_credential_ = std::make_shared<Azure::Identity::WorkloadIdentityCredential>();
return Status::OK();
}
Expand All @@ -154,17 +157,19 @@ Result<std::unique_ptr<Blobs::BlobServiceClient>> AzureOptions::MakeBlobServiceC
return Status::Invalid("AzureOptions doesn't contain a valid account name");
}
switch (credential_kind_) {
case CredentialKind::kAnonymousCredential:
case CredentialKind::kAnonymous:
return std::make_unique<Blobs::BlobServiceClient>(AccountBlobUrl(account_name));
case CredentialKind::kDefaultCredential:
case CredentialKind::kDefault:
if (!token_credential_) {
token_credential_ = std::make_shared<Azure::Identity::DefaultAzureCredential>();
}
[[fallthrough]];
case CredentialKind::kTokenCredential:
case CredentialKind::kClientSecret:
case CredentialKind::kManagedIdentity:
case CredentialKind::kWorkloadIdentity:
return std::make_unique<Blobs::BlobServiceClient>(AccountBlobUrl(account_name),
token_credential_);
case CredentialKind::kStorageSharedKeyCredential:
case CredentialKind::kStorageSharedKey:
return std::make_unique<Blobs::BlobServiceClient>(AccountBlobUrl(account_name),
storage_shared_key_credential_);
}
Expand All @@ -177,18 +182,20 @@ AzureOptions::MakeDataLakeServiceClient() const {
return Status::Invalid("AzureOptions doesn't contain a valid account name");
}
switch (credential_kind_) {
case CredentialKind::kAnonymousCredential:
case CredentialKind::kAnonymous:
return std::make_unique<DataLake::DataLakeServiceClient>(
AccountDfsUrl(account_name));
case CredentialKind::kDefaultCredential:
case CredentialKind::kDefault:
if (!token_credential_) {
token_credential_ = std::make_shared<Azure::Identity::DefaultAzureCredential>();
}
[[fallthrough]];
case CredentialKind::kTokenCredential:
case CredentialKind::kClientSecret:
case CredentialKind::kManagedIdentity:
case CredentialKind::kWorkloadIdentity:
return std::make_unique<DataLake::DataLakeServiceClient>(
AccountDfsUrl(account_name), token_credential_);
case CredentialKind::kStorageSharedKeyCredential:
case CredentialKind::kStorageSharedKey:
return std::make_unique<DataLake::DataLakeServiceClient>(
AccountDfsUrl(account_name), storage_shared_key_credential_);
}
Expand Down
12 changes: 7 additions & 5 deletions cpp/src/arrow/filesystem/azurefs.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,13 @@ struct ARROW_EXPORT AzureOptions {

private:
enum class CredentialKind {
kDefaultCredential,
kAnonymousCredential,
kStorageSharedKeyCredential,
kTokenCredential,
} credential_kind_ = CredentialKind::kDefaultCredential;
kDefault,
kAnonymous,
kStorageSharedKey,
kClientSecret,
kManagedIdentity,
kWorkloadIdentity,
} credential_kind_ = CredentialKind::kDefault;

std::shared_ptr<Azure::Storage::StorageSharedKeyCredential>
storage_shared_key_credential_;
Expand Down

0 comments on commit ef12c27

Please sign in to comment.