FANNG1 commented on code in PR #5682:
URL: https://github.com/apache/gravitino/pull/5682#discussion_r1897158757
##########
core/src/main/java/org/apache/gravitino/connector/BaseCatalog.java:
##########
@@ -272,6 +293,48 @@ public Capability capability() {
return capability;
}
+ public List<Credential> getCredentials(
+ NameIdentifier nameIdentifier, CredentialPrivilege privilege) {
+ Map<String, CredentialContext> contexts =
getCredentialContexts(nameIdentifier, privilege);
+ return contexts.entrySet().stream()
+ .map(entry ->
getCatalogCredentialManager().getCredential(entry.getKey(), entry.getValue()))
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
+ }
+
+ private CatalogCredentialProvider getCatalogCredentialManager() {
+ if (catalogCredentialProvider == null) {
+ synchronized (this) {
+ if (catalogCredentialProvider == null) {
+ this.catalogCredentialProvider = new
CatalogCredentialProvider(name(), properties());
+ }
+ }
+ }
+ return catalogCredentialProvider;
+ }
+
+ private Map<String, CredentialContext> getCredentialContexts(
+ NameIdentifier nameIdentifier, CredentialPrivilege privilege) {
+ if
(nameIdentifier.equals(NameIdentifierUtil.getCatalogIdentifier(nameIdentifier)))
{
+ return getCatalogCredentialContexts();
+ }
+
+ if (ops() instanceof SupportsPathBasedCredentials) {
+ List<PathWithCredentialType> pathWithCredentialTypes =
+ ((SupportsPathBasedCredentials)
ops()).getPathWithCredentialTypes(nameIdentifier);
+ return CredentialUtils.getPathBasedCredentialContexts(privilege,
pathWithCredentialTypes);
+ }
+ throw new NotSupportedException(
+ String.format("Catalog %s doesn't support generate credentials",
name()));
+ }
+
+ private Map<String, CredentialContext> getCatalogCredentialContexts() {
+ CatalogCredentialContext context =
+ new CatalogCredentialContext(PrincipalUtils.getCurrentUserName());
+ Set<String> providers = CredentialUtils.getCredentialProviders(() ->
properties());
+ return providers.stream().collect(Collectors.toMap(provider -> provider,
provider -> context));
+ }
Review Comment:
`CredentialOperationDispatcher` is used to use catalog specific resource to
generate credentials.
`CatalogCredentialOperationDispatcher` manages the life of catalog
credential provider and dispatch request to corresponding credential provider.
WDYT of the naming?
--
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]