1515 */
1616package io .gravitee .policy .callout ;
1717
18+ import static io .gravitee .common .util .VertxProxyOptionsUtils .*;
19+
1820import io .gravitee .el .TemplateEngine ;
1921import io .gravitee .gateway .api .ExecutionContext ;
2022import io .gravitee .gateway .api .Request ;
2426import io .gravitee .gateway .api .stream .BufferedReadWriteStream ;
2527import io .gravitee .gateway .api .stream .ReadWriteStream ;
2628import io .gravitee .gateway .api .stream .SimpleReadWriteStream ;
29+ import io .gravitee .node .api .configuration .Configuration ;
2730import io .gravitee .policy .api .PolicyChain ;
2831import io .gravitee .policy .api .PolicyResult ;
2932import io .gravitee .policy .api .annotations .OnRequest ;
3336import io .gravitee .policy .callout .configuration .CalloutHttpPolicyConfiguration ;
3437import io .gravitee .policy .callout .configuration .PolicyScope ;
3538import io .vertx .core .Future ;
36- import io .vertx .core .Handler ;
3739import io .vertx .core .Vertx ;
3840import io .vertx .core .buffer .Buffer ;
3941import io .vertx .core .http .*;
40- import io .vertx .core .net .ProxyOptions ;
41- import io .vertx .core .net .ProxyType ;
4242import java .net .URI ;
43- import java .util .Objects ;
4443import java .util .function .Consumer ;
4544import org .slf4j .Logger ;
4645import org .slf4j .LoggerFactory ;
47- import org .springframework .core .env .Environment ;
4846
4947/**
5048 * @author David BRASSELY (david.brassely at graviteesource.com)
@@ -59,16 +57,16 @@ public class CalloutHttpPolicy {
5957 private static final String CALLOUT_EXIT_ON_ERROR = "CALLOUT_EXIT_ON_ERROR" ;
6058 private static final String CALLOUT_HTTP_ERROR = "CALLOUT_HTTP_ERROR" ;
6159
62- /**
63- * The associated configuration to this CalloutHttp Policy
64- */
65- private CalloutHttpPolicyConfiguration configuration ;
66-
6760 private static final String TEMPLATE_VARIABLE = "calloutResponse" ;
6861
6962 private static final String REQUEST_TEMPLATE_VARIABLE = "request" ;
7063 private static final String RESPONSE_TEMPLATE_VARIABLE = "response" ;
7164
65+ /**
66+ * The associated configuration to this CalloutHttp Policy
67+ */
68+ private final CalloutHttpPolicyConfiguration configuration ;
69+
7270 /**
7371 * Create a new CalloutHttp Policy instance based on its associated configuration
7472 *
@@ -196,8 +194,15 @@ private void doCallout(ExecutionContext context, Consumer<Void> onSuccess, Consu
196194 }
197195
198196 if (configuration .isUseSystemProxy ()) {
199- Environment env = context .getComponent (Environment .class );
200- options .setProxyOptions (getSystemProxyOptions (env ));
197+ Configuration configuration = context .getComponent (Configuration .class );
198+ try {
199+ setSystemProxy (options , configuration );
200+ } catch (IllegalStateException e ) {
201+ LOGGER .warn (
202+ "CalloutHttp requires a system proxy to be defined but some configurations are missing or not well defined: {}. Ignoring proxy" ,
203+ e .getMessage ()
204+ );
205+ }
201206 }
202207
203208 HttpClient httpClient = vertx .createHttpClient (options );
@@ -332,43 +337,6 @@ private void handleFailure(Consumer<Void> onSuccess, Consumer<PolicyResult> onEr
332337 httpClient .close ();
333338 }
334339
335- private ProxyOptions getSystemProxyOptions (Environment environment ) {
336- StringBuilder errors = new StringBuilder ();
337- ProxyOptions proxyOptions = new ProxyOptions ();
338-
339- // System proxy must be well configured. Check that this is the case.
340- if (environment .containsProperty ("system.proxy.host" )) {
341- proxyOptions .setHost (environment .getProperty ("system.proxy.host" ));
342- } else {
343- errors .append ("'system.proxy.host' " );
344- }
345-
346- try {
347- proxyOptions .setPort (Integer .parseInt (Objects .requireNonNull (environment .getProperty ("system.proxy.port" ))));
348- } catch (Exception e ) {
349- errors .append ("'system.proxy.port' [" ).append (environment .getProperty ("system.proxy.port" )).append ("] " );
350- }
351-
352- try {
353- proxyOptions .setType (ProxyType .valueOf (environment .getProperty ("system.proxy.type" )));
354- } catch (Exception e ) {
355- errors .append ("'system.proxy.type' [" ).append (environment .getProperty ("system.proxy.type" )).append ("] " );
356- }
357-
358- proxyOptions .setUsername (environment .getProperty ("system.proxy.username" ));
359- proxyOptions .setPassword (environment .getProperty ("system.proxy.password" ));
360-
361- if (errors .length () == 0 ) {
362- return proxyOptions ;
363- } else {
364- LOGGER .warn (
365- "CalloutHttp requires a system proxy to be defined but some configurations are missing or not well defined: {}. Ignoring proxy" ,
366- errors
367- );
368- return null ;
369- }
370- }
371-
372340 private HttpMethod convert (io .gravitee .common .http .HttpMethod httpMethod ) {
373341 switch (httpMethod ) {
374342 case CONNECT :
0 commit comments