This is an automated email from the ASF dual-hosted git repository.

dzamo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/drill.git


The following commit(s) were added to refs/heads/master by this push:
     new cee569f42f DRILL-8215: Remove SecurityContext from PluginConfigWrapper
cee569f42f is described below

commit cee569f42f22c99597bf3d9c742aee09a4a928be
Author: Charles S. Givre <[email protected]>
AuthorDate: Mon May 9 05:05:05 2022 -0400

    DRILL-8215: Remove SecurityContext from PluginConfigWrapper
---
 .../exec/server/rest/CredentialResources.java      | 11 +++++++--
 .../exec/server/rest/PluginConfigWrapper.java      | 17 ++++---------
 .../drill/exec/server/rest/StorageResources.java   | 28 ++++++++++++++++++----
 .../src/main/resources/rest/credentials/list.ftl   |  4 +++-
 4 files changed, 41 insertions(+), 19 deletions(-)

diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/CredentialResources.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/CredentialResources.java
index c63043e7e3..02c784ea0d 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/CredentialResources.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/CredentialResources.java
@@ -125,11 +125,18 @@ public class CredentialResources {
       default:
         return Collections.emptyList();
     }
-    return StreamSupport.stream(
+    List<PluginConfigWrapper> results = StreamSupport.stream(
         
Spliterators.spliteratorUnknownSize(storage.storedConfigs(filter).entrySet().iterator(),
 Spliterator.ORDERED), false)
-      .map(entry -> new PluginConfigWrapper(entry.getKey(), entry.getValue(), 
sc))
+      .map(entry -> new PluginConfigWrapper(entry.getKey(), entry.getValue()))
       .sorted(PLUGIN_COMPARATOR)
       .collect(Collectors.toList());
+
+    if (results.isEmpty()) {
+      return Collections.emptyList();
+    } else {
+      return results;
+    }
+
   }
 
   @POST
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/PluginConfigWrapper.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/PluginConfigWrapper.java
index ff5170db64..69d621178e 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/PluginConfigWrapper.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/PluginConfigWrapper.java
@@ -19,10 +19,8 @@ package org.apache.drill.exec.server.rest;
 
 import java.util.Optional;
 
-import javax.ws.rs.core.SecurityContext;
 import javax.xml.bind.annotation.XmlRootElement;
 
-import com.fasterxml.jackson.annotation.JacksonInject;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import org.apache.drill.common.logical.CredentialedStoragePluginConfig;
 import org.apache.drill.common.logical.StoragePluginConfig;
