diff --git a/nifi-extension-bundles/nifi-extension-utils/nifi-migration-utils/src/main/java/org/apache/nifi/migration/ProxyServiceMigration.java b/nifi-extension-bundles/nifi-extension-utils/nifi-migration-utils/src/main/java/org/apache/nifi/migration/ProxyServiceMigration.java index b9ede07db62d..019318f0990d 100644 --- a/nifi-extension-bundles/nifi-extension-utils/nifi-migration-utils/src/main/java/org/apache/nifi/migration/ProxyServiceMigration.java +++ b/nifi-extension-bundles/nifi-extension-utils/nifi-migration-utils/src/main/java/org/apache/nifi/migration/ProxyServiceMigration.java @@ -35,7 +35,7 @@ public final class ProxyServiceMigration { private ProxyServiceMigration() { } /** - * Migrates component level proxy properties to ProxyConfigurationService. + * Migrates component level proxy properties to ProxyConfigurationService with HTTP proxy type. * * @param config the component's property config to be migrated * @param proxyServiceProperty the component's property descriptor referencing ProxyConfigurationService @@ -47,9 +47,50 @@ private ProxyServiceMigration() { } public static void migrateProxyProperties(final PropertyConfiguration config, final PropertyDescriptor proxyServiceProperty, final String proxyHostProperty, final String proxyPortProperty, final String proxyUsernameProperty, final String proxyPasswordProperty) { + migrateProxyProperties(config, + proxyServiceProperty, + Proxy.Type.HTTP, + proxyHostProperty, + proxyPortProperty, + proxyUsernameProperty, + proxyPasswordProperty); + } + + /** + * Migrates component level proxy properties to ProxyConfigurationService with the specified proxy type. + * + * @param config the component's property config to be migrated + * @param proxyServiceProperty the component's property descriptor referencing ProxyConfigurationService + * @param proxyTypeProperty the name of the component level Proxy Type property + * @param proxyHostProperty the name of the component level Proxy Host property + * @param proxyPortProperty the name of the component level Proxy Port property + * @param proxyUsernameProperty the name of the component level Proxy Username property + * @param proxyPasswordProperty the name of the component level Proxy Password property + */ + public static void migrateProxyProperties(final PropertyConfiguration config, final PropertyDescriptor proxyServiceProperty, + final String proxyTypeProperty, + final String proxyHostProperty, final String proxyPortProperty, + final String proxyUsernameProperty, final String proxyPasswordProperty) { + final Proxy.Type proxyType = Proxy.Type.valueOf(config.getRawPropertyValue(proxyTypeProperty).orElse(Proxy.Type.DIRECT.name())); + + migrateProxyProperties(config, + proxyServiceProperty, + proxyType, + proxyHostProperty, + proxyPortProperty, + proxyUsernameProperty, + proxyPasswordProperty); + + config.removeProperty(proxyTypeProperty); + } + + private static void migrateProxyProperties(final PropertyConfiguration config, final PropertyDescriptor proxyServiceProperty, + final Proxy.Type proxyType, + final String proxyHostProperty, final String proxyPortProperty, + final String proxyUsernameProperty, final String proxyPasswordProperty) { if (config.isPropertySet(proxyHostProperty)) { final Map proxyProperties = new HashMap<>(); - proxyProperties.put(PROXY_SERVICE_TYPE, Proxy.Type.HTTP.name()); + proxyProperties.put(PROXY_SERVICE_TYPE, proxyType.name()); proxyProperties.put(PROXY_SERVICE_HOST, config.getRawPropertyValue(proxyHostProperty).get()); // Map any optional proxy configs diff --git a/nifi-extension-bundles/nifi-extension-utils/nifi-migration-utils/src/test/java/org/apache/nifi/migration/ProxyServiceMigrationTest.java b/nifi-extension-bundles/nifi-extension-utils/nifi-migration-utils/src/test/java/org/apache/nifi/migration/ProxyServiceMigrationTest.java index 05d3dee837a9..a9d710246974 100644 --- a/nifi-extension-bundles/nifi-extension-utils/nifi-migration-utils/src/test/java/org/apache/nifi/migration/ProxyServiceMigrationTest.java +++ b/nifi-extension-bundles/nifi-extension-utils/nifi-migration-utils/src/test/java/org/apache/nifi/migration/ProxyServiceMigrationTest.java @@ -35,18 +35,20 @@ class ProxyServiceMigrationTest { .name("proxy-service") .build(); + private static final String OBSOLETE_PROXY_TYPE = "proxy-type"; private static final String OBSOLETE_PROXY_HOST = "proxy-host"; private static final String OBSOLETE_PROXY_PORT = "proxy-port"; private static final String OBSOLETE_PROXY_USERNAME = "proxy-username"; private static final String OBSOLETE_PROXY_PASSWORD = "proxy-password"; + private static final String PROXY_TYPE_VALUE = "SOCKS"; private static final String PROXY_HOST_VALUE = "localhost"; private static final String PROXY_PORT_VALUE = "8888"; private static final String PROXY_USERNAME_VALUE = "user"; private static final String PROXY_PASSWORD_VALUE = "pass"; @Test - void testMigrateProxyProperties() { + void testMigrateProxyPropertiesWithDefaultProxyType() { final Map properties = Map.of( OBSOLETE_PROXY_HOST, PROXY_HOST_VALUE, OBSOLETE_PROXY_PORT, PROXY_PORT_VALUE, @@ -81,4 +83,43 @@ void testMigrateProxyProperties() { ), createdService.serviceProperties()); } + + @Test + void testMigrateProxyPropertiesWithCustomProxyType() { + final Map properties = Map.of( + OBSOLETE_PROXY_TYPE, PROXY_TYPE_VALUE, + OBSOLETE_PROXY_HOST, PROXY_HOST_VALUE, + OBSOLETE_PROXY_PORT, PROXY_PORT_VALUE, + OBSOLETE_PROXY_USERNAME, PROXY_USERNAME_VALUE, + OBSOLETE_PROXY_PASSWORD, PROXY_PASSWORD_VALUE + ); + final MockPropertyConfiguration config = new MockPropertyConfiguration(properties); + + ProxyServiceMigration.migrateProxyProperties(config, PROXY_SERVICE, OBSOLETE_PROXY_TYPE, OBSOLETE_PROXY_HOST, OBSOLETE_PROXY_PORT, OBSOLETE_PROXY_USERNAME, OBSOLETE_PROXY_PASSWORD); + + assertFalse(config.hasProperty(OBSOLETE_PROXY_TYPE)); + assertFalse(config.hasProperty(OBSOLETE_PROXY_HOST)); + assertFalse(config.hasProperty(OBSOLETE_PROXY_PORT)); + assertFalse(config.hasProperty(OBSOLETE_PROXY_USERNAME)); + assertFalse(config.hasProperty(OBSOLETE_PROXY_PASSWORD)); + + assertTrue(config.isPropertySet(PROXY_SERVICE)); + + PropertyMigrationResult result = config.toPropertyMigrationResult(); + assertEquals(1, result.getCreatedControllerServices().size()); + + final CreatedControllerService createdService = result.getCreatedControllerServices().iterator().next(); + + assertEquals(config.getRawPropertyValue(PROXY_SERVICE).get(), createdService.id()); + assertEquals(ProxyServiceMigration.PROXY_SERVICE_CLASSNAME, createdService.implementationClassName()); + + assertEquals(Map.of( + ProxyServiceMigration.PROXY_SERVICE_TYPE, Proxy.Type.SOCKS.name(), + ProxyServiceMigration.PROXY_SERVICE_HOST, PROXY_HOST_VALUE, + ProxyServiceMigration.PROXY_SERVICE_PORT, PROXY_PORT_VALUE, + ProxyServiceMigration.PROXY_SERVICE_USERNAME, PROXY_USERNAME_VALUE, + ProxyServiceMigration.PROXY_SERVICE_PASSWORD, PROXY_PASSWORD_VALUE + ), + createdService.serviceProperties()); + } } diff --git a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/pom.xml b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/pom.xml index c8e382e19874..be454f9400b7 100644 --- a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/pom.xml +++ b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/pom.xml @@ -557,6 +557,11 @@ nifi-json-schema-shared 2.0.0-SNAPSHOT + + org.apache.nifi + nifi-migration-utils + 2.0.0-SNAPSHOT + diff --git a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/DeleteSFTP.java b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/DeleteSFTP.java index fa54f4f27e4b..05e358b56ce2 100644 --- a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/DeleteSFTP.java +++ b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/DeleteSFTP.java @@ -29,6 +29,7 @@ import org.apache.nifi.flowfile.FlowFile; import org.apache.nifi.flowfile.attributes.CoreAttributes; import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.migration.PropertyConfiguration; import org.apache.nifi.processor.AbstractProcessor; import org.apache.nifi.processor.ProcessContext; import org.apache.nifi.processor.ProcessSession; @@ -116,11 +117,6 @@ public class DeleteSFTP extends AbstractProcessor { SFTPTransfer.USE_KEEPALIVE_ON_TIMEOUT, SFTPTransfer.USE_COMPRESSION, SFTPTransfer.PROXY_CONFIGURATION_SERVICE, - FTPTransfer.PROXY_TYPE, - FTPTransfer.PROXY_HOST, - FTPTransfer.PROXY_PORT, - FTPTransfer.HTTP_PROXY_USERNAME, - FTPTransfer.HTTP_PROXY_PASSWORD, SFTPTransfer.CIPHERS_ALLOWED, SFTPTransfer.KEY_ALGORITHMS_ALLOWED, SFTPTransfer.KEY_EXCHANGE_ALGORITHMS_ALLOWED, @@ -137,6 +133,12 @@ protected List getSupportedPropertyDescriptors() { return properties; } + @Override + public void migrateProperties(PropertyConfiguration config) { + super.migrateProperties(config); + FTPTransfer.migrateProxyProperties(config); + } + @Override public void onTrigger(ProcessContext context, ProcessSession session) throws ProcessException { FlowFile flowFile = session.get(); diff --git a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/FetchFTP.java b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/FetchFTP.java index 12d4fb230f0a..b2e7b4019efa 100644 --- a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/FetchFTP.java +++ b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/FetchFTP.java @@ -29,6 +29,7 @@ import org.apache.nifi.components.PropertyDescriptor; import org.apache.nifi.components.ValidationContext; import org.apache.nifi.components.ValidationResult; +import org.apache.nifi.migration.PropertyConfiguration; import org.apache.nifi.processor.ProcessContext; import org.apache.nifi.processor.util.file.transfer.FetchFileTransfer; import org.apache.nifi.processor.util.file.transfer.FileTransfer; @@ -102,11 +103,6 @@ public class FetchFTP extends FetchFileTransfer { FTPTransfer.CONNECTION_MODE, FTPTransfer.TRANSFER_MODE, FTPTransfer.PROXY_CONFIGURATION_SERVICE, - FTPTransfer.PROXY_TYPE, - FTPTransfer.PROXY_HOST, - FTPTransfer.PROXY_PORT, - FTPTransfer.HTTP_PROXY_USERNAME, - FTPTransfer.HTTP_PROXY_PASSWORD, FTPTransfer.BUFFER_SIZE, FILE_NOT_FOUND_LOG_LEVEL, FTPTransfer.UTF8_ENCODING @@ -117,6 +113,12 @@ protected List getSupportedPropertyDescriptors() { return PROPERTIES; } + @Override + public void migrateProperties(PropertyConfiguration config) { + super.migrateProperties(config); + FTPTransfer.migrateProxyProperties(config); + } + @Override protected FileTransfer createFileTransfer(final ProcessContext context) { return new FTPTransfer(context, getLogger()); diff --git a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/FetchSFTP.java b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/FetchSFTP.java index 2ccca3a8be15..5e45ed3e95de 100644 --- a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/FetchSFTP.java +++ b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/FetchSFTP.java @@ -29,6 +29,7 @@ import org.apache.nifi.components.PropertyDescriptor; import org.apache.nifi.components.ValidationContext; import org.apache.nifi.components.ValidationResult; +import org.apache.nifi.migration.PropertyConfiguration; import org.apache.nifi.processor.ProcessContext; import org.apache.nifi.processor.util.file.transfer.FetchFileTransfer; import org.apache.nifi.processor.util.file.transfer.FileTransfer; @@ -115,11 +116,6 @@ public class FetchSFTP extends FetchFileTransfer { SFTPTransfer.STRICT_HOST_KEY_CHECKING, SFTPTransfer.USE_COMPRESSION, SFTPTransfer.PROXY_CONFIGURATION_SERVICE, - FTPTransfer.PROXY_TYPE, - FTPTransfer.PROXY_HOST, - FTPTransfer.PROXY_PORT, - FTPTransfer.HTTP_PROXY_USERNAME, - FTPTransfer.HTTP_PROXY_PASSWORD, FILE_NOT_FOUND_LOG_LEVEL, SFTPTransfer.CIPHERS_ALLOWED, SFTPTransfer.KEY_ALGORITHMS_ALLOWED, @@ -132,6 +128,12 @@ protected List getSupportedPropertyDescriptors() { return PROPERTIES; } + @Override + public void migrateProperties(PropertyConfiguration config) { + super.migrateProperties(config); + FTPTransfer.migrateProxyProperties(config); + } + @Override protected FileTransfer createFileTransfer(final ProcessContext context) { return new SFTPTransfer(context, getLogger()); diff --git a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/GetFTP.java b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/GetFTP.java index 522ce64f6ea4..b5143e7ad985 100644 --- a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/GetFTP.java +++ b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/GetFTP.java @@ -26,6 +26,7 @@ import org.apache.nifi.components.PropertyDescriptor; import org.apache.nifi.components.ValidationContext; import org.apache.nifi.components.ValidationResult; +import org.apache.nifi.migration.PropertyConfiguration; import org.apache.nifi.processor.ProcessContext; import org.apache.nifi.processor.util.file.transfer.FileTransfer; import org.apache.nifi.processor.util.file.transfer.GetFileTransfer; @@ -76,11 +77,6 @@ public class GetFTP extends GetFileTransfer { FTPTransfer.REMOTE_POLL_BATCH_SIZE, FTPTransfer.USE_NATURAL_ORDERING, FTPTransfer.PROXY_CONFIGURATION_SERVICE, - FTPTransfer.PROXY_TYPE, - FTPTransfer.PROXY_HOST, - FTPTransfer.PROXY_PORT, - FTPTransfer.HTTP_PROXY_USERNAME, - FTPTransfer.HTTP_PROXY_PASSWORD, FTPTransfer.BUFFER_SIZE, FTPTransfer.UTF8_ENCODING ); @@ -90,6 +86,12 @@ protected List getSupportedPropertyDescriptors() { return PROPERTIES; } + @Override + public void migrateProperties(PropertyConfiguration config) { + super.migrateProperties(config); + FTPTransfer.migrateProxyProperties(config); + } + @Override protected FileTransfer getFileTransfer(final ProcessContext context) { return new FTPTransfer(context, getLogger()); diff --git a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/GetSFTP.java b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/GetSFTP.java index f9073870cffe..faa9caee8847 100644 --- a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/GetSFTP.java +++ b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/GetSFTP.java @@ -26,6 +26,7 @@ import org.apache.nifi.components.PropertyDescriptor; import org.apache.nifi.components.ValidationContext; import org.apache.nifi.components.ValidationResult; +import org.apache.nifi.migration.PropertyConfiguration; import org.apache.nifi.processor.ProcessContext; import org.apache.nifi.processor.util.file.transfer.FileTransfer; import org.apache.nifi.processor.util.file.transfer.GetFileTransfer; @@ -79,11 +80,6 @@ public class GetSFTP extends GetFileTransfer { SFTPTransfer.USE_COMPRESSION, SFTPTransfer.USE_NATURAL_ORDERING, SFTPTransfer.PROXY_CONFIGURATION_SERVICE, - FTPTransfer.PROXY_TYPE, - FTPTransfer.PROXY_HOST, - FTPTransfer.PROXY_PORT, - FTPTransfer.HTTP_PROXY_USERNAME, - FTPTransfer.HTTP_PROXY_PASSWORD, SFTPTransfer.CIPHERS_ALLOWED, SFTPTransfer.KEY_ALGORITHMS_ALLOWED, SFTPTransfer.KEY_EXCHANGE_ALGORITHMS_ALLOWED, @@ -95,6 +91,12 @@ protected List getSupportedPropertyDescriptors() { return PROPERTIES; } + @Override + public void migrateProperties(PropertyConfiguration config) { + super.migrateProperties(config); + FTPTransfer.migrateProxyProperties(config); + } + @Override protected Collection customValidate(final ValidationContext context) { final List results = new ArrayList<>(super.customValidate(context)); diff --git a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListFTP.java b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListFTP.java index 829392c42931..e102ae390bc0 100644 --- a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListFTP.java +++ b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListFTP.java @@ -33,6 +33,7 @@ import org.apache.nifi.components.ValidationResult; import org.apache.nifi.components.state.Scope; import org.apache.nifi.context.PropertyContext; +import org.apache.nifi.migration.PropertyConfiguration; import org.apache.nifi.processor.ProcessContext; import org.apache.nifi.processor.util.file.transfer.FileTransfer; import org.apache.nifi.processor.util.file.transfer.ListFileTransfer; @@ -92,11 +93,6 @@ public class ListFTP extends ListFileTransfer { FTPTransfer.CONNECTION_MODE, FTPTransfer.TRANSFER_MODE, FTPTransfer.PROXY_CONFIGURATION_SERVICE, - FTPTransfer.PROXY_TYPE, - FTPTransfer.PROXY_HOST, - FTPTransfer.PROXY_PORT, - FTPTransfer.HTTP_PROXY_USERNAME, - FTPTransfer.HTTP_PROXY_PASSWORD, FTPTransfer.BUFFER_SIZE, TARGET_SYSTEM_TIMESTAMP_PRECISION, ListedEntityTracker.TRACKING_STATE_CACHE, @@ -110,6 +106,12 @@ protected List getSupportedPropertyDescriptors() { return PROPERTIES; } + @Override + public void migrateProperties(PropertyConfiguration config) { + super.migrateProperties(config); + FTPTransfer.migrateProxyProperties(config); + } + @Override protected FileTransfer getFileTransfer(final ProcessContext context) { return new FTPTransfer(context, getLogger()); diff --git a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListSFTP.java b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListSFTP.java index db2adb2591d3..b56192fd2406 100644 --- a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListSFTP.java +++ b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListSFTP.java @@ -34,6 +34,7 @@ import org.apache.nifi.components.ValidationResult; import org.apache.nifi.components.state.Scope; import org.apache.nifi.context.PropertyContext; +import org.apache.nifi.migration.PropertyConfiguration; import org.apache.nifi.processor.DataUnit; import org.apache.nifi.processor.ProcessContext; import org.apache.nifi.processor.util.file.transfer.FileInfo; @@ -103,11 +104,6 @@ public class ListSFTP extends ListFileTransfer { TARGET_SYSTEM_TIMESTAMP_PRECISION, SFTPTransfer.USE_COMPRESSION, SFTPTransfer.PROXY_CONFIGURATION_SERVICE, - FTPTransfer.PROXY_TYPE, - FTPTransfer.PROXY_HOST, - FTPTransfer.PROXY_PORT, - FTPTransfer.HTTP_PROXY_USERNAME, - FTPTransfer.HTTP_PROXY_PASSWORD, ListedEntityTracker.TRACKING_STATE_CACHE, ListedEntityTracker.TRACKING_TIME_WINDOW, ListedEntityTracker.INITIAL_LISTING_TARGET, @@ -128,6 +124,12 @@ protected List getSupportedPropertyDescriptors() { return PROPERTIES; } + @Override + public void migrateProperties(PropertyConfiguration config) { + super.migrateProperties(config); + FTPTransfer.migrateProxyProperties(config); + } + @Override protected FileTransfer getFileTransfer(final ProcessContext context) { return new SFTPTransfer(context, getLogger()); diff --git a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutFTP.java b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutFTP.java index bc92eec97cf8..3c3c21cb4862 100644 --- a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutFTP.java +++ b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutFTP.java @@ -30,6 +30,7 @@ import org.apache.nifi.components.ValidationResult; import org.apache.nifi.expression.ExpressionLanguageScope; import org.apache.nifi.flowfile.FlowFile; +import org.apache.nifi.migration.PropertyConfiguration; import org.apache.nifi.processor.ProcessContext; import org.apache.nifi.processor.util.StandardValidators; import org.apache.nifi.processor.util.file.transfer.PutFileTransfer; @@ -94,11 +95,6 @@ public class PutFTP extends PutFileTransfer { FTPTransfer.PERMISSIONS, FTPTransfer.USE_COMPRESSION, FTPTransfer.PROXY_CONFIGURATION_SERVICE, - FTPTransfer.PROXY_TYPE, - FTPTransfer.PROXY_HOST, - FTPTransfer.PROXY_PORT, - FTPTransfer.HTTP_PROXY_USERNAME, - FTPTransfer.HTTP_PROXY_PASSWORD, FTPTransfer.BUFFER_SIZE, FTPTransfer.UTF8_ENCODING ); @@ -108,6 +104,12 @@ protected List getSupportedPropertyDescriptors() { return PROPERTIES; } + @Override + public void migrateProperties(PropertyConfiguration config) { + super.migrateProperties(config); + FTPTransfer.migrateProxyProperties(config); + } + @Override protected void beforePut(final FlowFile flowFile, final ProcessContext context, final FTPTransfer transfer) throws IOException { transfer.sendCommands(getCommands(preSendDescriptorRef.get(), context, flowFile), flowFile); diff --git a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutSFTP.java b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutSFTP.java index 769c89cdc49c..66506c9fde9c 100644 --- a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutSFTP.java +++ b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/PutSFTP.java @@ -25,6 +25,7 @@ import org.apache.nifi.components.PropertyDescriptor; import org.apache.nifi.components.ValidationContext; import org.apache.nifi.components.ValidationResult; +import org.apache.nifi.migration.PropertyConfiguration; import org.apache.nifi.processor.ProcessContext; import org.apache.nifi.processor.util.file.transfer.FileTransfer; import org.apache.nifi.processor.util.file.transfer.PutFileTransfer; @@ -68,11 +69,6 @@ public class PutSFTP extends PutFileTransfer { SFTPTransfer.USE_KEEPALIVE_ON_TIMEOUT, FileTransfer.USE_COMPRESSION, SFTPTransfer.PROXY_CONFIGURATION_SERVICE, - FTPTransfer.PROXY_TYPE, - FTPTransfer.PROXY_HOST, - FTPTransfer.PROXY_PORT, - FTPTransfer.HTTP_PROXY_USERNAME, - FTPTransfer.HTTP_PROXY_PASSWORD, SFTPTransfer.CIPHERS_ALLOWED, SFTPTransfer.KEY_ALGORITHMS_ALLOWED, SFTPTransfer.KEY_EXCHANGE_ALGORITHMS_ALLOWED, @@ -84,6 +80,12 @@ protected List getSupportedPropertyDescriptors() { return PROPERTIES; } + @Override + public void migrateProperties(PropertyConfiguration config) { + super.migrateProperties(config); + FTPTransfer.migrateProxyProperties(config); + } + @Override protected SFTPTransfer getFileTransfer(final ProcessContext context) { return new SFTPTransfer(context, getLogger()); diff --git a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ftp/StandardFTPClientProvider.java b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ftp/StandardFTPClientProvider.java index d3fa48224f91..abe0d8195195 100644 --- a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ftp/StandardFTPClientProvider.java +++ b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ftp/StandardFTPClientProvider.java @@ -50,7 +50,6 @@ import static org.apache.nifi.processors.standard.util.FTPTransfer.TRANSFER_MODE_ASCII; import static org.apache.nifi.processors.standard.util.FTPTransfer.USERNAME; import static org.apache.nifi.processors.standard.util.FTPTransfer.UTF8_ENCODING; -import static org.apache.nifi.processors.standard.util.FTPTransfer.createComponentProxyConfigSupplier; /** * Standard implementation of FTP Client Provider @@ -168,7 +167,7 @@ private void disconnectClient(final FTPClient client) { } private FTPClient createClient(final PropertyContext context) { - final ProxyConfiguration proxyConfiguration = ProxyConfiguration.getConfiguration(context, createComponentProxyConfigSupplier(context)); + final ProxyConfiguration proxyConfiguration = ProxyConfiguration.getConfiguration(context); final Proxy.Type proxyType = proxyConfiguration.getProxyType(); diff --git a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ssh/StandardSSHClientProvider.java b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ssh/StandardSSHClientProvider.java index d4fac981807c..fae64eace378 100644 --- a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ssh/StandardSSHClientProvider.java +++ b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ssh/StandardSSHClientProvider.java @@ -53,7 +53,6 @@ import java.util.Objects; import java.util.concurrent.TimeUnit; -import static org.apache.nifi.processors.standard.util.FTPTransfer.createComponentProxyConfigSupplier; import static org.apache.nifi.processors.standard.util.SFTPTransfer.CONNECTION_TIMEOUT; import static org.apache.nifi.processors.standard.util.SFTPTransfer.DATA_TIMEOUT; import static org.apache.nifi.processors.standard.util.SFTPTransfer.HOSTNAME; @@ -179,7 +178,7 @@ private void setClientProperties(final SSHClient client, final PropertyContext c } } - final ProxyConfiguration proxyConfiguration = ProxyConfiguration.getConfiguration(context, createComponentProxyConfigSupplier(context)); + final ProxyConfiguration proxyConfiguration = ProxyConfiguration.getConfiguration(context); final Proxy.Type proxyType = proxyConfiguration.getProxyType(); if (SUPPORTED_PROXY_TYPES.contains(proxyType)) { final SocketFactory socketFactory = SOCKET_FACTORY_PROVIDER.getSocketFactory(proxyConfiguration); diff --git a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/FTPTransfer.java b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/FTPTransfer.java index 0b2c5f3650a3..d2bbc94efa72 100644 --- a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/FTPTransfer.java +++ b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/FTPTransfer.java @@ -20,7 +20,6 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; -import java.net.Proxy; import java.nio.file.Path; import java.nio.file.Paths; import java.time.OffsetDateTime; @@ -32,7 +31,6 @@ import java.util.Locale; import java.util.Map; import java.util.Objects; -import java.util.function.Supplier; import java.util.regex.Pattern; import org.apache.commons.net.ftp.FTPClient; @@ -45,6 +43,8 @@ import org.apache.nifi.expression.ExpressionLanguageScope; import org.apache.nifi.flowfile.FlowFile; import org.apache.nifi.logging.ComponentLog; +import org.apache.nifi.migration.PropertyConfiguration; +import org.apache.nifi.migration.ProxyServiceMigration; import org.apache.nifi.processor.ProcessContext; import org.apache.nifi.processor.ProcessSession; import org.apache.nifi.processor.exception.ProcessException; @@ -65,9 +65,13 @@ public class FTPTransfer implements FileTransfer { public static final String TRANSFER_MODE_ASCII = "ASCII"; public static final String TRANSFER_MODE_BINARY = "Binary"; public static final String FTP_TIMEVAL_FORMAT = "yyyyMMddHHmmss"; - public static final String PROXY_TYPE_DIRECT = Proxy.Type.DIRECT.name(); - public static final String PROXY_TYPE_HTTP = Proxy.Type.HTTP.name(); - public static final String PROXY_TYPE_SOCKS = Proxy.Type.SOCKS.name(); + + // Obsolete property names + private static final String OBSOLETE_PROXY_TYPE = "Proxy Type"; + private static final String OBSOLETE_PROXY_HOST = "Proxy Host"; + private static final String OBSOLETE_PROXY_PORT = "Proxy Port"; + private static final String OBSOLETE_PROXY_USERNAME = "Http Proxy Username"; + private static final String OBSOLETE_PROXY_PASSWORD = "Http Proxy Password"; public static final PropertyDescriptor CONNECTION_MODE = new PropertyDescriptor.Builder() .name("Connection Mode") @@ -89,39 +93,6 @@ public class FTPTransfer implements FileTransfer { .defaultValue("21") .expressionLanguageSupported(ExpressionLanguageScope.FLOWFILE_ATTRIBUTES) .build(); - public static final PropertyDescriptor PROXY_TYPE = new PropertyDescriptor.Builder() - .name("Proxy Type") - .description("Proxy type used for file transfers") - .allowableValues(PROXY_TYPE_DIRECT, PROXY_TYPE_HTTP, PROXY_TYPE_SOCKS) - .defaultValue(PROXY_TYPE_DIRECT) - .build(); - public static final PropertyDescriptor PROXY_HOST = new PropertyDescriptor.Builder() - .name("Proxy Host") - .description("The fully qualified hostname or IP address of the proxy server") - .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) - .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT) - .build(); - public static final PropertyDescriptor PROXY_PORT = new PropertyDescriptor.Builder() - .name("Proxy Port") - .description("The port of the proxy server") - .addValidator(StandardValidators.PORT_VALIDATOR) - .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT) - .build(); - public static final PropertyDescriptor HTTP_PROXY_USERNAME = new PropertyDescriptor.Builder() - .name("Http Proxy Username") - .description("Http Proxy Username") - .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) - .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT) - .required(false) - .build(); - public static final PropertyDescriptor HTTP_PROXY_PASSWORD = new PropertyDescriptor.Builder() - .name("Http Proxy Password") - .description("Http Proxy Password") - .addValidator(StandardValidators.NON_EMPTY_VALIDATOR) - .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT) - .required(false) - .sensitive(true) - .build(); public static final PropertyDescriptor BUFFER_SIZE = new PropertyDescriptor.Builder() .name("Internal Buffer Size") .description("Set the internal buffer size for buffered data streams") @@ -146,7 +117,7 @@ public class FTPTransfer implements FileTransfer { private static final ProxySpec[] PROXY_SPECS = {ProxySpec.HTTP_AUTH, ProxySpec.SOCKS_AUTH}; public static final PropertyDescriptor PROXY_CONFIGURATION_SERVICE - = ProxyConfiguration.createProxyConfigPropertyDescriptor(true, PROXY_SPECS); + = ProxyConfiguration.createProxyConfigPropertyDescriptor(false, PROXY_SPECS); private final ComponentLog logger; @@ -168,6 +139,11 @@ public static void validateProxySpec(ValidationContext context, Collection createComponentProxyConfigSupplier(final PropertyContext ctx) { - return () -> { - final ProxyConfiguration componentProxyConfig = new ProxyConfiguration(); - componentProxyConfig.setProxyType(Proxy.Type.valueOf(ctx.getProperty(PROXY_TYPE).getValue())); - componentProxyConfig.setProxyServerHost(ctx.getProperty(PROXY_HOST).evaluateAttributeExpressions().getValue()); - componentProxyConfig.setProxyServerPort(ctx.getProperty(PROXY_PORT).evaluateAttributeExpressions().asInteger()); - componentProxyConfig.setProxyUserName(ctx.getProperty(HTTP_PROXY_USERNAME).evaluateAttributeExpressions().getValue()); - componentProxyConfig.setProxyUserPassword(ctx.getProperty(HTTP_PROXY_PASSWORD).evaluateAttributeExpressions().getValue()); - return componentProxyConfig; - }; - } }