From 737d695ad83f9c69d2e07165418449cdc9b52683 Mon Sep 17 00:00:00 2001 From: Krzysztof Nozderko Date: Thu, 1 Aug 2024 12:37:50 +0000 Subject: [PATCH] remove allowEmptyProxyConfig parameter --- .../UnitTests/HttpUtilTest.cs | 30 +++++------- .../UnitTests/SFSessionPropertyTest.cs | 49 +++++-------------- Snowflake.Data/Core/HttpUtil.cs | 14 ++---- .../Session/SFSessionHttpClientProperties.cs | 1 - .../SFSessionHttpClientProxyProperties.cs | 2 - .../Core/Session/SFSessionProperty.cs | 4 +- doc/Connecting.md | 11 ++--- 7 files changed, 36 insertions(+), 75 deletions(-) diff --git a/Snowflake.Data.Tests/UnitTests/HttpUtilTest.cs b/Snowflake.Data.Tests/UnitTests/HttpUtilTest.cs index 1bc8bdd26..58be6fdf7 100644 --- a/Snowflake.Data.Tests/UnitTests/HttpUtilTest.cs +++ b/Snowflake.Data.Tests/UnitTests/HttpUtilTest.cs @@ -101,12 +101,11 @@ public void TestGetJitter(int seconds) } [Test] - public void TestCreateHttpClientHandlerWithExplicitProxy([Values] bool allowEmptyProxy) + public void TestCreateHttpClientHandlerWithExplicitProxy() { // given var config = new HttpClientConfig( true, - allowEmptyProxy, true, "snowflake.com", "123", @@ -127,11 +126,10 @@ public void TestCreateHttpClientHandlerWithExplicitProxy([Values] bool allowEmpt } [Test] - public void TestCreateHttpClientHandlerWithImplicitProxy() + public void TestCreateHttpClientHandlerWithDefaultProxy() { // given var config = new HttpClientConfig( - true, true, true, null, @@ -153,13 +151,12 @@ public void TestCreateHttpClientHandlerWithImplicitProxy() } [Test] - public void TestDoNotCreateHttpClientHandlerWithImplicitProxyWhenEmptyProxyNotAllowed() + public void TestCreateHttpClientHandlerWithoutProxy() { // given var config = new HttpClientConfig( - true, false, - true, + false, null, null, null, @@ -167,7 +164,7 @@ public void TestDoNotCreateHttpClientHandlerWithImplicitProxyWhenEmptyProxyNotAl null, false, false, - 7 + 0 ); // when @@ -179,21 +176,20 @@ public void TestDoNotCreateHttpClientHandlerWithImplicitProxyWhenEmptyProxyNotAl } [Test] - public void ShouldCreateHttpClientHandlerWithoutProxy([Values] bool allowEmptyProxy) + public void TestIgnoreProxyDetailsIfProxyDisabled() { // given var config = new HttpClientConfig( + true, false, - allowEmptyProxy, - false, - null, - null, - null, - null, - null, + "snowflake.com", + "123", + "testUser", + "proxyPassword", + "localhost", false, false, - 0 + 7 ); // when diff --git a/Snowflake.Data.Tests/UnitTests/SFSessionPropertyTest.cs b/Snowflake.Data.Tests/UnitTests/SFSessionPropertyTest.cs index 6b83a87ad..c4e5e7642 100644 --- a/Snowflake.Data.Tests/UnitTests/SFSessionPropertyTest.cs +++ b/Snowflake.Data.Tests/UnitTests/SFSessionPropertyTest.cs @@ -167,19 +167,6 @@ public void TestResolveConnectionArea(string host, string expectedMessage) Assert.AreEqual(expectedMessage, message); } - [Test] - [TestCase("ACCOUNT=account;USER=test;PASSWORD=test;ALLOWEMPTYPROXY=false", "false")] - [TestCase("ACCOUNT=account;USER=test;PASSWORD=test;ALLOWEMPTYPROXY=true", "true")] - [TestCase("ACCOUNT=account;USER=test;PASSWORD=test", "false")] - public void TestParseAllowEmptyProxy(string connectionString, string expectedAllowEmptyProxy) - { - // act - var properties = SFSessionProperties.ParseConnectionString(connectionString, null); - - // assert - Assert.AreEqual(expectedAllowEmptyProxy, properties[SFSessionProperty.ALLOWEMPTYPROXY]); - } - [Test] public void TestFailWhenProxyConfiguredWithoutPort() { @@ -288,8 +275,7 @@ public static IEnumerable ConnectionStringTestCases() { SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT, DefaultValue(SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT) }, { SFSessionProperty.EXPIRATIONTIMEOUT, DefaultValue(SFSessionProperty.EXPIRATIONTIMEOUT) }, { SFSessionProperty.POOLINGENABLED, DefaultValue(SFSessionProperty.POOLINGENABLED) }, - { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) }, - { SFSessionProperty.ALLOWEMPTYPROXY, DefaultValue(SFSessionProperty.ALLOWEMPTYPROXY) } + { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) } } }; @@ -325,8 +311,7 @@ public static IEnumerable ConnectionStringTestCases() { SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT, DefaultValue(SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT) }, { SFSessionProperty.EXPIRATIONTIMEOUT, DefaultValue(SFSessionProperty.EXPIRATIONTIMEOUT) }, { SFSessionProperty.POOLINGENABLED, DefaultValue(SFSessionProperty.POOLINGENABLED) }, - { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) }, - { SFSessionProperty.ALLOWEMPTYPROXY, DefaultValue(SFSessionProperty.ALLOWEMPTYPROXY) } + { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) } } }; var testCaseWithProxySettings = new TestCase() @@ -364,8 +349,7 @@ public static IEnumerable ConnectionStringTestCases() { SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT, DefaultValue(SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT) }, { SFSessionProperty.EXPIRATIONTIMEOUT, DefaultValue(SFSessionProperty.EXPIRATIONTIMEOUT) }, { SFSessionProperty.POOLINGENABLED, DefaultValue(SFSessionProperty.POOLINGENABLED) }, - { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) }, - { SFSessionProperty.ALLOWEMPTYPROXY, DefaultValue(SFSessionProperty.ALLOWEMPTYPROXY) } + { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) } }, ConnectionString = $"ACCOUNT={defAccount};USER={defUser};PASSWORD={defPassword};useProxy=true;proxyHost=proxy.com;proxyPort=1234;nonProxyHosts=localhost" @@ -405,8 +389,7 @@ public static IEnumerable ConnectionStringTestCases() { SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT, DefaultValue(SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT) }, { SFSessionProperty.EXPIRATIONTIMEOUT, DefaultValue(SFSessionProperty.EXPIRATIONTIMEOUT) }, { SFSessionProperty.POOLINGENABLED, DefaultValue(SFSessionProperty.POOLINGENABLED) }, - { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) }, - { SFSessionProperty.ALLOWEMPTYPROXY, DefaultValue(SFSessionProperty.ALLOWEMPTYPROXY) } + { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) } }, ConnectionString = $"ACCOUNT={defAccount};USER={defUser};PASSWORD={defPassword};proxyHost=proxy.com;proxyPort=1234;nonProxyHosts=localhost" @@ -445,8 +428,7 @@ public static IEnumerable ConnectionStringTestCases() { SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT, DefaultValue(SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT) }, { SFSessionProperty.EXPIRATIONTIMEOUT, DefaultValue(SFSessionProperty.EXPIRATIONTIMEOUT) }, { SFSessionProperty.POOLINGENABLED, DefaultValue(SFSessionProperty.POOLINGENABLED) }, - { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) }, - { SFSessionProperty.ALLOWEMPTYPROXY, DefaultValue(SFSessionProperty.ALLOWEMPTYPROXY) } + { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) } } }; var testCaseWithIncludeRetryReason = new TestCase() @@ -482,8 +464,7 @@ public static IEnumerable ConnectionStringTestCases() { SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT, DefaultValue(SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT) }, { SFSessionProperty.EXPIRATIONTIMEOUT, DefaultValue(SFSessionProperty.EXPIRATIONTIMEOUT) }, { SFSessionProperty.POOLINGENABLED, DefaultValue(SFSessionProperty.POOLINGENABLED) }, - { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) }, - { SFSessionProperty.ALLOWEMPTYPROXY, DefaultValue(SFSessionProperty.ALLOWEMPTYPROXY) } + { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) } } }; var testCaseWithDisableQueryContextCache = new TestCase() @@ -518,8 +499,7 @@ public static IEnumerable ConnectionStringTestCases() { SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT, DefaultValue(SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT) }, { SFSessionProperty.EXPIRATIONTIMEOUT, DefaultValue(SFSessionProperty.EXPIRATIONTIMEOUT) }, { SFSessionProperty.POOLINGENABLED, DefaultValue(SFSessionProperty.POOLINGENABLED) }, - { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) }, - { SFSessionProperty.ALLOWEMPTYPROXY, DefaultValue(SFSessionProperty.ALLOWEMPTYPROXY) } + { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) } }, ConnectionString = $"ACCOUNT={defAccount};USER={defUser};PASSWORD={defPassword};DISABLEQUERYCONTEXTCACHE=true" @@ -556,8 +536,7 @@ public static IEnumerable ConnectionStringTestCases() { SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT, DefaultValue(SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT) }, { SFSessionProperty.EXPIRATIONTIMEOUT, DefaultValue(SFSessionProperty.EXPIRATIONTIMEOUT) }, { SFSessionProperty.POOLINGENABLED, DefaultValue(SFSessionProperty.POOLINGENABLED) }, - { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) }, - { SFSessionProperty.ALLOWEMPTYPROXY, DefaultValue(SFSessionProperty.ALLOWEMPTYPROXY) } + { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) } }, ConnectionString = $"ACCOUNT={defAccount};USER={defUser};PASSWORD={defPassword};DISABLE_CONSOLE_LOGIN=false" @@ -596,8 +575,7 @@ public static IEnumerable ConnectionStringTestCases() { SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT, DefaultValue(SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT) }, { SFSessionProperty.EXPIRATIONTIMEOUT, DefaultValue(SFSessionProperty.EXPIRATIONTIMEOUT) }, { SFSessionProperty.POOLINGENABLED, DefaultValue(SFSessionProperty.POOLINGENABLED) }, - { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) }, - { SFSessionProperty.ALLOWEMPTYPROXY, DefaultValue(SFSessionProperty.ALLOWEMPTYPROXY) } + { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) } } }; var testCaseUnderscoredAccountName = new TestCase() @@ -633,8 +611,7 @@ public static IEnumerable ConnectionStringTestCases() { SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT, DefaultValue(SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT) }, { SFSessionProperty.EXPIRATIONTIMEOUT, DefaultValue(SFSessionProperty.EXPIRATIONTIMEOUT) }, { SFSessionProperty.POOLINGENABLED, DefaultValue(SFSessionProperty.POOLINGENABLED) }, - { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) }, - { SFSessionProperty.ALLOWEMPTYPROXY, DefaultValue(SFSessionProperty.ALLOWEMPTYPROXY) } + { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) } } }; var testCaseUnderscoredAccountNameWithEnabledAllowUnderscores = new TestCase() @@ -670,8 +647,7 @@ public static IEnumerable ConnectionStringTestCases() { SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT, DefaultValue(SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT) }, { SFSessionProperty.EXPIRATIONTIMEOUT, DefaultValue(SFSessionProperty.EXPIRATIONTIMEOUT) }, { SFSessionProperty.POOLINGENABLED, DefaultValue(SFSessionProperty.POOLINGENABLED) }, - { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) }, - { SFSessionProperty.ALLOWEMPTYPROXY, DefaultValue(SFSessionProperty.ALLOWEMPTYPROXY) } + { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) } } }; var testQueryTag = "Test QUERY_TAG 12345"; @@ -709,8 +685,7 @@ public static IEnumerable ConnectionStringTestCases() { SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT, DefaultValue(SFSessionProperty.WAITINGFORIDLESESSIONTIMEOUT) }, { SFSessionProperty.EXPIRATIONTIMEOUT, DefaultValue(SFSessionProperty.EXPIRATIONTIMEOUT) }, { SFSessionProperty.POOLINGENABLED, DefaultValue(SFSessionProperty.POOLINGENABLED) }, - { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) }, - { SFSessionProperty.ALLOWEMPTYPROXY, DefaultValue(SFSessionProperty.ALLOWEMPTYPROXY) } + { SFSessionProperty.DISABLE_SAML_URL_CHECK, DefaultValue(SFSessionProperty.DISABLE_SAML_URL_CHECK) } } }; diff --git a/Snowflake.Data/Core/HttpUtil.cs b/Snowflake.Data/Core/HttpUtil.cs index 41cd5d0dc..cad58061d 100755 --- a/Snowflake.Data/Core/HttpUtil.cs +++ b/Snowflake.Data/Core/HttpUtil.cs @@ -21,7 +21,6 @@ public class HttpClientConfig { public HttpClientConfig( bool crlCheckEnabled, - bool allowEmptyProxy, bool useProxy, string proxyHost, string proxyPort, @@ -34,7 +33,6 @@ public HttpClientConfig( bool includeRetryReason = true) { CrlCheckEnabled = crlCheckEnabled; - AllowEmptyProxy = allowEmptyProxy; UseProxy = useProxy; ProxyHost = proxyHost; ProxyPort = proxyPort; @@ -49,7 +47,6 @@ public HttpClientConfig( ConfKey = string.Join(";", new string[] { crlCheckEnabled.ToString(), - allowEmptyProxy.ToString(), useProxy.ToString(), proxyHost, proxyPort, @@ -63,7 +60,6 @@ public HttpClientConfig( } public readonly bool CrlCheckEnabled; - public readonly bool AllowEmptyProxy; public readonly bool UseProxy; public readonly string ProxyHost; public readonly string ProxyPort; @@ -162,17 +158,17 @@ internal HttpMessageHandler SetupCustomHttpHandler(HttpClientConfig config) }; } - httpHandler.UseProxy = config.UseProxy && (config.AllowEmptyProxy || !string.IsNullOrEmpty(config.ProxyHost)); + httpHandler.UseProxy = config.UseProxy; - if (httpHandler.UseProxy && !string.IsNullOrEmpty(config.ProxyHost)) + if (config.UseProxy && !string.IsNullOrEmpty(config.ProxyHost)) { - logger.Info("Configuring proxy based on connection string properties"); + logger.Info("Configuring proxy based on connection properties"); var proxy = ConfigureWebProxy(config); httpHandler.Proxy = proxy; } - else if (httpHandler.UseProxy) + else if (config.UseProxy) { - logger.Info("Proxy enabled, but not configured due to allowEmptyProxy property set to true"); + logger.Info("Using a default proxy"); } return httpHandler; diff --git a/Snowflake.Data/Core/Session/SFSessionHttpClientProperties.cs b/Snowflake.Data/Core/Session/SFSessionHttpClientProperties.cs index 5e0d1f85b..6af6f64aa 100644 --- a/Snowflake.Data/Core/Session/SFSessionHttpClientProperties.cs +++ b/Snowflake.Data/Core/Session/SFSessionHttpClientProperties.cs @@ -179,7 +179,6 @@ public HttpClientConfig BuildHttpClientConfig() { return new HttpClientConfig( !insecureMode, - proxyProperties.allowEmptyProxy, proxyProperties.useProxy, proxyProperties.proxyHost, proxyProperties.proxyPort, diff --git a/Snowflake.Data/Core/Session/SFSessionHttpClientProxyProperties.cs b/Snowflake.Data/Core/Session/SFSessionHttpClientProxyProperties.cs index d6e83abf1..ce63b098d 100644 --- a/Snowflake.Data/Core/Session/SFSessionHttpClientProxyProperties.cs +++ b/Snowflake.Data/Core/Session/SFSessionHttpClientProxyProperties.cs @@ -6,7 +6,6 @@ namespace Snowflake.Data.Core internal class SFSessionHttpClientProxyProperties { - internal bool allowEmptyProxy = false; internal bool useProxy = false; internal string proxyHost = null; internal string proxyPort = null; @@ -30,7 +29,6 @@ public SFSessionHttpClientProxyProperties ExtractProperties(SFSessionProperties if (properties.useProxy) { // Let's try to get the associated RestRequester - properties.allowEmptyProxy = Boolean.Parse(propertiesDictionary[SFSessionProperty.ALLOWEMPTYPROXY]); propertiesDictionary.TryGetValue(SFSessionProperty.PROXYHOST, out properties.proxyHost); propertiesDictionary.TryGetValue(SFSessionProperty.PROXYPORT, out properties.proxyPort); propertiesDictionary.TryGetValue(SFSessionProperty.NONPROXYHOSTS, out properties.nonProxyHosts); diff --git a/Snowflake.Data/Core/Session/SFSessionProperty.cs b/Snowflake.Data/Core/Session/SFSessionProperty.cs index 289b855e6..3d850a561 100644 --- a/Snowflake.Data/Core/Session/SFSessionProperty.cs +++ b/Snowflake.Data/Core/Session/SFSessionProperty.cs @@ -112,9 +112,7 @@ internal enum SFSessionProperty [SFSessionPropertyAttr(required = false, defaultValue = "true")] POOLINGENABLED, [SFSessionPropertyAttr(required = false, defaultValue = "false")] - DISABLE_SAML_URL_CHECK, - [SFSessionPropertyAttr(required = false, defaultValue = "false")] - ALLOWEMPTYPROXY + DISABLE_SAML_URL_CHECK } class SFSessionPropertyAttr : Attribute diff --git a/doc/Connecting.md b/doc/Connecting.md index b9c71f77b..9982da2e6 100644 --- a/doc/Connecting.md +++ b/doc/Connecting.md @@ -34,11 +34,11 @@ The following table lists all valid connection properties: | TOKEN | Depends | The OAuth token to use for OAuth authentication. Must be used in combination with AUTHENTICATOR=oauth. | | INSECUREMODE | No | Set to true to disable the certificate revocation list check. Default is false. | | USEPROXY | No | Set to true if you need to use a proxy server. The default value is false.

This parameter was introduced in v2.0.4. | -| PROXYHOST | Depends | The hostname of the proxy server.

Proxy parameters are used only if you enable the proxy by setting USEPROXY to `true`. In such case you should either
(1) specify the value of PROXYHOST property
or (2), if you want to enable the proxy, but you don't want the driver to configure it, you should not provide the value but instead set ALLOWEMPTYPROXY to `true`

This parameter was introduced in v2.0.4. | -| PROXYPORT | Depends | The port number of the proxy server.

If USEPROXY is set to `true` and provided PROXYHOST, you must set this parameter.

This parameter was introduced in v2.0.4. | -| PROXYUSER | No | The username for authenticating to the proxy server.

This parameter was introduced in v2.0.4. | -| PROXYPASSWORD | Depends | The password for authenticating to the proxy server.

If USEPROXY is `true` and PROXYHOST and PROXYUSER are set, you must set this parameter.

This parameter was introduced in v2.0.4. | -| NONPROXYHOSTS | No | The list of hosts that the driver should connect to directly, bypassing the proxy server. Separate the hostnames with a pipe symbol (\|). You can also use an asterisk (`*`) as a wildcard.
The host target value should fully match with any item from the proxy host list to bypass the proxy server.

This parameter was introduced in v2.0.4. | +| PROXYHOST | Depends | The hostname of the proxy server.

Proxy parameters are used only if you enable the proxy by setting USEPROXY to `true`. It is required if you provide your own proxy configuration. Do not provide this value if you want to use a default proxy.

This parameter was introduced in v2.0.4. | +| PROXYPORT | Depends | The port number of the proxy server.

If USEPROXY is set to `true` and PROXYHOST is provided, you must set this parameter.

This parameter was introduced in v2.0.4. | +| PROXYUSER | No | The username for authenticating to the proxy server. Parameter is used only if USEPROXY is set to `true` and PROXYHOST is provided.

This parameter was introduced in v2.0.4. | +| PROXYPASSWORD | Depends | The password for authenticating to the proxy server. Parameter is used only if USEPROXY is set to `true` and PROXYHOST is provided.

If USEPROXY is `true` and PROXYHOST and PROXYUSER are set, you must set this parameter.

This parameter was introduced in v2.0.4. | +| NONPROXYHOSTS | No | The list of hosts that the driver should connect to directly, bypassing the proxy server.
The parameter is used only if USEPROXY is set to `true` and PROXYHOST is provided.
Separate the hostnames with a pipe symbol (\|). You can also use an asterisk (`*`) as a wildcard.
The host target value should fully match with any item from the proxy host list to bypass the proxy server.

This parameter was introduced in v2.0.4. | | FILE_TRANSFER_MEMORY_THRESHOLD | No | The maximum number of bytes to store in memory used in order to provide a file encryption. If encrypting/decrypting file size exceeds provided value a temporary file will be created and the work will be continued in the temporary file instead of memory.
If no value provided 1MB will be used as a default value (that is 1048576 bytes).
It is possible to configure any integer value bigger than zero representing maximal number of bytes to reside in memory. | | CLIENT_CONFIG_FILE | No | The location of the client configuration json file. In this file you can configure easy logging feature. | | ALLOWUNDERSCORESINHOST | No | Specifies whether to allow underscores in account names. This impacts PrivateLink customers whose account names contain underscores. In this situation, you must override the default value by setting allowUnderscoresInHost to true. | @@ -50,7 +50,6 @@ The following table lists all valid connection properties: | EXPIRATIONTIMEOUT | No | Timeout for using each connection. Connections which last more than specified timeout are considered to be expired and are being removed from the pool. The default is 1 hour. Usage of units possible and allowed are: e. g. `360000ms` (milliseconds), `3600s` (seconds), `60m` (minutes) where seconds are default for a skipped postfix. Special values: `0` - immediate expiration of the connection just after its creation. Expiration timeout cannot be set to infinity. | | POOLINGENABLED | No | Boolean flag indicating if the connection should be a part of a pool. The default value is `true`. | | DISABLE_SAML_URL_CHECK | No | Specifies whether to check if the saml postback url matches the host url from the connection string. The default value is `false`. | -| ALLOWEMPTYPROXY | No | Set this property to `true` to allow to create an http client with proxy enabled but whitout configuring it. The default value is `false`. If you would specify `ALLOWEMPTYPROXY=true` and `USEPROXY=true` but without specifying `PROXYHOST` the http client will be created with proxy enabled but without being configured. It may be useful if your operating system provides you a default proxy which you would like to use. |