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

exceptionfactory pushed a commit to branch support/nifi-1.x
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/support/nifi-1.x by this push:
     new 85a33a088f NIFI-12277 Added SSLContextService to Slack Processors
85a33a088f is described below

commit 85a33a088f0e2946fb5c76716cb85e59f38762d3
Author: Mark Bathori <[email protected]>
AuthorDate: Thu Oct 26 16:51:57 2023 +0200

    NIFI-12277 Added SSLContextService to Slack Processors
    
    This closes #7960
    
    Signed-off-by: David Handermann <[email protected]>
---
 .../nifi-slack-bundle/nifi-slack-nar/pom.xml       |  6 ++++
 .../nifi-slack-processors/pom.xml                  |  1 -
 .../apache/nifi/processors/slack/PostSlack.java    | 34 ++++++++++++++++++----
 .../org/apache/nifi/processors/slack/PutSlack.java | 19 +++++++++++-
 .../apache/nifi/processors/slack/PutSlackTest.java |  3 +-
 5 files changed, 54 insertions(+), 9 deletions(-)

diff --git a/nifi-nar-bundles/nifi-slack-bundle/nifi-slack-nar/pom.xml 
b/nifi-nar-bundles/nifi-slack-bundle/nifi-slack-nar/pom.xml
index 913b4328d4..593908a009 100644
--- a/nifi-nar-bundles/nifi-slack-bundle/nifi-slack-nar/pom.xml
+++ b/nifi-nar-bundles/nifi-slack-bundle/nifi-slack-nar/pom.xml
@@ -35,5 +35,11 @@
             <artifactId>nifi-slack-processors</artifactId>
             <version>1.24.0-SNAPSHOT</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.nifi</groupId>
+            <artifactId>nifi-standard-services-api-nar</artifactId>
+            <version>1.24.0-SNAPSHOT</version>
+            <type>nar</type>
+        </dependency>
     </dependencies>
 </project>
diff --git a/nifi-nar-bundles/nifi-slack-bundle/nifi-slack-processors/pom.xml 
b/nifi-nar-bundles/nifi-slack-bundle/nifi-slack-processors/pom.xml
index 0636bad0b8..0b97f7d967 100644
--- a/nifi-nar-bundles/nifi-slack-bundle/nifi-slack-processors/pom.xml
+++ b/nifi-nar-bundles/nifi-slack-bundle/nifi-slack-processors/pom.xml
@@ -83,7 +83,6 @@
         <dependency>
             <groupId>org.apache.nifi</groupId>
             <artifactId>nifi-ssl-context-service-api</artifactId>
-            <scope>test</scope>
         </dependency>
     </dependencies>
 </project>
diff --git 
a/nifi-nar-bundles/nifi-slack-bundle/nifi-slack-processors/src/main/java/org/apache/nifi/processors/slack/PostSlack.java
 
b/nifi-nar-bundles/nifi-slack-bundle/nifi-slack-processors/src/main/java/org/apache/nifi/processors/slack/PostSlack.java
index f581731764..db534d1274 100644
--- 
a/nifi-nar-bundles/nifi-slack-bundle/nifi-slack-processors/src/main/java/org/apache/nifi/processors/slack/PostSlack.java
+++ 
b/nifi-nar-bundles/nifi-slack-bundle/nifi-slack-processors/src/main/java/org/apache/nifi/processors/slack/PostSlack.java
@@ -20,6 +20,11 @@ import org.apache.http.HttpEntity;
 import org.apache.http.HttpHeaders;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpPost;
+import org.apache.http.config.Registry;
+import org.apache.http.config.RegistryBuilder;
+import org.apache.http.conn.socket.ConnectionSocketFactory;
+import org.apache.http.conn.socket.PlainConnectionSocketFactory;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
 import org.apache.http.entity.ContentType;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.entity.mime.MultipartEntityBuilder;
@@ -48,6 +53,7 @@ import org.apache.nifi.processor.ProcessSession;
 import org.apache.nifi.processor.Relationship;
 import org.apache.nifi.processor.exception.ProcessException;
 import org.apache.nifi.processor.util.StandardValidators;
+import org.apache.nifi.ssl.SSLContextService;
 
 import javax.json.Json;
 import javax.json.JsonArrayBuilder;
@@ -55,6 +61,7 @@ import javax.json.JsonObject;
 import javax.json.JsonObjectBuilder;
 import javax.json.JsonString;
 import javax.json.stream.JsonParsingException;
