Return-Path: X-Original-To: apmail-cordova-commits-archive@www.apache.org Delivered-To: apmail-cordova-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id A2F5410B0E for ; Wed, 31 Dec 2014 04:01:04 +0000 (UTC) Received: (qmail 95611 invoked by uid 500); 31 Dec 2014 04:01:05 -0000 Delivered-To: apmail-cordova-commits-archive@cordova.apache.org Received: (qmail 95527 invoked by uid 500); 31 Dec 2014 04:01:05 -0000 Mailing-List: contact commits-help@cordova.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Delivered-To: mailing list commits@cordova.apache.org Received: (qmail 95362 invoked by uid 99); 31 Dec 2014 04:01:05 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 31 Dec 2014 04:01:05 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 96575A3A68A; Wed, 31 Dec 2014 04:01:04 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: agrieve@apache.org To: commits@cordova.apache.org Date: Wed, 31 Dec 2014 04:01:09 -0000 Message-Id: <85493cd78e434c78811a088c1e1b063b@git.apache.org> In-Reply-To: <7ae74ab77b764190af819574f7800dce@git.apache.org> References: <7ae74ab77b764190af819574f7800dce@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [06/12] android commit: CB-6630 Delete bundled (and outdated) copy of OkHttp http://git-wip-us.apache.org/repos/asf/cordova-android/blob/c6b171ba/framework/src/com/squareup/okhttp/internal/tls/OkHostnameVerifier.java ---------------------------------------------------------------------- diff --git a/framework/src/com/squareup/okhttp/internal/tls/OkHostnameVerifier.java b/framework/src/com/squareup/okhttp/internal/tls/OkHostnameVerifier.java deleted file mode 100755 index a08773f..0000000 --- a/framework/src/com/squareup/okhttp/internal/tls/OkHostnameVerifier.java +++ /dev/null @@ -1,194 +0,0 @@ -/* - * 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 com.squareup.okhttp.internal.tls; - -import java.security.cert.Certificate; -import java.security.cert.CertificateParsingException; -import java.security.cert.X509Certificate; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Locale; -import java.util.regex.Pattern; -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.SSLException; -import javax.net.ssl.SSLSession; -import javax.security.auth.x500.X500Principal; - -/** - * A HostnameVerifier consistent with RFC 2818. - */ -public final class OkHostnameVerifier implements HostnameVerifier { - public static final OkHostnameVerifier INSTANCE = new OkHostnameVerifier(); - - /** - * Quick and dirty pattern to differentiate IP addresses from hostnames. This - * is an approximation of Android's private InetAddress#isNumeric API. - * - *

