Skip to content

Commit 5325787

Browse files
exceptionfactorymattyb149
authored andcommitted
NIFI-11744 Added Required Permission to Reference Remote Resources
- Applied Required Permission to components supporting URL Resource References Signed-off-by: Matt Burgess <mattyb149@apache.org>
1 parent 2052f15 commit 5325787

File tree

13 files changed

+134
-1
lines changed

13 files changed

+134
-1
lines changed

nifi-api/src/main/java/org/apache/nifi/components/RequiredPermission.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ public enum RequiredPermission {
3030
ACCESS_KEYTAB("access-keytab", "access keytab"),
3131
ACCESS_TICKET_CACHE("access-ticket-cache", "access ticket cache"),
3232
ACCESS_ENVIRONMENT_CREDENTIALS("access-environment-credentials", "access environment credentials"),
33-
EXPORT_NIFI_DETAILS("export-nifi-details", "export nifi details");
33+
EXPORT_NIFI_DETAILS("export-nifi-details", "export nifi details"),
34+
REFERENCE_REMOTE_RESOURCES("reference-remote-resources", "reference remote resources");
3435

3536
private String permissionIdentifier;
3637
private String permissionLabel;

nifi-nar-bundles/nifi-cdc/nifi-cdc-mysql-bundle/nifi-cdc-mysql-processors/src/main/java/org/apache/nifi/cdc/mysql/processors/CaptureChangeMySQL.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
import org.apache.nifi.annotation.behavior.InputRequirement;
3232
import org.apache.nifi.annotation.behavior.PrimaryNodeOnly;
3333
import org.apache.nifi.annotation.behavior.RequiresInstanceClassLoading;
34+
import org.apache.nifi.annotation.behavior.Restricted;
35+
import org.apache.nifi.annotation.behavior.Restriction;
3436
import org.apache.nifi.annotation.behavior.Stateful;
3537
import org.apache.nifi.annotation.behavior.TriggerSerially;
3638
import org.apache.nifi.annotation.behavior.WritesAttribute;
@@ -65,6 +67,7 @@
6567
import org.apache.nifi.components.AllowableValue;
6668
import org.apache.nifi.components.PropertyDescriptor;
6769
import org.apache.nifi.components.PropertyValue;
70+
import org.apache.nifi.components.RequiredPermission;
6871
import org.apache.nifi.components.ValidationContext;
6972
import org.apache.nifi.components.ValidationResult;
7073
import org.apache.nifi.components.resource.ResourceCardinality;
@@ -151,6 +154,14 @@
151154
+ "application/json")
152155
})
153156
@RequiresInstanceClassLoading
157+
@Restricted(
158+
restrictions = {
159+
@Restriction(
160+
requiredPermission = RequiredPermission.REFERENCE_REMOTE_RESOURCES,
161+
explanation = "Database Driver Location can reference resources over HTTP"
162+
)
163+
}
164+
)
154165
public class CaptureChangeMySQL extends AbstractSessionFactoryProcessor {
155166

156167
// Random invalid constant used as an indicator to not set the binlog position on the client (thereby using the latest available)

nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/main/java/org/apache/nifi/jms/cf/JMSConnectionFactoryProvider.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,15 @@
1717
package org.apache.nifi.jms.cf;
1818

1919
import org.apache.nifi.annotation.behavior.DynamicProperty;
20+
import org.apache.nifi.annotation.behavior.Restricted;
21+
import org.apache.nifi.annotation.behavior.Restriction;
2022
import org.apache.nifi.annotation.documentation.CapabilityDescription;
2123
import org.apache.nifi.annotation.documentation.SeeAlso;
2224
import org.apache.nifi.annotation.documentation.Tags;
2325
import org.apache.nifi.annotation.lifecycle.OnDisabled;
2426
import org.apache.nifi.annotation.lifecycle.OnEnabled;
2527
import org.apache.nifi.components.PropertyDescriptor;
28+
import org.apache.nifi.components.RequiredPermission;
2629
import org.apache.nifi.controller.AbstractControllerService;
2730
import org.apache.nifi.controller.ConfigurationContext;
2831
import org.apache.nifi.expression.ExpressionLanguageScope;
@@ -61,6 +64,14 @@
6164
+ "property and 'com.ibm.mq.jms.MQConnectionFactory.setTransportType(int)' would imply 'transportType' property.",
6265
expressionLanguageScope = ExpressionLanguageScope.VARIABLE_REGISTRY)
6366
@SeeAlso(classNames = {"org.apache.nifi.jms.processors.ConsumeJMS", "org.apache.nifi.jms.processors.PublishJMS"})
67+
@Restricted(
68+
restrictions = {
69+
@Restriction(
70+
requiredPermission = RequiredPermission.REFERENCE_REMOTE_RESOURCES,
71+
explanation = "Client Library Location can reference resources over HTTP"
72+
)
73+
}
74+
)
6475
public class JMSConnectionFactoryProvider extends AbstractControllerService implements JMSConnectionFactoryProviderDefinition, VerifiableControllerService {
6576
private static final String ESTABLISH_CONNECTION = "Establish Connection";
6677
private static final String VERIFY_JMS_INTERACTION = "Verify JMS Interaction";

nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/main/java/org/apache/nifi/jms/processors/ConsumeJMS.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import org.apache.nifi.annotation.behavior.DynamicProperty;
2020
import org.apache.nifi.annotation.behavior.InputRequirement;
2121
import org.apache.nifi.annotation.behavior.InputRequirement.Requirement;
22+
import org.apache.nifi.annotation.behavior.Restricted;
23+
import org.apache.nifi.annotation.behavior.Restriction;
2224
import org.apache.nifi.annotation.behavior.WritesAttribute;
2325
import org.apache.nifi.annotation.behavior.WritesAttributes;
2426
import org.apache.nifi.annotation.documentation.CapabilityDescription;
@@ -27,6 +29,7 @@
2729
import org.apache.nifi.annotation.lifecycle.OnScheduled;
2830
import org.apache.nifi.components.AllowableValue;
2931
import org.apache.nifi.components.PropertyDescriptor;
32+
import org.apache.nifi.components.RequiredPermission;
3033
import org.apache.nifi.components.ValidationContext;
3134
import org.apache.nifi.components.ValidationResult;
3235
import org.apache.nifi.expression.ExpressionLanguageScope;
@@ -94,6 +97,14 @@
9497
"properties of the processor. For more information, see the Additional Details page.",
9598
expressionLanguageScope = ExpressionLanguageScope.VARIABLE_REGISTRY)
9699
@SeeAlso(value = { PublishJMS.class, JMSConnectionFactoryProvider.class })
100+
@Restricted(
101+
restrictions = {
102+
@Restriction(
103+
requiredPermission = RequiredPermission.REFERENCE_REMOTE_RESOURCES,
104+
explanation = "Client Library Location can reference resources over HTTP"
105+
)
106+
}
107+
)
97108
public class ConsumeJMS extends AbstractJMSProcessor<JMSConsumer> {
98109

99110
public static final String JMS_MESSAGETYPE = "jms.messagetype";

nifi-nar-bundles/nifi-jms-bundle/nifi-jms-processors/src/main/java/org/apache/nifi/jms/processors/PublishJMS.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,15 @@
2222
import org.apache.nifi.annotation.behavior.InputRequirement.Requirement;
2323
import org.apache.nifi.annotation.behavior.ReadsAttribute;
2424
import org.apache.nifi.annotation.behavior.ReadsAttributes;
25+
import org.apache.nifi.annotation.behavior.Restricted;
26+
import org.apache.nifi.annotation.behavior.Restriction;
2527
import org.apache.nifi.annotation.behavior.SystemResource;
2628
import org.apache.nifi.annotation.behavior.SystemResourceConsideration;
2729
import org.apache.nifi.annotation.documentation.CapabilityDescription;
2830
import org.apache.nifi.annotation.documentation.SeeAlso;
2931
import org.apache.nifi.annotation.documentation.Tags;
3032
import org.apache.nifi.components.PropertyDescriptor;
33+
import org.apache.nifi.components.RequiredPermission;
3134
import org.apache.nifi.expression.ExpressionLanguageScope;
3235
import org.apache.nifi.flowfile.FlowFile;
3336
import org.apache.nifi.jms.cf.JMSConnectionFactoryProvider;
@@ -102,6 +105,14 @@
102105
expressionLanguageScope = ExpressionLanguageScope.VARIABLE_REGISTRY)
103106
@SeeAlso(value = { ConsumeJMS.class, JMSConnectionFactoryProvider.class })
104107
@SystemResourceConsideration(resource = SystemResource.MEMORY)
108+
@Restricted(
109+
restrictions = {
110+
@Restriction(
111+
requiredPermission = RequiredPermission.REFERENCE_REMOTE_RESOURCES,
112+
explanation = "Client Library Location can reference resources over HTTP"
113+
)
114+
}
115+
)
105116
public class PublishJMS extends AbstractJMSProcessor<JMSPublisher> {
106117

107118
static final PropertyDescriptor MESSAGE_BODY = new PropertyDescriptor.Builder()

nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExtractGrok.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import io.krakens.grok.api.exception.GrokException;
2525
import org.apache.nifi.annotation.behavior.EventDriven;
2626
import org.apache.nifi.annotation.behavior.InputRequirement;
27+
import org.apache.nifi.annotation.behavior.Restricted;
28+
import org.apache.nifi.annotation.behavior.Restriction;
2729
import org.apache.nifi.annotation.behavior.SideEffectFree;
2830
import org.apache.nifi.annotation.behavior.SupportsBatching;
2931
import org.apache.nifi.annotation.behavior.WritesAttribute;
@@ -33,6 +35,7 @@
3335
import org.apache.nifi.annotation.lifecycle.OnScheduled;
3436
import org.apache.nifi.annotation.lifecycle.OnStopped;
3537
import org.apache.nifi.components.PropertyDescriptor;
38+
import org.apache.nifi.components.RequiredPermission;
3639
import org.apache.nifi.components.ValidationContext;
3740
import org.apache.nifi.components.ValidationResult;
3841
import org.apache.nifi.components.resource.ResourceCardinality;
@@ -77,6 +80,14 @@
7780
@WritesAttribute(attribute = "grok.XXX", description = "When operating in flowfile-attribute mode, each of the Grok identifier that is matched in the flowfile " +
7881
"will be added as an attribute, prefixed with \"grok.\" For example," +
7982
"if the grok identifier \"timestamp\" is matched, then the value will be added to an attribute named \"grok.timestamp\"")})
83+
@Restricted(
84+
restrictions = {
85+
@Restriction(
86+
requiredPermission = RequiredPermission.REFERENCE_REMOTE_RESOURCES,
87+
explanation = "Patterns can reference resources over HTTP"
88+
)
89+
}
90+
)
8091
public class ExtractGrok extends AbstractProcessor {
8192

8293
public static final String FLOWFILE_ATTRIBUTE = "flowfile-attribute";

nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ValidateJson.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import com.networknt.schema.ValidationMessage;
2626
import org.apache.nifi.annotation.behavior.InputRequirement;
2727
import org.apache.nifi.annotation.behavior.InputRequirement.Requirement;
28+
import org.apache.nifi.annotation.behavior.Restricted;
29+
import org.apache.nifi.annotation.behavior.Restriction;
2830
import org.apache.nifi.annotation.behavior.SideEffectFree;
2931
import org.apache.nifi.annotation.behavior.SupportsBatching;
3032
import org.apache.nifi.annotation.behavior.SystemResource;
@@ -36,6 +38,7 @@
3638
import org.apache.nifi.annotation.lifecycle.OnScheduled;
3739
import org.apache.nifi.components.DescribedValue;
3840
import org.apache.nifi.components.PropertyDescriptor;
41+
import org.apache.nifi.components.RequiredPermission;
3942
import org.apache.nifi.components.resource.ResourceCardinality;
4043
import org.apache.nifi.components.resource.ResourceType;
4144
import org.apache.nifi.flowfile.FlowFile;
@@ -64,6 +67,14 @@
6467
})
6568
@CapabilityDescription("Validates the contents of FlowFiles against a configurable JSON Schema. See json-schema.org for specification standards.")
6669
@SystemResourceConsideration(resource = SystemResource.MEMORY, description = "Validating JSON requires reading FlowFile content into memory")
70+
@Restricted(
71+
restrictions = {
72+
@Restriction(
73+
requiredPermission = RequiredPermission.REFERENCE_REMOTE_RESOURCES,
74+
explanation = "Schema configuration can reference resources over HTTP"
75+
)
76+
}
77+
)
6778
public class ValidateJson extends AbstractProcessor {
6879
public enum SchemaVersion implements DescribedValue {
6980
DRAFT_4("Draft Version 4", "Draft 4", VersionFlag.V4),

nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ValidateXml.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import org.apache.nifi.annotation.behavior.EventDriven;
2020
import org.apache.nifi.annotation.behavior.InputRequirement;
2121
import org.apache.nifi.annotation.behavior.InputRequirement.Requirement;
22+
import org.apache.nifi.annotation.behavior.Restricted;
23+
import org.apache.nifi.annotation.behavior.Restriction;
2224
import org.apache.nifi.annotation.behavior.SideEffectFree;
2325
import org.apache.nifi.annotation.behavior.SupportsBatching;
2426
import org.apache.nifi.annotation.behavior.SystemResource;
@@ -29,6 +31,7 @@
2931
import org.apache.nifi.annotation.documentation.Tags;
3032
import org.apache.nifi.annotation.lifecycle.OnScheduled;
3133
import org.apache.nifi.components.PropertyDescriptor;
34+
import org.apache.nifi.components.RequiredPermission;
3235
import org.apache.nifi.components.resource.ResourceCardinality;
3336
import org.apache.nifi.components.resource.ResourceType;
3437
import org.apache.nifi.expression.ExpressionLanguageScope;
@@ -81,6 +84,14 @@
8184
+ "to ensure the XML syntax is correct and well-formed, e.g. all opening tags are properly closed.")
8285
@SystemResourceConsideration(resource = SystemResource.MEMORY, description = "While this processor supports processing XML within attributes, it is strongly discouraged to hold "
8386
+ "large amounts of data in attributes. In general, attribute values should be as small as possible and hold no more than a couple hundred characters.")
87+
@Restricted(
88+
restrictions = {
89+
@Restriction(
90+
requiredPermission = RequiredPermission.REFERENCE_REMOTE_RESOURCES,
91+
explanation = "Schema configuration can reference resources over HTTP"
92+
)
93+
}
94+
)
8495
public class ValidateXml extends AbstractProcessor {
8596

8697
public static final String ERROR_ATTRIBUTE_KEY = "validatexml.invalid.error";

nifi-nar-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-dbcp-service/src/main/java/org/apache/nifi/dbcp/DBCPConnectionPool.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,14 @@
2121
import org.apache.nifi.annotation.behavior.DynamicProperties;
2222
import org.apache.nifi.annotation.behavior.DynamicProperty;
2323
import org.apache.nifi.annotation.behavior.RequiresInstanceClassLoading;
24+
import org.apache.nifi.annotation.behavior.Restricted;
25+
import org.apache.nifi.annotation.behavior.Restriction;
2426
import org.apache.nifi.annotation.behavior.SupportsSensitiveDynamicProperties;
2527
import org.apache.nifi.annotation.documentation.CapabilityDescription;
2628
import org.apache.nifi.annotation.documentation.Tags;
2729
import org.apache.nifi.components.PropertyDescriptor;
2830
import org.apache.nifi.components.PropertyValue;
31+
import org.apache.nifi.components.RequiredPermission;
2932
import org.apache.nifi.components.ValidationContext;
3033
import org.apache.nifi.components.ValidationResult;
3134
import org.apache.nifi.controller.ConfigurationContext;
@@ -86,6 +89,14 @@
8689
description = "JDBC driver property name prefixed with 'SENSITIVE.' handled as a sensitive property.")
8790
})
8891
@RequiresInstanceClassLoading
92+
@Restricted(
93+
restrictions = {
94+
@Restriction(
95+
requiredPermission = RequiredPermission.REFERENCE_REMOTE_RESOURCES,
96+
explanation = "Database Driver Location can reference resources over HTTP"
97+
)
98+
}
99+
)
89100
public class DBCPConnectionPool extends AbstractDBCPConnectionPool implements DBCPService, VerifiableControllerService {
90101
/**
91102
* Property Name Prefix for Sensitive Dynamic Properties

nifi-nar-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-hikari-dbcp-service/src/main/java/org/apache/nifi/dbcp/HikariCPConnectionPool.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,16 @@
2020
import org.apache.commons.lang3.StringUtils;
2121
import org.apache.nifi.annotation.behavior.DynamicProperty;
2222
import org.apache.nifi.annotation.behavior.RequiresInstanceClassLoading;
23+
import org.apache.nifi.annotation.behavior.Restricted;
24+
import org.apache.nifi.annotation.behavior.Restriction;
2325
import org.apache.nifi.annotation.behavior.SupportsSensitiveDynamicProperties;
2426
import org.apache.nifi.annotation.documentation.CapabilityDescription;
2527
import org.apache.nifi.annotation.documentation.Tags;
2628
import org.apache.nifi.annotation.lifecycle.OnDisabled;
2729
import org.apache.nifi.annotation.lifecycle.OnEnabled;
2830
import org.apache.nifi.components.PropertyDescriptor;
2931
import org.apache.nifi.components.PropertyValue;
32+
import org.apache.nifi.components.RequiredPermission;
3033
import org.apache.nifi.components.resource.ResourceCardinality;
3134
import org.apache.nifi.components.resource.ResourceType;
3235
import org.apache.nifi.controller.AbstractControllerService;
@@ -60,6 +63,14 @@
6063
description = "Specifies a property name and value to be set on the JDBC connection(s). "
6164
+ "If Expression Language is used, evaluation will be performed upon the controller service being enabled. "
6265
+ "Note that no flow file input (attributes, e.g.) is available for use in Expression Language constructs for these properties.")
66+
@Restricted(
67+
restrictions = {
68+
@Restriction(
69+
requiredPermission = RequiredPermission.REFERENCE_REMOTE_RESOURCES,
70+
explanation = "Database Driver Location can reference resources over HTTP"
71+
)
72+
}
73+
)
6374
public class HikariCPConnectionPool extends AbstractControllerService implements DBCPService {
6475
/**
6576
* Property Name Prefix for Sensitive Dynamic Properties

nifi-nar-bundles/nifi-standard-services/nifi-hadoop-dbcp-service-bundle/nifi-hadoop-dbcp-service/src/main/java/org/apache/nifi/dbcp/HadoopDBCPConnectionPool.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,15 @@
2323
import org.apache.hadoop.security.UserGroupInformation;
2424
import org.apache.nifi.annotation.behavior.DynamicProperty;
2525
import org.apache.nifi.annotation.behavior.RequiresInstanceClassLoading;
26+
import org.apache.nifi.annotation.behavior.Restricted;
27+
import org.apache.nifi.annotation.behavior.Restriction;
2628
import org.apache.nifi.annotation.documentation.CapabilityDescription;
2729
import org.apache.nifi.annotation.documentation.Tags;
2830
import org.apache.nifi.annotation.lifecycle.OnDisabled;
2931
import org.apache.nifi.annotation.lifecycle.OnEnabled;
3032
import org.apache.nifi.components.PropertyDescriptor;
3133
import org.apache.nifi.components.PropertyValue;
34+
import org.apache.nifi.components.RequiredPermission;
3235
import org.apache.nifi.components.ValidationContext;
3336
import org.apache.nifi.components.ValidationResult;
3437
import org.apache.nifi.components.resource.ResourceCardinality;
@@ -76,6 +79,14 @@
7679
@DynamicProperty(name = "The name of a Hadoop configuration property.", value = "The value of the given Hadoop configuration property.",
7780
description = "These properties will be set on the Hadoop configuration after loading any provided configuration files.",
7881
expressionLanguageScope = ExpressionLanguageScope.VARIABLE_REGISTRY)
82+
@Restricted(
83+
restrictions = {
84+
@Restriction(
85+
requiredPermission = RequiredPermission.REFERENCE_REMOTE_RESOURCES,
86+
explanation = "Database Driver Location can reference resources over HTTP"
87+
)
88+
}
89+
)
7990
public class HadoopDBCPConnectionPool extends AbstractControllerService implements DBCPService {
8091

8192
private static final String ALLOW_EXPLICIT_KEYTAB = "NIFI_ALLOW_EXPLICIT_KEYTAB";

nifi-nar-bundles/nifi-standard-services/nifi-hbase_2-client-service-bundle/nifi-hbase_2-client-service/src/main/java/org/apache/nifi/hbase/HBase_2_ClientService.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,14 @@
4242
import org.apache.hadoop.security.UserGroupInformation;
4343
import org.apache.nifi.annotation.behavior.DynamicProperty;
4444
import org.apache.nifi.annotation.behavior.RequiresInstanceClassLoading;
45+
import org.apache.nifi.annotation.behavior.Restricted;
46+
import org.apache.nifi.annotation.behavior.Restriction;
4547
import org.apache.nifi.annotation.documentation.CapabilityDescription;
4648
import org.apache.nifi.annotation.documentation.Tags;
4749
import org.apache.nifi.annotation.lifecycle.OnDisabled;
4850
import org.apache.nifi.annotation.lifecycle.OnEnabled;
4951
import org.apache.nifi.components.PropertyDescriptor;
52+
import org.apache.nifi.components.RequiredPermission;
5053
import org.apache.nifi.components.ValidationContext;
5154
import org.apache.nifi.components.ValidationResult;
5255
import org.apache.nifi.components.resource.ResourceCardinality;
@@ -93,6 +96,14 @@
9396
"configuration.")
9497
@DynamicProperty(name="The name of an HBase configuration property.", value="The value of the given HBase configuration property.",
9598
description="These properties will be set on the HBase configuration after loading any provided configuration files.")
99+
@Restricted(
100+
restrictions = {
101+
@Restriction(
102+
requiredPermission = RequiredPermission.REFERENCE_REMOTE_RESOURCES,
103+
explanation = "Client JAR Location can reference resources over HTTP"
104+
)
105+
}
106+
)
96107
public class HBase_2_ClientService extends AbstractControllerService implements HBaseClientService {
97108
private static final String ALLOW_EXPLICIT_KEYTAB = "NIFI_ALLOW_EXPLICIT_KEYTAB";
98109

0 commit comments

Comments
 (0)