blob: cb02852548a002a170953af6288f7fc8600b0041 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.eagle.app.utils.connection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.net.ssl.*;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
public final class URLConnectionUtils {
//TODO: change some public method to private
private static final Logger LOG = LoggerFactory.getLogger(URLConnectionUtils.class);
public static URLConnection getConnection(String url) throws Exception {
if (url.startsWith("https://")) {
return getHTTPSConnection(url);
} else if (url.startsWith("http://")) {
return getHTTPConnection(url);
}
throw new Exception("Invalid input argument url: " + url);
}
private static URLConnection getHTTPConnection(String urlString) throws Exception {
final URL url = new URL(urlString);
return url.openConnection();
}
public static URL getUrl(String urlString) throws Exception {
if (urlString.toLowerCase().contains("https")) {
return getHTTPSUrl(urlString);
} else if (urlString.toLowerCase().contains("http")) {
return getHTTPUrl(urlString);
}
throw new Exception("Invalid input argument url: " + urlString);
}
private static URL getHTTPUrl(String urlString) throws MalformedURLException {
return new URL(urlString);
}
private static URL getHTTPSUrl(String urlString) throws MalformedURLException, NoSuchAlgorithmException, KeyManagementException {
// Create a trust manager that does not validate certificate chains
final TrustManager[] trustAllCerts = new TrustManager[] {new TrustAllX509TrustManager()};
// Install the all-trusting trust manager
final SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
// Create all-trusting host name verifier
final HostnameVerifier allHostsValid = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
return new URL(urlString);
}
private static URLConnection getHTTPSConnection(String urlString) throws IOException, KeyManagementException, NoSuchAlgorithmException {
final URL url = getHTTPSUrl(urlString);
return url.openConnection();
}
public static class TrustAllX509TrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(
java.security.cert.X509Certificate[] chain, String authType)
throws CertificateException {
}
@Override
public void checkServerTrusted(
java.security.cert.X509Certificate[] chain, String authType)
throws CertificateException {
}
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
}
}