3535import java .util .function .BiFunction ;
3636import javax .annotation .Nonnull ;
3737import javax .annotation .Nullable ;
38+ import javax .net .ssl .SSLContext ;
39+
40+ import io .grpc .ProxyDetector ;
41+ import io .netty .handler .ssl .SslContext ;
3842
3943import com .influxdb .v3 .client .write .WritePrecision ;
4044
5862 * disable server certificate validation for HTTPS connections
5963 * </li>
6064 * <li><code>proxy</code> - HTTP proxy selector</li>
65+ * <li><code>queryApiProxy</code> - HTTP query detector</li>
6166 * <li><code>authenticator</code> - HTTP proxy authenticator</li>
6267 * <li><code>headers</code> - headers to be added to requests</li>
6368 * </ul>
@@ -97,8 +102,11 @@ public final class ClientConfig {
97102 private final Boolean allowHttpRedirects ;
98103 private final Boolean disableServerCertificateValidation ;
99104 private final ProxySelector proxy ;
105+ private final ProxyDetector queryApiProxy ;
100106 private final Authenticator authenticator ;
101107 private final Map <String , String > headers ;
108+ private final SslContext grpcSslContext ;
109+ private final SSLContext sslContext ;
102110
103111 /**
104112 * Gets URL of the InfluxDB server.
@@ -219,6 +227,16 @@ public ProxySelector getProxy() {
219227 return proxy ;
220228 }
221229
230+ /**
231+ * Gets the proxy for query api.
232+ *
233+ * @return the proxy, may be null
234+ */
235+ @ Nullable
236+ public ProxyDetector getQueryApiProxy () {
237+ return queryApiProxy ;
238+ }
239+
222240 /**
223241 * Gets the (proxy) authenticator.
224242 *
@@ -239,6 +257,26 @@ public Map<String, String> getHeaders() {
239257 return headers ;
240258 }
241259
260+ /**
261+ * Gets SslContext object from grpc.
262+ *
263+ * @return the SslContext object
264+ */
265+ @ Nullable
266+ public SslContext getGrpcSslContext () {
267+ return grpcSslContext ;
268+ }
269+
270+ /**
271+ * Gets SSLContext object.
272+ *
273+ * @return the SSLContext object
274+ */
275+ @ Nullable
276+ public SSLContext getSslContext () {
277+ return sslContext ;
278+ }
279+
242280 /**
243281 * Validates the configuration properties.
244282 */
@@ -269,17 +307,20 @@ public boolean equals(final Object o) {
269307 && Objects .equals (allowHttpRedirects , that .allowHttpRedirects )
270308 && Objects .equals (disableServerCertificateValidation , that .disableServerCertificateValidation )
271309 && Objects .equals (proxy , that .proxy )
310+ && Objects .equals (queryApiProxy , that .queryApiProxy )
272311 && Objects .equals (authenticator , that .authenticator )
273- && Objects .equals (headers , that .headers );
312+ && Objects .equals (headers , that .headers )
313+ && Objects .equals (grpcSslContext , that .grpcSslContext )
314+ && Objects .equals (sslContext , that .sslContext );
274315 }
275316
276317 @ Override
277318 public int hashCode () {
278319 return Objects .hash (host , Arrays .hashCode (token ), authScheme , organization ,
279320 database , writePrecision , gzipThreshold ,
280321 timeout , allowHttpRedirects , disableServerCertificateValidation ,
281- proxy , authenticator , headers ,
282- defaultTags );
322+ proxy , queryApiProxy , authenticator , headers ,
323+ defaultTags , grpcSslContext , sslContext );
283324 }
284325
285326 @ Override
@@ -294,9 +335,12 @@ public String toString() {
294335 .add ("allowHttpRedirects=" + allowHttpRedirects )
295336 .add ("disableServerCertificateValidation=" + disableServerCertificateValidation )
296337 .add ("proxy=" + proxy )
338+ .add ("queryApiProxy=" + queryApiProxy )
297339 .add ("authenticator=" + authenticator )
298340 .add ("headers=" + headers )
299341 .add ("defaultTags=" + defaultTags )
342+ .add ("grpcSslContext=" + grpcSslContext )
343+ .add ("sslContext=" + sslContext )
300344 .toString ();
301345 }
302346
@@ -318,8 +362,11 @@ public static final class Builder {
318362 private Boolean allowHttpRedirects ;
319363 private Boolean disableServerCertificateValidation ;
320364 private ProxySelector proxy ;
365+ private ProxyDetector queryApiProxy ;
321366 private Authenticator authenticator ;
322367 private Map <String , String > headers ;
368+ private SslContext grpcSslContext ;
369+ private SSLContext sslContext ;
323370
324371 /**
325372 * Sets the URL of the InfluxDB server.
@@ -480,6 +527,19 @@ public Builder proxy(@Nullable final ProxySelector proxy) {
480527 return this ;
481528 }
482529
530+ /**
531+ * Sets the proxy detector for query api. Default is 'null'.
532+ *
533+ * @param proxy Proxy detector.
534+ * @return this
535+ */
536+ @ Nonnull
537+ public Builder queryApiProxy (@ Nullable final ProxyDetector proxy ) {
538+
539+ this .queryApiProxy = proxy ;
540+ return this ;
541+ }
542+
483543 /**
484544 * Sets the proxy authenticator. Default is 'null'.
485545 *
@@ -523,6 +583,32 @@ public Builder headers(@Nullable final Map<String, String> headers) {
523583 return this ;
524584 }
525585
586+ /**
587+ * Sets SslContext for grpc client. Default is 'null'.
588+ *
589+ * @param grpcSslContext The SSLContext
590+ * @return this
591+ */
592+ @ Nonnull
593+ public Builder grpcSslContext (@ Nullable final SslContext grpcSslContext ) {
594+
595+ this .grpcSslContext = grpcSslContext ;
596+ return this ;
597+ }
598+
599+ /**
600+ * Sets SSLContext for rest client. Default is 'null'.
601+ *
602+ * @param sslContext The SSLContext
603+ * @return this
604+ */
605+ @ Nonnull
606+ public Builder sslContext (@ Nullable final SSLContext sslContext ) {
607+
608+ this .sslContext = sslContext ;
609+ return this ;
610+ }
611+
526612 /**
527613 * Build an instance of {@code ClientConfig}.
528614 *
@@ -658,7 +744,10 @@ private ClientConfig(@Nonnull final Builder builder) {
658744 disableServerCertificateValidation = builder .disableServerCertificateValidation != null
659745 ? builder .disableServerCertificateValidation : false ;
660746 proxy = builder .proxy ;
747+ queryApiProxy = builder .queryApiProxy ;
661748 authenticator = builder .authenticator ;
662749 headers = builder .headers ;
750+ grpcSslContext = builder .grpcSslContext ;
751+ sslContext = builder .sslContext ;
663752 }
664753}
0 commit comments