This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch CAMEL-20795 in repository https://gitbox.apache.org/repos/asf/camel.git
commit c971ca067f70232cba0738186d9df90f528a698c Author: Andrea Cosentino <anco...@gmail.com> AuthorDate: Wed May 22 11:58:53 2024 +0200 CAMEL-20795 - camel-nats - NATS Credential file support Signed-off-by: Andrea Cosentino <anco...@gmail.com> --- .../org/apache/camel/catalog/components/nats.json | 6 +- .../component/nats/NatsEndpointConfigurer.java | 12 ++ .../component/nats/NatsEndpointUriFactory.java | 4 +- .../org/apache/camel/component/nats/nats.json | 6 +- .../camel/component/nats/NatsConfiguration.java | 29 +++++ .../apache/camel/component/nats/NatsEndpoint.java | 9 ++ .../endpoint/dsl/NatsEndpointBuilderFactory.java | 141 +++++++++++++++++++++ .../apache/camel/kotlin/components/NatsUriDsl.kt | 23 ++++ 8 files changed, 225 insertions(+), 5 deletions(-) diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/nats.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/nats.json index 3ae2ae4049c..c226db67603 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/nats.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/nats.json @@ -67,7 +67,9 @@ "connection": { "index": 25, "kind": "parameter", "displayName": "Connection", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "io.nats.client.Connection", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.nats.NatsConfiguration", "configurationField": "configuration", "description": "Reference an already instantiated connection to Nats server" }, "headerFilterStrategy": { "index": 26, "kind": "parameter", "displayName": "Header Filter Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.nats.NatsConfiguration", "configurationField": "configuration", "description": "Define the header filtering strategy" }, "traceConnection": { "index": 27, "kind": "parameter", "displayName": "Trace Connection", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.nats.NatsConfiguration", "configurationField": "configuration", "description": "Whether or not connection trace messages should be printed to standard out for fine [...] - "secure": { "index": 28, "kind": "parameter", "displayName": "Secure", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.nats.NatsConfiguration", "configurationField": "configuration", "description": "Set secure option indicating TLS is required" }, - "sslContextParameters": { "index": 29, "kind": "parameter", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.nats.NatsConfiguration", "configurationField": "configuration", "description": "To configure security using SSLContextParameters" } + "credentialsFilePath": { "index": 28, "kind": "parameter", "displayName": "Credentials File Path", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.nats.NatsConfiguration", "configurationField": "configuration", "description": "If we use useCredentialsFile to true we'll need to set the credentialsFilePath option. It [...] + "secure": { "index": 29, "kind": "parameter", "displayName": "Secure", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.nats.NatsConfiguration", "configurationField": "configuration", "description": "Set secure option indicating TLS is required" }, + "sslContextParameters": { "index": 30, "kind": "parameter", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.nats.NatsConfiguration", "configurationField": "configuration", "description": "To configure security using SSLContextParameters" }, + "useCredentialsFile": { "index": 31, "kind": "parameter", "displayName": "Use Credentials File", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.nats.NatsConfiguration", "configurationField": "configuration", "description": "Determine if we are going to use a credentials file or not" } } } diff --git a/components/camel-nats/src/generated/java/org/apache/camel/component/nats/NatsEndpointConfigurer.java b/components/camel-nats/src/generated/java/org/apache/camel/component/nats/NatsEndpointConfigurer.java index 1e60bd06f4a..5159309771a 100644 --- a/components/camel-nats/src/generated/java/org/apache/camel/component/nats/NatsEndpointConfigurer.java +++ b/components/camel-nats/src/generated/java/org/apache/camel/component/nats/NatsEndpointConfigurer.java @@ -28,6 +28,8 @@ public class NatsEndpointConfigurer extends PropertyConfigurerSupport implements case "connection": target.getConfiguration().setConnection(property(camelContext, io.nats.client.Connection.class, value)); return true; case "connectiontimeout": case "connectionTimeout": target.getConfiguration().setConnectionTimeout(property(camelContext, int.class, value)); return true; + case "credentialsfilepath": + case "credentialsFilePath": target.getConfiguration().setCredentialsFilePath(property(camelContext, java.lang.String.class, value)); return true; case "exceptionhandler": case "exceptionHandler": target.setExceptionHandler(property(camelContext, org.apache.camel.spi.ExceptionHandler.class, value)); return true; case "exchangepattern": @@ -74,6 +76,8 @@ public class NatsEndpointConfigurer extends PropertyConfigurerSupport implements case "sslContextParameters": target.getConfiguration().setSslContextParameters(property(camelContext, org.apache.camel.support.jsse.SSLContextParameters.class, value)); return true; case "traceconnection": case "traceConnection": target.getConfiguration().setTraceConnection(property(camelContext, boolean.class, value)); return true; + case "usecredentialsfile": + case "useCredentialsFile": target.getConfiguration().setUseCredentialsFile(property(camelContext, boolean.class, value)); return true; case "verbose": target.getConfiguration().setVerbose(property(camelContext, boolean.class, value)); return true; default: return false; } @@ -87,6 +91,8 @@ public class NatsEndpointConfigurer extends PropertyConfigurerSupport implements case "connection": return io.nats.client.Connection.class; case "connectiontimeout": case "connectionTimeout": return int.class; + case "credentialsfilepath": + case "credentialsFilePath": return java.lang.String.class; case "exceptionhandler": case "exceptionHandler": return org.apache.camel.spi.ExceptionHandler.class; case "exchangepattern": @@ -133,6 +139,8 @@ public class NatsEndpointConfigurer extends PropertyConfigurerSupport implements case "sslContextParameters": return org.apache.camel.support.jsse.SSLContextParameters.class; case "traceconnection": case "traceConnection": return boolean.class; + case "usecredentialsfile": + case "useCredentialsFile": return boolean.class; case "verbose": return boolean.class; default: return null; } @@ -147,6 +155,8 @@ public class NatsEndpointConfigurer extends PropertyConfigurerSupport implements case "connection": return target.getConfiguration().getConnection(); case "connectiontimeout": case "connectionTimeout": return target.getConfiguration().getConnectionTimeout(); + case "credentialsfilepath": + case "credentialsFilePath": return target.getConfiguration().getCredentialsFilePath(); case "exceptionhandler": case "exceptionHandler": return target.getExceptionHandler(); case "exchangepattern": @@ -193,6 +203,8 @@ public class NatsEndpointConfigurer extends PropertyConfigurerSupport implements case "sslContextParameters": return target.getConfiguration().getSslContextParameters(); case "traceconnection": case "traceConnection": return target.getConfiguration().isTraceConnection(); + case "usecredentialsfile": + case "useCredentialsFile": return target.getConfiguration().isUseCredentialsFile(); case "verbose": return target.getConfiguration().isVerbose(); default: return null; } diff --git a/components/camel-nats/src/generated/java/org/apache/camel/component/nats/NatsEndpointUriFactory.java b/components/camel-nats/src/generated/java/org/apache/camel/component/nats/NatsEndpointUriFactory.java index 6d61e236881..8aaebc88eda 100644 --- a/components/camel-nats/src/generated/java/org/apache/camel/component/nats/NatsEndpointUriFactory.java +++ b/components/camel-nats/src/generated/java/org/apache/camel/component/nats/NatsEndpointUriFactory.java @@ -23,10 +23,11 @@ public class NatsEndpointUriFactory extends org.apache.camel.support.component.E private static final Set<String> SECRET_PROPERTY_NAMES; private static final Set<String> MULTI_VALUE_PREFIXES; static { - Set<String> props = new HashSet<>(30); + Set<String> props = new HashSet<>(32); props.add("bridgeErrorHandler"); props.add("connection"); props.add("connectionTimeout"); + props.add("credentialsFilePath"); props.add("exceptionHandler"); props.add("exchangePattern"); props.add("flushConnection"); @@ -53,6 +54,7 @@ public class NatsEndpointUriFactory extends org.apache.camel.support.component.E props.add("sslContextParameters"); props.add("topic"); props.add("traceConnection"); + props.add("useCredentialsFile"); props.add("verbose"); PROPERTY_NAMES = Collections.unmodifiableSet(props); SECRET_PROPERTY_NAMES = Collections.emptySet(); diff --git a/components/camel-nats/src/generated/resources/META-INF/org/apache/camel/component/nats/nats.json b/components/camel-nats/src/generated/resources/META-INF/org/apache/camel/component/nats/nats.json index 3ae2ae4049c..c226db67603 100644 --- a/components/camel-nats/src/generated/resources/META-INF/org/apache/camel/component/nats/nats.json +++ b/components/camel-nats/src/generated/resources/META-INF/org/apache/camel/component/nats/nats.json @@ -67,7 +67,9 @@ "connection": { "index": 25, "kind": "parameter", "displayName": "Connection", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "io.nats.client.Connection", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.nats.NatsConfiguration", "configurationField": "configuration", "description": "Reference an already instantiated connection to Nats server" }, "headerFilterStrategy": { "index": 26, "kind": "parameter", "displayName": "Header Filter Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.nats.NatsConfiguration", "configurationField": "configuration", "description": "Define the header filtering strategy" }, "traceConnection": { "index": 27, "kind": "parameter", "displayName": "Trace Connection", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.nats.NatsConfiguration", "configurationField": "configuration", "description": "Whether or not connection trace messages should be printed to standard out for fine [...] - "secure": { "index": 28, "kind": "parameter", "displayName": "Secure", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.nats.NatsConfiguration", "configurationField": "configuration", "description": "Set secure option indicating TLS is required" }, - "sslContextParameters": { "index": 29, "kind": "parameter", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.nats.NatsConfiguration", "configurationField": "configuration", "description": "To configure security using SSLContextParameters" } + "credentialsFilePath": { "index": 28, "kind": "parameter", "displayName": "Credentials File Path", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.nats.NatsConfiguration", "configurationField": "configuration", "description": "If we use useCredentialsFile to true we'll need to set the credentialsFilePath option. It [...] + "secure": { "index": 29, "kind": "parameter", "displayName": "Secure", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.nats.NatsConfiguration", "configurationField": "configuration", "description": "Set secure option indicating TLS is required" }, + "sslContextParameters": { "index": 30, "kind": "parameter", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.nats.NatsConfiguration", "configurationField": "configuration", "description": "To configure security using SSLContextParameters" }, + "useCredentialsFile": { "index": 31, "kind": "parameter", "displayName": "Use Credentials File", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.nats.NatsConfiguration", "configurationField": "configuration", "description": "Determine if we are going to use a credentials file or not" } } } diff --git a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConfiguration.java b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConfiguration.java index 53f185a1fb9..2bd05851312 100644 --- a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConfiguration.java +++ b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConfiguration.java @@ -20,6 +20,7 @@ import java.security.NoSuchAlgorithmException; import java.time.Duration; import io.nats.client.Connection; +import io.nats.client.Nats; import io.nats.client.Options; import io.nats.client.Options.Builder; import org.apache.camel.spi.HeaderFilterStrategy; @@ -83,6 +84,10 @@ public class NatsConfiguration { private boolean secure; @UriParam(label = "security") private SSLContextParameters sslContextParameters; + @UriParam(label = "security") + boolean useCredentialsFile; + @UriParam(label = "security") + String credentialsFilePath; @UriParam(label = "advanced") private boolean traceConnection; @UriParam(label = "advanced") @@ -367,6 +372,30 @@ public class NatsConfiguration { this.sslContextParameters = sslContextParameters; } + /** + * Determine if we are going to use a credentials file or not + */ + public boolean isUseCredentialsFile() { + return useCredentialsFile; + } + + public void setUseCredentialsFile(boolean useCredentialsFile) { + this.useCredentialsFile = useCredentialsFile; + } + + /** + * If we use useCredentialsFile to true we'll need to set the credentialsFilePath option. It can be loaded by + * default from classpath, but you can prefix with classpath:, file:, or http: to load the resource from different + * systems. + */ + public String getCredentialsFilePath() { + return credentialsFilePath; + } + + public void setCredentialsFilePath(String credentialsFilePath) { + this.credentialsFilePath = credentialsFilePath; + } + public Builder createOptions() throws NoSuchAlgorithmException, IllegalArgumentException { Builder builder = new Options.Builder(); builder.server(splitServers()); diff --git a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsEndpoint.java b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsEndpoint.java index 7cc24f51fa1..c00104b61ee 100644 --- a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsEndpoint.java +++ b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsEndpoint.java @@ -36,6 +36,8 @@ import org.apache.camel.spi.HeaderFilterStrategyAware; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; import org.apache.camel.support.DefaultEndpoint; +import org.apache.camel.support.ResourceHelper; +import org.apache.camel.util.ObjectHelper; /** * Send and receive messages from <a href="http://nats.io/">NATS</a> messaging system. @@ -85,6 +87,13 @@ public class NatsEndpoint extends DefaultEndpoint implements MultipleConsumersSu SSLContext sslCtx = getConfiguration().getSslContextParameters().createSSLContext(getCamelContext()); builder.sslContext(sslCtx); } + if (getConfiguration().isUseCredentialsFile()) { + if (ObjectHelper.isNotEmpty(getConfiguration().getCredentialsFilePath())) { + builder.authHandler(Nats.staticCredentials( + ResourceHelper.resolveResource(getCamelContext(), getConfiguration().getCredentialsFilePath()) + .getInputStream().readAllBytes())); + } + } Options options = builder.build(); return Nats.connect(options); } diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/NatsEndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/NatsEndpointBuilderFactory.java index c9a4fb50119..f89807d069c 100644 --- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/NatsEndpointBuilderFactory.java +++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/NatsEndpointBuilderFactory.java @@ -549,6 +549,23 @@ public interface NatsEndpointBuilderFactory { doSetProperty("replyToDisabled", replyToDisabled); return this; } + /** + * If we use useCredentialsFile to true we'll need to set the + * credentialsFilePath option. It can be loaded by default from + * classpath, but you can prefix with classpath:, file:, or http: to + * load the resource from different systems. + * + * The option is a: <code>java.lang.String</code> type. + * + * Group: security + * + * @param credentialsFilePath the value to set + * @return the dsl builder + */ + default NatsEndpointConsumerBuilder credentialsFilePath(String credentialsFilePath) { + doSetProperty("credentialsFilePath", credentialsFilePath); + return this; + } /** * Set secure option indicating TLS is required. * @@ -609,6 +626,36 @@ public interface NatsEndpointBuilderFactory { doSetProperty("sslContextParameters", sslContextParameters); return this; } + /** + * Determine if we are going to use a credentials file or not. + * + * The option is a: <code>boolean</code> type. + * + * Default: false + * Group: security + * + * @param useCredentialsFile the value to set + * @return the dsl builder + */ + default NatsEndpointConsumerBuilder useCredentialsFile(boolean useCredentialsFile) { + doSetProperty("useCredentialsFile", useCredentialsFile); + return this; + } + /** + * Determine if we are going to use a credentials file or not. + * + * The option will be converted to a <code>boolean</code> type. + * + * Default: false + * Group: security + * + * @param useCredentialsFile the value to set + * @return the dsl builder + */ + default NatsEndpointConsumerBuilder useCredentialsFile(String useCredentialsFile) { + doSetProperty("useCredentialsFile", useCredentialsFile); + return this; + } } /** @@ -1301,6 +1348,23 @@ public interface NatsEndpointBuilderFactory { doSetProperty("requestTimeout", requestTimeout); return this; } + /** + * If we use useCredentialsFile to true we'll need to set the + * credentialsFilePath option. It can be loaded by default from + * classpath, but you can prefix with classpath:, file:, or http: to + * load the resource from different systems. + * + * The option is a: <code>java.lang.String</code> type. + * + * Group: security + * + * @param credentialsFilePath the value to set + * @return the dsl builder + */ + default NatsEndpointProducerBuilder credentialsFilePath(String credentialsFilePath) { + doSetProperty("credentialsFilePath", credentialsFilePath); + return this; + } /** * Set secure option indicating TLS is required. * @@ -1361,6 +1425,36 @@ public interface NatsEndpointBuilderFactory { doSetProperty("sslContextParameters", sslContextParameters); return this; } + /** + * Determine if we are going to use a credentials file or not. + * + * The option is a: <code>boolean</code> type. + * + * Default: false + * Group: security + * + * @param useCredentialsFile the value to set + * @return the dsl builder + */ + default NatsEndpointProducerBuilder useCredentialsFile(boolean useCredentialsFile) { + doSetProperty("useCredentialsFile", useCredentialsFile); + return this; + } + /** + * Determine if we are going to use a credentials file or not. + * + * The option will be converted to a <code>boolean</code> type. + * + * Default: false + * Group: security + * + * @param useCredentialsFile the value to set + * @return the dsl builder + */ + default NatsEndpointProducerBuilder useCredentialsFile(String useCredentialsFile) { + doSetProperty("useCredentialsFile", useCredentialsFile); + return this; + } } /** @@ -1938,6 +2032,23 @@ public interface NatsEndpointBuilderFactory { doSetProperty("verbose", verbose); return this; } + /** + * If we use useCredentialsFile to true we'll need to set the + * credentialsFilePath option. It can be loaded by default from + * classpath, but you can prefix with classpath:, file:, or http: to + * load the resource from different systems. + * + * The option is a: <code>java.lang.String</code> type. + * + * Group: security + * + * @param credentialsFilePath the value to set + * @return the dsl builder + */ + default NatsEndpointBuilder credentialsFilePath(String credentialsFilePath) { + doSetProperty("credentialsFilePath", credentialsFilePath); + return this; + } /** * Set secure option indicating TLS is required. * @@ -1998,6 +2109,36 @@ public interface NatsEndpointBuilderFactory { doSetProperty("sslContextParameters", sslContextParameters); return this; } + /** + * Determine if we are going to use a credentials file or not. + * + * The option is a: <code>boolean</code> type. + * + * Default: false + * Group: security + * + * @param useCredentialsFile the value to set + * @return the dsl builder + */ + default NatsEndpointBuilder useCredentialsFile(boolean useCredentialsFile) { + doSetProperty("useCredentialsFile", useCredentialsFile); + return this; + } + /** + * Determine if we are going to use a credentials file or not. + * + * The option will be converted to a <code>boolean</code> type. + * + * Default: false + * Group: security + * + * @param useCredentialsFile the value to set + * @return the dsl builder + */ + default NatsEndpointBuilder useCredentialsFile(String useCredentialsFile) { + doSetProperty("useCredentialsFile", useCredentialsFile); + return this; + } } /** diff --git a/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/NatsUriDsl.kt b/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/NatsUriDsl.kt index e3a42a3e8be..014eb119914 100644 --- a/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/NatsUriDsl.kt +++ b/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/NatsUriDsl.kt @@ -407,6 +407,15 @@ public class NatsUriDsl( it.property("traceConnection", traceConnection.toString()) } + /** + * If we use useCredentialsFile to true we'll need to set the credentialsFilePath option. It can + * be loaded by default from classpath, but you can prefix with classpath:, file:, or http: to load + * the resource from different systems. + */ + public fun credentialsFilePath(credentialsFilePath: String) { + it.property("credentialsFilePath", credentialsFilePath) + } + /** * Set secure option indicating TLS is required */ @@ -427,4 +436,18 @@ public class NatsUriDsl( public fun sslContextParameters(sslContextParameters: String) { it.property("sslContextParameters", sslContextParameters) } + + /** + * Determine if we are going to use a credentials file or not + */ + public fun useCredentialsFile(useCredentialsFile: String) { + it.property("useCredentialsFile", useCredentialsFile) + } + + /** + * Determine if we are going to use a credentials file or not + */ + public fun useCredentialsFile(useCredentialsFile: Boolean) { + it.property("useCredentialsFile", useCredentialsFile.toString()) + } }