+import javax.net.ssl.SSLContext;
 import java.io.IOException;
 import java.io.StringReader;
 import java.io.UnsupportedEncodingException;
@@ -184,6 +191,12 @@ public class PostSlack extends AbstractProcessor {
             
.expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES)
             .build();
 
+    public static final PropertyDescriptor SSL_CONTEXT_SERVICE = new 
PropertyDescriptor.Builder()
+            .name("SSL Context Service")
+            .description("Specifies an optional SSL Context Service that, if 
provided, will be used to create connections")
+            .identifiesControllerService(SSLContextService.class)
+            .build();
+
     public static final Relationship REL_SUCCESS = new Relationship.Builder()
             .name("success")
             .description("FlowFiles are routed to success after being 
successfully sent to Slack")
@@ -195,7 +208,7 @@ public class PostSlack extends AbstractProcessor {
             .build();
 
     public static final List<PropertyDescriptor> properties = 
Collections.unmodifiableList(
-            Arrays.asList(POST_MESSAGE_URL, FILE_UPLOAD_URL, ACCESS_TOKEN, 
CHANNEL, TEXT, UPLOAD_FLOWFILE, FILE_TITLE, FILE_NAME, FILE_MIME_TYPE));
+            Arrays.asList(POST_MESSAGE_URL, FILE_UPLOAD_URL, ACCESS_TOKEN, 
CHANNEL, TEXT, UPLOAD_FLOWFILE, FILE_TITLE, FILE_NAME, FILE_MIME_TYPE, 
SSL_CONTEXT_SERVICE));
 
     public static final Set<Relationship> relationships = 
Collections.unmodifiableSet(
             new HashSet<>(Arrays.asList(REL_SUCCESS, REL_FAILURE)));
@@ -232,18 +245,27 @@ public class PostSlack extends AbstractProcessor {
     }
 
     @OnScheduled
-    public void initDynamicProperties(ProcessContext context) {
+    public void onScheduled(ProcessContext context) {
         attachmentProperties.clear();
         attachmentProperties.addAll(
                 context.getProperties().keySet()
                         .stream()
                         .filter(PropertyDescriptor::isDynamic)
                         .collect(Collectors.toList()));
-    }
 
-    @OnScheduled
-    public void initHttpResources() {
-        connManager = new PoolingHttpClientConnectionManager();
+        final SSLContextService sslService = 
context.getProperty(SSL_CONTEXT_SERVICE).asControllerService(SSLContextService.class);
+
+        if (sslService != null) {
+            final SSLContext sslContext = sslService.createContext();
+            final Registry<ConnectionSocketFactory> socketFactoryRegistry = 
RegistryBuilder.<ConnectionSocketFactory>create()
+                    .register("http", 
PlainConnectionSocketFactory.getSocketFactory())
+                    .register("https", new 
SSLConnectionSocketFactory(sslContext))
+                    .build();
+
+            connManager = new 
PoolingHttpClientConnectionManager(socketFactoryRegistry);
+        } else {
+            connManager = new PoolingHttpClientConnectionManager();
+        }
 
         client = HttpClientBuilder.create()
                 .setConnectionManager(connManager)
diff --git 
a/nifi-nar-bundles/nifi-slack-bundle/nifi-slack-processors/src/main/java/org/apache/nifi/processors/slack/PutSlack.java
 
b/nifi-nar-bundles/nifi-slack-bundle/nifi-slack-processors/src/main/java/org/apache/nifi/processors/slack/PutSlack.java
index d32a983e1f..7395c7579b 100644
--- 
a/nifi-nar-bundles/nifi-slack-bundle/nifi-slack-processors/src/main/java/org/apache/nifi/processors/slack/PutSlack.java
+++ 
b/nifi-nar-bundles/nifi-slack-bundle/nifi-slack-processors/src/main/java/org/apache/nifi/processors/slack/PutSlack.java
@@ -33,6 +33,7 @@ import org.apache.nifi.processor.ProcessContext;
 import org.apache.nifi.processor.ProcessSession;
 import org.apache.nifi.processor.Relationship;
 import org.apache.nifi.processor.util.StandardValidators;
+import org.apache.nifi.ssl.SSLContextService;
 
 import javax.json.Json;
 import javax.json.JsonArrayBuilder;
@@ -41,6 +42,8 @@ import javax.json.JsonObjectBuilder;
 import javax.json.JsonReader;
 import javax.json.JsonWriter;
 import javax.json.stream.JsonParsingException;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
 
 import java.io.DataOutputStream;
 import java.io.IOException;
@@ -131,6 +134,12 @@ public class PutSlack extends AbstractProcessor {
             .addValidator(new EmojiValidator())
             .build();
 
+    public static final PropertyDescriptor SSL_CONTEXT_SERVICE = new 
PropertyDescriptor.Builder()
+            .name("SSL Context Service")
+            .description("Specifies an optional SSL Context Service that, if 
provided, will be used to create connections")
+            .identifiesControllerService(SSLContextService.class)
+            .build();
+
     public static final Relationship REL_SUCCESS = new Relationship.Builder()
             .name("success")
             .description("FlowFiles are routed to success after being 
successfully sent to Slack")
@@ -144,7 +153,7 @@ public class PutSlack extends AbstractProcessor {
     private final SortedSet<PropertyDescriptor> attachments = 
Collections.synchronizedSortedSet(new TreeSet<PropertyDescriptor>());
 
     public static final List<PropertyDescriptor> descriptors = 
Collections.unmodifiableList(
-            Arrays.asList(WEBHOOK_URL, WEBHOOK_TEXT, CHANNEL, USERNAME, 
ICON_URL, ICON_EMOJI));
+            Arrays.asList(WEBHOOK_URL, WEBHOOK_TEXT, CHANNEL, USERNAME, 
ICON_URL, ICON_EMOJI, SSL_CONTEXT_SERVICE));
 
     public static final Set<Relationship> relationships = 
Collections.unmodifiableSet(
             new HashSet<>(Arrays.asList(REL_SUCCESS, REL_FAILURE)));
@@ -237,6 +246,8 @@ public class PutSlack extends AbstractProcessor {
             builder.add("icon_emoji", iconEmoji);
         }
 
+        final SSLContextService sslService = 
context.getProperty(SSL_CONTEXT_SERVICE).asControllerService(SSLContextService.class);
+
         try {
             // Get Attachments Array
             if (!attachments.isEmpty()) {
@@ -260,6 +271,12 @@ public class PutSlack extends AbstractProcessor {
             HttpURLConnection conn = (HttpURLConnection) url.openConnection();
             conn.setRequestMethod("POST");
             conn.setDoOutput(true);
+
+            if (sslService != null) {
+                final SSLContext sslContext = sslService.createContext();
+                ((HttpsURLConnection) 
conn).setSSLSocketFactory(sslContext.getSocketFactory());
+            }
+
             DataOutputStream outputStream  = new 
DataOutputStream(conn.getOutputStream());
             String payload = "payload=" + 
URLEncoder.encode(stringWriter.getBuffer().toString(), "UTF-8");
             outputStream.writeBytes(payload);
diff --git 
a/nifi-nar-bundles/nifi-slack-bundle/nifi-slack-processors/src/test/java/org/apache/nifi/processors/slack/PutSlackTest.java
 
b/nifi-nar-bundles/nifi-slack-bundle/nifi-slack-processors/src/test/java/org/apache/nifi/processors/slack/PutSlackTest.java
index 5181f103c4..b2d9290831 100644
--- 
a/nifi-nar-bundles/nifi-slack-bundle/nifi-slack-processors/src/test/java/org/apache/nifi/processors/slack/PutSlackTest.java
+++ 
b/nifi-nar-bundles/nifi-slack-bundle/nifi-slack-processors/src/test/java/org/apache/nifi/processors/slack/PutSlackTest.java
@@ -185,13 +185,14 @@ public class PutSlackTest {
     public void testGetPropertyDescriptors() {
         PutSlack processor = new PutSlack();
         List<PropertyDescriptor> pd = 
processor.getSupportedPropertyDescriptors();
-        assertEquals(6, pd.size(), "size should be eq");
+        assertEquals(7, pd.size(), "size should be eq");
         assertTrue(pd.contains(PutSlack.WEBHOOK_TEXT));
         assertTrue(pd.contains(PutSlack.WEBHOOK_URL));
         assertTrue(pd.contains(PutSlack.CHANNEL));
         assertTrue(pd.contains(PutSlack.USERNAME));
         assertTrue(pd.contains(PutSlack.ICON_URL));
         assertTrue(pd.contains(PutSlack.ICON_EMOJI));
+        assertTrue(pd.contains(PutSlack.SSL_CONTEXT_SERVICE));
     }
 
     @Test

Reply via email to