This is an automated email from the ASF dual-hosted git repository.
exceptionfactory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new 785c70cd69 NIFI-13015 Support Sensitive Dynamic Properties in
ExecuteGroovyScript (#9879)
785c70cd69 is described below
commit 785c70cd69871ec63ca2fb732ff5f5f28da0a7c0
Author: Matt Burgess <[email protected]>
AuthorDate: Tue Apr 29 23:00:04 2025 -0400
NIFI-13015 Support Sensitive Dynamic Properties in ExecuteGroovyScript
(#9879)
Signed-off-by: David Handermann <[email protected]>
---
.../processors/groovyx/ExecuteGroovyScript.java | 3 +++
.../processors/groovyx/ExecuteGroovyScriptTest.java | 21 ++++++++++++++++++++-
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git
a/nifi-extension-bundles/nifi-groovyx-bundle/nifi-groovyx-processors/src/main/java/org/apache/nifi/processors/groovyx/ExecuteGroovyScript.java
b/nifi-extension-bundles/nifi-groovyx-bundle/nifi-groovyx-processors/src/main/java/org/apache/nifi/processors/groovyx/ExecuteGroovyScript.java
index 54c6748f96..6e35b44a21 100644
---
a/nifi-extension-bundles/nifi-groovyx-bundle/nifi-groovyx-processors/src/main/java/org/apache/nifi/processors/groovyx/ExecuteGroovyScript.java
+++
b/nifi-extension-bundles/nifi-groovyx-bundle/nifi-groovyx-processors/src/main/java/org/apache/nifi/processors/groovyx/ExecuteGroovyScript.java
@@ -33,6 +33,7 @@ import org.apache.nifi.annotation.behavior.InputRequirement;
import org.apache.nifi.annotation.behavior.Restricted;
import org.apache.nifi.annotation.behavior.Restriction;
import org.apache.nifi.annotation.behavior.Stateful;
+import org.apache.nifi.annotation.behavior.SupportsSensitiveDynamicProperties;
import org.apache.nifi.annotation.documentation.CapabilityDescription;
import org.apache.nifi.annotation.documentation.SeeAlso;
import org.apache.nifi.annotation.documentation.Tags;
@@ -80,6 +81,7 @@ import org.codehaus.groovy.runtime.StackTraceUtils;
@Stateful(scopes = {Scope.LOCAL, Scope.CLUSTER},
description = "Scripts can store and retrieve state using the State
Management APIs. Consult the State Manager section of the Developer's Guide for
more details.")
@SeeAlso(classNames = {"org.apache.nifi.processors.script.ExecuteScript"})
+@SupportsSensitiveDynamicProperties
@DynamicProperty(name = "A script engine property to update",
value = "The value to set it to",
expressionLanguageScope = ExpressionLanguageScope.FLOWFILE_ATTRIBUTES,
@@ -542,6 +544,7 @@ public class ExecuteGroovyScript extends AbstractProcessor {
.identifiesControllerService(RecordSetWriterFactory.class)
.build();
}
+
return new PropertyDescriptor.Builder()
.name(propertyDescriptorName)
.required(false)
diff --git
a/nifi-extension-bundles/nifi-groovyx-bundle/nifi-groovyx-processors/src/test/java/org/apache/nifi/processors/groovyx/ExecuteGroovyScriptTest.java
b/nifi-extension-bundles/nifi-groovyx-bundle/nifi-groovyx-processors/src/test/java/org/apache/nifi/processors/groovyx/ExecuteGroovyScriptTest.java
index 0d0853bc81..556491f074 100644
---
a/nifi-extension-bundles/nifi-groovyx-bundle/nifi-groovyx-processors/src/test/java/org/apache/nifi/processors/groovyx/ExecuteGroovyScriptTest.java
+++
b/nifi-extension-bundles/nifi-groovyx-bundle/nifi-groovyx-processors/src/test/java/org/apache/nifi/processors/groovyx/ExecuteGroovyScriptTest.java
@@ -19,9 +19,12 @@ package org.apache.nifi.processors.groovyx;
import groovy.json.JsonOutput;
import groovy.json.JsonSlurper;
import org.apache.commons.io.FileUtils;
+import org.apache.nifi.components.PropertyDescriptor;
import org.apache.nifi.controller.AbstractControllerService;
import org.apache.nifi.dbcp.DBCPService;
+import org.apache.nifi.expression.ExpressionLanguageScope;
import org.apache.nifi.processor.exception.ProcessException;
+import org.apache.nifi.processor.util.StandardValidators;
import org.apache.nifi.serialization.RecordSetWriterFactory;
import org.apache.nifi.serialization.record.MockRecordParser;
import org.apache.nifi.serialization.record.MockRecordWriter;
@@ -40,7 +43,6 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.DisabledOnOs;
import org.junit.jupiter.api.condition.OS;
import org.junit.jupiter.api.io.TempDir;
-
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
@@ -555,6 +557,23 @@ public class ExecuteGroovyScriptTest {
assertEquals("testDB", ((DBCPServiceSimpleImpl)
dbcp).getDatabaseName());
}
+ @Test
+ public void test_sensitive_dynamic_property() throws Exception {
+ new PropertyDescriptor.Builder()
+ .name("password")
+ .required(false)
+ .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+
.expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
+ .dynamic(true)
+ .sensitive(true)
+ .build();
+ runner.setProperty("password", "MyP@ssW0rd!");
+ runner.setProperty(ExecuteGroovyScript.SCRIPT_BODY,
+ "assert context.getProperties().find {k,v -> k.name ==
'password'}.key.sensitive");
+ runner.assertValid();
+ runner.run();
+ }
+
private HashMap<String, String> map(String key, String value) {
HashMap<String, String> attrs = new HashMap<>();