@@ -39,15 +37,12 @@ import 
org.apache.drill.exec.store.security.oauth.OAuthTokenCredentials;
 public class PluginConfigWrapper {
   private final String name;
   private final StoragePluginConfig config;
-  private final SecurityContext sc;
 
   @JsonCreator
   public PluginConfigWrapper(@JsonProperty("name") String name,
-                             @JsonProperty("config") StoragePluginConfig 
config,
-                             @JacksonInject SecurityContext sc) {
+                             @JsonProperty("config") StoragePluginConfig 
config) {
     this.name = name;
     this.config = config;
-    this.sc = sc;
   }
 
   public String getName() { return name; }
@@ -59,34 +54,32 @@ public class PluginConfigWrapper {
   }
 
   @JsonIgnore
-  public String getUserName() {
+  public String getUserName(String activeUser) {
     if (!(config instanceof CredentialedStoragePluginConfig)) {
       return null;
     }
 
     CredentialedStoragePluginConfig securedStoragePluginConfig = 
(CredentialedStoragePluginConfig) config;
     CredentialsProvider credentialsProvider = 
securedStoragePluginConfig.getCredentialsProvider();
-    String queryUser = sc.getUserPrincipal().getName();
     Optional<UsernamePasswordCredentials> credentials = new 
UsernamePasswordCredentials.Builder()
       .setCredentialsProvider(credentialsProvider)
-      .setQueryUser(queryUser)
+      .setQueryUser(activeUser)
       .build();
 
     return 
credentials.map(UsernamePasswordCredentials::getUsername).orElse(null);
   }
 
   @JsonIgnore
-  public String getPassword() {
+  public String getPassword(String activeUser) {
     if (!(config instanceof CredentialedStoragePluginConfig)) {
       return null;
     }
 
     CredentialedStoragePluginConfig securedStoragePluginConfig = 
(CredentialedStoragePluginConfig) config;
     CredentialsProvider credentialsProvider = 
securedStoragePluginConfig.getCredentialsProvider();
-    String queryUser = sc.getUserPrincipal().getName();
     Optional<UsernamePasswordCredentials> credentials = new 
UsernamePasswordCredentials.Builder()
       .setCredentialsProvider(credentialsProvider)
-      .setQueryUser(queryUser)
+      .setQueryUser(activeUser)
       .build();
 
     return 
credentials.map(UsernamePasswordCredentials::getPassword).orElse(null);
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/StorageResources.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/StorageResources.java
index 2d36f77998..0dff0818b1 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/StorageResources.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/StorageResources.java
@@ -163,7 +163,7 @@ public class StorageResources {
   @Operation(externalDocs = @ExternalDocumentation(description = "Apache Drill 
REST API documentation:", url = 
"https://drill.apache.org/docs/rest-api-introduction/";))
   public Response getPluginConfig(@PathParam("name") String name) {
     try {
-      return Response.ok(new PluginConfigWrapper(name, 
storage.getStoredConfig(name), sc))
+      return Response.ok(new PluginConfigWrapper(name, 
storage.getStoredConfig(name)))
         .build();
     } catch (Exception e) {
       logger.error("Failure while trying to access storage config: {}", name, 
e);
@@ -389,7 +389,7 @@ public class StorageResources {
         .build();
     }
 
-    return Response.ok(new PluginConfigWrapper(name, 
storage.getStoredConfig(name), sc))
+    return Response.ok(new PluginConfigWrapper(name, 
storage.getStoredConfig(name)))
       .header(HttpHeaders.CONTENT_DISPOSITION, 
String.format("attachment;filename=\"%s.%s\"", name, format))
       .build();
   }
@@ -511,7 +511,7 @@ public class StorageResources {
     pluginGroup = StringUtils.isNotEmpty(pluginGroup) ? 
pluginGroup.replace("/", "") : ALL_PLUGINS;
     return StreamSupport.stream(
       
Spliterators.spliteratorUnknownSize(storage.storedConfigs(filter).entrySet().iterator(),
 Spliterator.ORDERED), false)
-        .map(entry -> new PluginConfigWrapper(entry.getKey(), 
entry.getValue(), sc))
+        .map(entry -> new PluginConfigWrapper(entry.getKey(), 
entry.getValue()))
         .sorted(PLUGIN_COMPARATOR)
         .collect(Collectors.toList());
   }
@@ -554,7 +554,7 @@ public class StorageResources {
   }
 
   /**
-   * Model class for Storage Plugin page.
+   * Model class for Storage Plugin and Credentials page.
    * It contains a storage plugin as well as the CSRF token for the page.
    */
   public static class StoragePluginModel {
@@ -579,6 +579,26 @@ public class StorageResources {
       return securityContext.getUserPrincipal().getName();
     }
 
+    public String getUserName() {
+      String username = plugin.getUserName(getActiveUser());
+      if (StringUtils.isEmpty(username)) {
+        return "";
+      }
+      else {
+        return username;
+      }
+    }
+
+    public String getPassword() {
+      String password = plugin.getPassword(getActiveUser());
+      if (StringUtils.isEmpty(password)) {
+        return "";
+      }
+      else {
+        return password;
+      }
+    }
+
     public String getType() {
       return type;
     }
diff --git a/exec/java-exec/src/main/resources/rest/credentials/list.ftl 
b/exec/java-exec/src/main/resources/rest/credentials/list.ftl
index 8872594177..b7f53ae1af 100644
--- a/exec/java-exec/src/main/resources/rest/credentials/list.ftl
+++ b/exec/java-exec/src/main/resources/rest/credentials/list.ftl
@@ -42,17 +42,19 @@
       <table class="table table-hover">
         <tbody>
         <#list model as pluginModel>
+          <#if pluginModel.getPlugin()?? >
           <tr>
             <td style="border:none; max-width: 200px; overflow: hidden; 
text-overflow: ellipsis;">
                 ${pluginModel.getPlugin().getName()}
             </td>
             <td style="border:none;">
               <button type="button" class="btn btn-primary" 
data-toggle="modal" data-target="#new-plugin-modal" 
data-plugin="${pluginModel.getPlugin().getName()}"
-                      data-username="${pluginModel.getPlugin().getUserName()}" 
data-password="${pluginModel.getPlugin().getPassword()}">
+                      data-username="${pluginModel.getUserName()}" 
data-password="${pluginModel.getPassword()}">
                 Update Credentials
               </button>
             </td>
           </tr>
+          </#if>
         </#list>
         </tbody>
       </table>

Reply via email to