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

pvillard 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 2cb8411d4f NIFI-13848 Migrated 
AWSCredentialsProviderControllerService's Proxy properties to 
ProxyConfigurationService
2cb8411d4f is described below

commit 2cb8411d4f3008f89396b16d7d1647ad00cb407c
Author: Peter Turcsanyi <[email protected]>
AuthorDate: Tue Oct 8 07:13:29 2024 +0200

    NIFI-13848 Migrated AWSCredentialsProviderControllerService's Proxy 
properties to ProxyConfigurationService
    
    Signed-off-by: Pierre Villard <[email protected]>
    
    This closes #9357.
---
 .../strategies/AssumeRoleCredentialsStrategy.java  | 65 ++++++++++------------
 .../AWSCredentialsProviderControllerService.java   | 41 ++++++--------
 .../provider/service/MockAWSProcessor.java         |  6 +-
 ...entialsProviderControllerServiceStrategies.java | 29 ----------
 4 files changed, 49 insertions(+), 92 deletions(-)

diff --git 
a/nifi-extension-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/credentials/provider/factory/strategies/AssumeRoleCredentialsStrategy.java
 
b/nifi-extension-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/credentials/provider/factory/strategies/AssumeRoleCredentialsStrategy.java
index e89168eb90..33ed1469bd 100644
--- 
a/nifi-extension-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/credentials/provider/factory/strategies/AssumeRoleCredentialsStrategy.java
+++ 
b/nifi-extension-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/credentials/provider/factory/strategies/AssumeRoleCredentialsStrategy.java
@@ -30,6 +30,8 @@ import org.apache.nifi.context.PropertyContext;
 import 
org.apache.nifi.processors.aws.credentials.provider.factory.CredentialsStrategy;
 import org.apache.nifi.processors.aws.signer.AwsCustomSignerUtil;
 import org.apache.nifi.processors.aws.signer.AwsSignerType;
+import org.apache.nifi.proxy.ProxyConfiguration;
+import org.apache.nifi.proxy.ProxyConfigurationService;
 import org.apache.nifi.ssl.SSLContextService;
 import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
 import software.amazon.awssdk.http.apache.ApacheHttpClient;
@@ -40,6 +42,7 @@ import 
software.amazon.awssdk.services.sts.auth.StsAssumeRoleCredentialsProvider
 import software.amazon.awssdk.services.sts.model.AssumeRoleRequest;
 
 import javax.net.ssl.SSLContext;
+import java.net.Proxy;
 import java.net.URI;
 import java.time.Duration;
 import java.util.ArrayList;
@@ -48,8 +51,7 @@ import java.util.Collection;
 import static 
org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderControllerService.ASSUME_ROLE_ARN;
 import static 
org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderControllerService.ASSUME_ROLE_EXTERNAL_ID;
 import static 
org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderControllerService.ASSUME_ROLE_NAME;
-import static 
org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderControllerService.ASSUME_ROLE_PROXY_HOST;
-import static 
org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderControllerService.ASSUME_ROLE_PROXY_PORT;
+import static 
org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderControllerService.ASSUME_ROLE_PROXY_CONFIGURATION_SERVICE;
 import static 
org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderControllerService.ASSUME_ROLE_SSL_CONTEXT_SERVICE;
 import static 
org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderControllerService.ASSUME_ROLE_STS_CUSTOM_SIGNER_CLASS_NAME;
 import static 
org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderControllerService.ASSUME_ROLE_STS_ENDPOINT;
@@ -93,16 +95,6 @@ public class AssumeRoleCredentialsStrategy extends 
AbstractCredentialsStrategy {
         return false;
     }
 
