DRILL-8215: Remove SecurityContext from PluginConfigWrapper
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 c63043e..02c784e 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 @@
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 ff5170d..69d6211 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 @@
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 @@
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 @@
}
@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 2d36f77..0dff081 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 @@
@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 @@
.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 @@
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 @@
}
/**
- * 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 @@
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 8872594..b7f53ae 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>