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]

Reply via email to