This matches IPv6 addresses as a hex string containing at least one - * colon, and possibly including dots after the first colon. It matches IPv4 - * addresses as strings containing only decimal digits and dots. This pattern - * matches strings like "a:.23" and "54" that are neither IP addresses nor - * hostnames; they will be verified as IP addresses (which is a more strict - * verification). - */ - private static final Pattern VERIFY_AS_IP_ADDRESS = Pattern.compile( - "([0-9a-fA-F]*:[0-9a-fA-F:.]*)|([\\d.]+)"); - - private static final int ALT_DNS_NAME = 2; - private static final int ALT_IPA_NAME = 7; - - private OkHostnameVerifier() { - } - - public boolean verify(String host, SSLSession session) { - try { - Certificate[] certificates = session.getPeerCertificates(); - return verify(host, (X509Certificate) certificates[0]); - } catch (SSLException e) { - return false; - } - } - - public boolean verify(String host, X509Certificate certificate) { - return verifyAsIpAddress(host) - ? verifyIpAddress(host, certificate) - : verifyHostName(host, certificate); - } - - static boolean verifyAsIpAddress(String host) { - return VERIFY_AS_IP_ADDRESS.matcher(host).matches(); - } - - /** - * Returns true if {@code certificate} matches {@code ipAddress}. - */ - private boolean verifyIpAddress(String ipAddress, X509Certificate certificate) { - for (String altName : getSubjectAltNames(certificate, ALT_IPA_NAME)) { - if (ipAddress.equalsIgnoreCase(altName)) { - return true; - } - } - return false; - } - - /** - * Returns true if {@code certificate} matches {@code hostName}. - */ - private boolean verifyHostName(String hostName, X509Certificate certificate) { - hostName = hostName.toLowerCase(Locale.US); - boolean hasDns = false; - for (String altName : getSubjectAltNames(certificate, ALT_DNS_NAME)) { - hasDns = true; - if (verifyHostName(hostName, altName)) { - return true; - } - } - - if (!hasDns) { - X500Principal principal = certificate.getSubjectX500Principal(); - // RFC 2818 advises using the most specific name for matching. - String cn = new DistinguishedNameParser(principal).findMostSpecific("cn"); - if (cn != null) { - return verifyHostName(hostName, cn); - } - } - - return false; - } - - private List getSubjectAltNames(X509Certificate certificate, int type) { - List result = new ArrayList(); - try { - Collection subjectAltNames = certificate.getSubjectAlternativeNames(); - if (subjectAltNames == null) { - return Collections.emptyList(); - } - for (Object subjectAltName : subjectAltNames) { - List entry = (List) subjectAltName; - if (entry == null || entry.size() < 2) { - continue; - } - Integer altNameType = (Integer) entry.get(0); - if (altNameType == null) { - continue; - } - if (altNameType == type) { - String altName = (String) entry.get(1); - if (altName != null) { - result.add(altName); - } - } - } - return result; - } catch (CertificateParsingException e) { - return Collections.emptyList(); - } - } - - /** - * Returns true if {@code hostName} matches the name or pattern {@code cn}. - * - * @param hostName lowercase host name. - * @param cn certificate host name. May include wildcards like - * {@code *.android.com}. - */ - public boolean verifyHostName(String hostName, String cn) { - // Check length == 0 instead of .isEmpty() to support Java 5. - if (hostName == null || hostName.length() == 0 || cn == null || cn.length() == 0) { - return false; - } - - cn = cn.toLowerCase(Locale.US); - - if (!cn.contains("*")) { - return hostName.equals(cn); - } - - if (cn.startsWith("*.") && hostName.regionMatches(0, cn, 2, cn.length() - 2)) { - return true; // "*.foo.com" matches "foo.com" - } - - int asterisk = cn.indexOf('*'); - int dot = cn.indexOf('.'); - if (asterisk > dot) { - return false; // malformed; wildcard must be in the first part of the cn - } - - if (!hostName.regionMatches(0, cn, 0, asterisk)) { - return false; // prefix before '*' doesn't match - } - - int suffixLength = cn.length() - (asterisk + 1); - int suffixStart = hostName.length() - suffixLength; - if (hostName.indexOf('.', asterisk) < suffixStart) { - // TODO: remove workaround for *.clients.google.com http://b/5426333 - if (!hostName.endsWith(".clients.google.com")) { - return false; // wildcard '*' can't match a '.' - } - } - - if (!hostName.regionMatches(suffixStart, cn, asterisk + 1, suffixLength)) { - return false; // suffix after '*' doesn't match - } - - return true; - } -} http://git-wip-us.apache.org/repos/asf/cordova-android/blob/c6b171ba/framework/src/org/apache/cordova/CordovaResourceApi.java ---------------------------------------------------------------------- diff --git a/framework/src/org/apache/cordova/CordovaResourceApi.java b/framework/src/org/apache/cordova/CordovaResourceApi.java index c31e222..9c2e708 100644 --- a/framework/src/org/apache/cordova/CordovaResourceApi.java +++ b/framework/src/org/apache/cordova/CordovaResourceApi.java @@ -28,8 +28,6 @@ import android.os.Looper; import android.util.Base64; import android.webkit.MimeTypeMap; -import com.squareup.okhttp.OkHttpClient; - import org.apache.http.util.EncodingUtils; import java.io.ByteArrayInputStream; @@ -56,13 +54,10 @@ import java.util.Locale; * passing the URL onto other utility functions in this class. * - For an example usage of this, refer to the org.apache.cordova.file plugin. * - * 3. It exposes a way to use the OkHttp library that ships with Cordova. - * - Through createHttpConnection(). - * * Future Work: * - Consider using a Cursor to query content URLs for their size (like the file plugin does). - * - Allow plugins to remapUri to "cdv-plugin://plugin-name/$ID", which CordovaResourceApi - * would then delegate to pluginManager.getPlugin(plugin-name).openForRead($ID) + * - Allow plugins to remapUri to "cdv-plugin://plugin-name/foo", which CordovaResourceApi + * would then delegate to pluginManager.getPlugin(plugin-name).openForRead(url) * - Currently, plugins *can* do this by remapping to a data: URL, but it's inefficient * for large payloads. */ @@ -81,9 +76,6 @@ public class CordovaResourceApi { private static final String[] LOCAL_FILE_PROJECTION = { "_data" }; - // Creating this is light-weight. - private static OkHttpClient httpClient = new OkHttpClient(); - public static Thread jsThread; private final AssetManager assetManager; @@ -188,7 +180,7 @@ public class CordovaResourceApi { case URI_TYPE_HTTP: case URI_TYPE_HTTPS: { try { - HttpURLConnection conn = httpClient.open(new URL(uri.toString())); + HttpURLConnection conn = (HttpURLConnection)new URL(uri.toString()).openConnection(); conn.setDoInput(false); conn.setRequestMethod("HEAD"); return conn.getHeaderField("Content-Type"); @@ -283,7 +275,7 @@ public class CordovaResourceApi { } case URI_TYPE_HTTP: case URI_TYPE_HTTPS: { - HttpURLConnection conn = httpClient.open(new URL(uri.toString())); + HttpURLConnection conn = (HttpURLConnection)new URL(uri.toString()).openConnection(); conn.setDoInput(true); String mimeType = conn.getHeaderField("Content-Type"); int length = conn.getContentLength(); @@ -324,10 +316,10 @@ public class CordovaResourceApi { } throw new FileNotFoundException("URI not supported by CordovaResourceApi: " + uri); } - + public HttpURLConnection createHttpConnection(Uri uri) throws IOException { assertBackgroundThread(); - return httpClient.open(new URL(uri.toString())); + return (HttpURLConnection)new URL(uri.toString()).openConnection(); } // Copies the input to the output in the most efficient manner possible. --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org For additional commands, e-mail: commits-help@cordova.apache.org