-    protected boolean proxyVariablesValidForAssumeRole(final PropertyContext 
propertyContext) {
-        final String assumeRoleProxyHost = 
propertyContext.getProperty(ASSUME_ROLE_PROXY_HOST).getValue();
-        final String assumeRoleProxyPort = 
propertyContext.getProperty(ASSUME_ROLE_PROXY_PORT).getValue();
-        if (assumeRoleProxyHost != null && !assumeRoleProxyHost.isEmpty()
-                && assumeRoleProxyPort != null && 
!assumeRoleProxyPort.isEmpty()) {
-            return true;
-        }
-        return false;
-    }
-
     @Override
     public Collection<ValidationResult> validate(final ValidationContext 
validationContext,
                                                  final CredentialsStrategy 
primaryStrategy) {
@@ -119,17 +111,6 @@ public class AssumeRoleCredentialsStrategy extends 
AbstractCredentialsStrategy {
                         .explanation(MAX_SESSION_TIME.getDisplayName() +
                                 " must be between 900 and 3600 
seconds").build());
             }
-
-            final boolean assumeRoleProxyHostIsSet = 
validationContext.getProperty(ASSUME_ROLE_PROXY_HOST).isSet();
-            final boolean assumeRoleProxyPortIsSet = 
validationContext.getProperty(ASSUME_ROLE_PROXY_PORT).isSet();
-
-            // Both proxy host and proxy port are required if present
-            if (assumeRoleProxyHostIsSet ^ assumeRoleProxyPortIsSet) {
-                validationFailureResults.add(new 
ValidationResult.Builder().input("Assume Role Proxy Host and Port")
-                        .valid(false)
-                        .explanation("Assume role with proxy requires both 
host and port for the proxy to be set")
-                        .build());
-            }
         }
 
         return validationFailureResults;
@@ -151,6 +132,7 @@ public class AssumeRoleCredentialsStrategy extends 
AbstractCredentialsStrategy {
         final String assumeRoleSTSEndpoint = 
propertyContext.getProperty(ASSUME_ROLE_STS_ENDPOINT).getValue();
         final String assumeRoleSTSSigner = 
propertyContext.getProperty(ASSUME_ROLE_STS_SIGNER_OVERRIDE).getValue();
         final SSLContextService sslContextService = 
propertyContext.getProperty(ASSUME_ROLE_SSL_CONTEXT_SERVICE).asControllerService(SSLContextService.class);
+        final ProxyConfigurationService proxyConfigurationService = 
propertyContext.getProperty(ASSUME_ROLE_PROXY_CONFIGURATION_SERVICE).asControllerService(ProxyConfigurationService.class);
 
         final ClientConfiguration config = new ClientConfiguration();
 
@@ -159,12 +141,16 @@ public class AssumeRoleCredentialsStrategy extends 
AbstractCredentialsStrategy {
             config.getApacheHttpClientConfig().setSslSocketFactory(new 
SSLConnectionSocketFactory(sslContext));
         }
 
-        // If proxy variables are set, then create Client Configuration with 
those values
-        if (proxyVariablesValidForAssumeRole(propertyContext)) {
-            final String assumeRoleProxyHost = 
propertyContext.getProperty(ASSUME_ROLE_PROXY_HOST).getValue();
-            final int assumeRoleProxyPort = 
propertyContext.getProperty(ASSUME_ROLE_PROXY_PORT).asInteger();
-            config.withProxyHost(assumeRoleProxyHost);
-            config.withProxyPort(assumeRoleProxyPort);
+        if (proxyConfigurationService != null) {
+            final ProxyConfiguration proxyConfiguration = 
proxyConfigurationService.getConfiguration();
+            if (proxyConfiguration.getProxyType() == Proxy.Type.HTTP) {
+                config.withProxyHost(proxyConfiguration.getProxyServerHost());
+                config.withProxyPort(proxyConfiguration.getProxyServerPort());
+                if (proxyConfiguration.hasCredential()) {
+                    
config.withProxyUsername(proxyConfiguration.getProxyUserName());
+                    
config.withProxyPassword(proxyConfiguration.getProxyUserPassword());
+                }
+            }
         }
 
         final AwsSignerType assumeRoleSTSSignerType = 
AwsSignerType.forValue(assumeRoleSTSSigner);
@@ -214,6 +200,7 @@ public class AssumeRoleCredentialsStrategy extends 
AbstractCredentialsStrategy {
         final String assumeRoleSTSEndpoint = 
propertyContext.getProperty(ASSUME_ROLE_STS_ENDPOINT).getValue();
         final String stsRegion = 
propertyContext.getProperty(ASSUME_ROLE_STS_REGION).getValue();
         final SSLContextService sslContextService = 
propertyContext.getProperty(ASSUME_ROLE_SSL_CONTEXT_SERVICE).asControllerService(SSLContextService.class);
+        final ProxyConfigurationService proxyConfigurationService = 
propertyContext.getProperty(ASSUME_ROLE_PROXY_CONFIGURATION_SERVICE).asControllerService(ProxyConfigurationService.class);
 
         final StsAssumeRoleCredentialsProvider.Builder builder = 
StsAssumeRoleCredentialsProvider.builder();
 
@@ -224,13 +211,19 @@ public class AssumeRoleCredentialsStrategy extends 
AbstractCredentialsStrategy {
             httpClientBuilder.socketFactory(new 
SSLConnectionSocketFactory(sslContext));
         }
 
-        if (proxyVariablesValidForAssumeRole(propertyContext)) {
-            final String assumeRoleProxyHost = 
propertyContext.getProperty(ASSUME_ROLE_PROXY_HOST).getValue();
-            final int assumeRoleProxyPort = 
propertyContext.getProperty(ASSUME_ROLE_PROXY_PORT).asInteger();
-            final software.amazon.awssdk.http.apache.ProxyConfiguration 
proxyConfig = software.amazon.awssdk.http.apache.ProxyConfiguration.builder()
-                    .endpoint(URI.create(String.format("http://%s:%s";, 
assumeRoleProxyHost, assumeRoleProxyPort)))
-                    .build();
-            httpClientBuilder.proxyConfiguration(proxyConfig);
+        if (proxyConfigurationService != null) {
+            final ProxyConfiguration proxyConfiguration = 
proxyConfigurationService.getConfiguration();
+            if (proxyConfiguration.getProxyType() == Proxy.Type.HTTP) {
+                final 
software.amazon.awssdk.http.apache.ProxyConfiguration.Builder 
proxyConfigBuilder = 
software.amazon.awssdk.http.apache.ProxyConfiguration.builder()
+                        .endpoint(URI.create(String.format("http://%s:%s";, 
proxyConfiguration.getProxyServerHost(), 
proxyConfiguration.getProxyServerPort())));
+
+                if (proxyConfiguration.hasCredential()) {
+                    
proxyConfigBuilder.username(proxyConfiguration.getProxyUserName());
+                    
proxyConfigBuilder.password(proxyConfiguration.getProxyUserPassword());
+                }
+
+                
httpClientBuilder.proxyConfiguration(proxyConfigBuilder.build());
+            }
         }
 
         if (stsRegion == null) {
diff --git 
a/nifi-extension-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/credentials/provider/service/AWSCredentialsProviderControllerService.java
 
b/nifi-extension-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/credentials/provider/service/AWSCredentialsProviderControllerService.java
index 9f7dda4023..eaddc94571 100644
--- 
a/nifi-extension-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/credentials/provider/service/AWSCredentialsProviderControllerService.java
+++ 
b/nifi-extension-bundles/nifi-aws-bundle/nifi-aws-processors/src/main/java/org/apache/nifi/processors/aws/credentials/provider/service/AWSCredentialsProviderControllerService.java
@@ -34,6 +34,8 @@ import org.apache.nifi.context.PropertyContext;
 import org.apache.nifi.controller.AbstractControllerService;
 import org.apache.nifi.controller.ConfigurationContext;
 import org.apache.nifi.expression.ExpressionLanguageScope;
+import org.apache.nifi.migration.PropertyConfiguration;
+import org.apache.nifi.migration.ProxyServiceMigration;
 import org.apache.nifi.processor.exception.ProcessException;
 import org.apache.nifi.processor.util.StandardValidators;
 import 
org.apache.nifi.processors.aws.credentials.provider.factory.CredentialsStrategy;
@@ -44,6 +46,7 @@ import 
org.apache.nifi.processors.aws.credentials.provider.factory.strategies.Ex
 import 
org.apache.nifi.processors.aws.credentials.provider.factory.strategies.FileCredentialsStrategy;
 import 
org.apache.nifi.processors.aws.credentials.provider.factory.strategies.ImplicitDefaultCredentialsStrategy;
 import 
org.apache.nifi.processors.aws.credentials.provider.factory.strategies.NamedProfileCredentialsStrategy;
+import org.apache.nifi.proxy.ProxyConfigurationService;
 import org.apache.nifi.ssl.SSLContextService;
 import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
 import software.amazon.awssdk.regions.Region;
@@ -77,6 +80,10 @@ import static 
org.apache.nifi.processors.aws.signer.AwsSignerType.DEFAULT_SIGNER
 )
 public class AWSCredentialsProviderControllerService extends 
AbstractControllerService implements AWSCredentialsProviderService {
 
+    // Obsolete property names
+    private static final String OBSOLETE_PROXY_HOST = "assume-role-proxy-host";
+    private static final String OBSOLETE_PROXY_PORT = "assume-role-proxy-port";
+
     public static final PropertyDescriptor USE_DEFAULT_CREDENTIALS = new 
PropertyDescriptor.Builder()
         .name("default-credentials")
         .displayName("Use Default Credentials")
@@ -189,28 +196,12 @@ public class AWSCredentialsProviderControllerService 
extends AbstractControllerS
         .dependsOn(ASSUME_ROLE_ARN)
         .build();
 
-    /**
-     * Assume Role Proxy variables for configuring proxy to retrieve keys
-     */
-    public static final PropertyDescriptor ASSUME_ROLE_PROXY_HOST = new 
PropertyDescriptor.Builder()
-        .name("assume-role-proxy-host")
-        .displayName("Assume Role Proxy Host")
-        .expressionLanguageSupported(ExpressionLanguageScope.NONE)
-        .required(false)
-        .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
-        .sensitive(false)
-        .description("Proxy host for cross-account access, if needed within 
your environment. This will configure a proxy to request for temporary access 
keys into another AWS account.")
-        .dependsOn(ASSUME_ROLE_ARN)
-        .build();
-
-    public static final PropertyDescriptor ASSUME_ROLE_PROXY_PORT = new 
PropertyDescriptor.Builder()
-        .name("assume-role-proxy-port")
-        .displayName("Assume Role Proxy Port")
-        .expressionLanguageSupported(ExpressionLanguageScope.NONE)
+    public static final PropertyDescriptor 
ASSUME_ROLE_PROXY_CONFIGURATION_SERVICE = new PropertyDescriptor.Builder()
+        .name("assume-role-proxy-configuration-service")
+        .displayName("Assume Role Proxy Configuration Service")
+        .identifiesControllerService(ProxyConfigurationService.class)
         .required(false)
-        .addValidator(StandardValidators.POSITIVE_INTEGER_VALIDATOR)
-        .sensitive(false)
-        .description("Proxy port for cross-account access, if needed within 
your environment. This will configure a proxy to request for temporary access 
keys into another AWS account.")
+        .description("Proxy configuration for cross-account access, if needed 
within your environment. This will configure a proxy to request for temporary 
access keys into another AWS account.")
         .dependsOn(ASSUME_ROLE_ARN)
         .build();
 
@@ -285,8 +276,7 @@ public class AWSCredentialsProviderControllerService 
extends AbstractControllerS
         MAX_SESSION_TIME,
         ASSUME_ROLE_EXTERNAL_ID,
         ASSUME_ROLE_SSL_CONTEXT_SERVICE,
-        ASSUME_ROLE_PROXY_HOST,
-        ASSUME_ROLE_PROXY_PORT,
+        ASSUME_ROLE_PROXY_CONFIGURATION_SERVICE,
         ASSUME_ROLE_STS_REGION,
         ASSUME_ROLE_STS_ENDPOINT,
         ASSUME_ROLE_STS_SIGNER_OVERRIDE,
@@ -317,6 +307,11 @@ public class AWSCredentialsProviderControllerService 
extends AbstractControllerS
         return PROPERTIES;
     }
 
+    @Override
+    public void migrateProperties(PropertyConfiguration config) {
+        ProxyServiceMigration.migrateProxyProperties(config, 
ASSUME_ROLE_PROXY_CONFIGURATION_SERVICE, OBSOLETE_PROXY_HOST, 
OBSOLETE_PROXY_PORT, null, null);
+    }
+
     @Override
     public AWSCredentialsProvider getCredentialsProvider() throws 
ProcessException {
         return credentialsProvider;
diff --git 
a/nifi-extension-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/credentials/provider/service/MockAWSProcessor.java
 
b/nifi-extension-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/credentials/provider/service/MockAWSProcessor.java
index c61ecca99d..4f4d37494a 100644
--- 
a/nifi-extension-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/credentials/provider/service/MockAWSProcessor.java
+++ 
b/nifi-extension-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/credentials/provider/service/MockAWSProcessor.java
@@ -32,8 +32,7 @@ import java.util.List;
 import static 
org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderControllerService.ASSUME_ROLE_ARN;
 import static 
org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderControllerService.ASSUME_ROLE_EXTERNAL_ID;
 import static 
org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderControllerService.ASSUME_ROLE_NAME;
-import static 
org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderControllerService.ASSUME_ROLE_PROXY_HOST;
-import static 
org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderControllerService.ASSUME_ROLE_PROXY_PORT;
+import static 
org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderControllerService.ASSUME_ROLE_PROXY_CONFIGURATION_SERVICE;
 import static 
org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderControllerService.ASSUME_ROLE_STS_CUSTOM_SIGNER_CLASS_NAME;
 import static 
org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderControllerService.ASSUME_ROLE_STS_CUSTOM_SIGNER_MODULE_LOCATION;
 import static 
org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderControllerService.ASSUME_ROLE_STS_ENDPOINT;
@@ -58,8 +57,7 @@ public class MockAWSProcessor extends 
AbstractAWSCredentialsProviderProcessor<Am
             ASSUME_ROLE_NAME,
             MAX_SESSION_TIME,
             ASSUME_ROLE_EXTERNAL_ID,
-            ASSUME_ROLE_PROXY_HOST,
-            ASSUME_ROLE_PROXY_PORT,
+            ASSUME_ROLE_PROXY_CONFIGURATION_SERVICE,
             ASSUME_ROLE_STS_REGION,
             ASSUME_ROLE_STS_ENDPOINT,
             ASSUME_ROLE_STS_SIGNER_OVERRIDE,
diff --git 
a/nifi-extension-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/credentials/provider/service/TestAWSCredentialsProviderControllerServiceStrategies.java
 
b/nifi-extension-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/credentials/provider/service/TestAWSCredentialsProviderControllerServiceStrategies.java
index ebb571eacb..d6346c1722 100644
--- 
a/nifi-extension-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/credentials/provider/service/TestAWSCredentialsProviderControllerServiceStrategies.java
+++ 
b/nifi-extension-bundles/nifi-aws-bundle/nifi-aws-processors/src/test/java/org/apache/nifi/processors/aws/credentials/provider/service/TestAWSCredentialsProviderControllerServiceStrategies.java
@@ -163,33 +163,4 @@ public class 
TestAWSCredentialsProviderControllerServiceStrategies {
         assertNotNull(credentialsProviderV2);
         
assertEquals(software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider.class,
 credentialsProviderV2.getClass());
     }
-
-
-    @Test
-    public void testAssumeRoleMissingProxyHost() {
-        runner.setProperty(service, 
AWSCredentialsProviderControllerService.CREDENTIALS_FILE, 
"src/test/resources/mock-aws-credentials.properties");
-        runner.setProperty(service, 
AWSCredentialsProviderControllerService.ASSUME_ROLE_ARN, "BogusArn");
-        runner.setProperty(service, 
AWSCredentialsProviderControllerService.ASSUME_ROLE_NAME, "BogusSession");
-        runner.setProperty(service, 
AWSCredentialsProviderControllerService.ASSUME_ROLE_PROXY_PORT, "8080");
-        runner.assertNotValid(service);
-    }
-
-    @Test
-    public void testAssumeRoleMissingProxyPort() {
-        runner.setProperty(service, 
AWSCredentialsProviderControllerService.CREDENTIALS_FILE, 
"src/test/resources/mock-aws-credentials.properties");
-        runner.setProperty(service, 
AWSCredentialsProviderControllerService.ASSUME_ROLE_ARN, "BogusArn");
-        runner.setProperty(service, 
AWSCredentialsProviderControllerService.ASSUME_ROLE_NAME, "BogusSession");
-        runner.setProperty(service, 
AWSCredentialsProviderControllerService.ASSUME_ROLE_PROXY_HOST, 
"proxy.company.com");
-        runner.assertNotValid(service);
-    }
-
-    @Test
-    public void testAssumeRoleInvalidProxyPort() {
-        runner.setProperty(service, 
AWSCredentialsProviderControllerService.CREDENTIALS_FILE, 
"src/test/resources/mock-aws-credentials.properties");
-        runner.setProperty(service, 
AWSCredentialsProviderControllerService.ASSUME_ROLE_ARN, "BogusArn");
-        runner.setProperty(service, 
AWSCredentialsProviderControllerService.ASSUME_ROLE_NAME, "BogusSession");
-        runner.setProperty(service, 
AWSCredentialsProviderControllerService.ASSUME_ROLE_PROXY_HOST, 
"proxy.company.com");
-        runner.setProperty(service, 
AWSCredentialsProviderControllerService.ASSUME_ROLE_PROXY_PORT, "notIntPort");
-        runner.assertNotValid(service);
-    }
 }

Reply via email to