public void applyProxy()

in azure-toolkit-libs/azure-toolkit-common-lib/src/main/java/com/microsoft/azure/toolkit/lib/common/proxy/ProxyManager.java [46:96]


    public void applyProxy() {
        final AzureConfiguration config = Azure.az().config();
        String source = config.getProxySource();
        if (StringUtils.isBlank(source)) {
            ProxyInfo proxy = ObjectUtils.firstNonNull(
                getProxyFromProgramArgument("http"),
                getProxyFromProgramArgument("https"),
                getSystemProxy()
            );

            if (proxy != null) {
                config.setProxyInfo(proxy);
                source = config.getProxySource();
            }
        }
        if (StringUtils.isNotBlank(source)) {
            final String proxyHost = config.getHttpProxyHost();
            final int proxyPort = config.getHttpProxyPort();
            AzureMessager.getMessager().info(AzureString.format("Use %s proxy: %s", source, proxyHost + ":" + proxyPort));
            if (!StringUtils.equals(source, "system") && !StringUtils.equals(source, "intellij")) {
                final Proxy proxy = createHttpProxy(proxyHost, proxyPort);
                ProxySelector.setDefault(new ProxySelector() {
                    @Override
                    public List<Proxy> select(URI uri) {
                        return Collections.singletonList(proxy);
                    }

                    @Override
                    public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {
                    }
                });
                // Java ignores http.proxyUser. Here comes the workaround.
                // see https://stackoverflow.com/questions/1626549/authenticated-http-proxy-with-java
                if (StringUtils.isNoneBlank(config.getProxyUsername(), config.getProxyPassword())) {
                    Authenticator.setDefault(
                        new Authenticator() {
                            @Override
                            public PasswordAuthentication getPasswordAuthentication() {
                                if (getRequestorType() == RequestorType.PROXY) {
                                    if (getRequestingHost().equalsIgnoreCase(proxyHost)) {
                                        return new PasswordAuthentication(config.getProxyUsername(), config.getProxyPassword().toCharArray());
                                    }
                                }
                                return null;
                            }
                        }
                    );
                }
            }
        }
    }