Search in sources :

Example 1 with PublicSuffixListParser

use of org.apache.http.conn.util.PublicSuffixListParser in project i2p.i2p by i2p.

the class I2PSSLSocketFactory method getDefaultMatcher.

/**
 *  From Apache PublicSuffixMatcherLoader.getDefault()
 *
 *  https://publicsuffix.org/list/effective_tld_names.dat
 *  What does this get us?
 *  Deciding whether to issue or accept an SSL wildcard certificate for *.public.suffix.
 *
 *  @return null on failure
 *  @since 0.9.20
 */
private static PublicSuffixMatcher getDefaultMatcher(I2PAppContext ctx) {
    synchronized (I2PSSLSocketFactory.class) {
        if (!_matcherLoaded) {
            String geoDir = ctx.getProperty(PROP_GEOIP_DIR, GEOIP_DIR_DEFAULT);
            File geoFile = new File(geoDir);
            if (!geoFile.isAbsolute())
                geoFile = new File(ctx.getBaseDir(), geoDir);
            geoFile = new File(geoFile, PUBLIC_SUFFIX_LIST);
            Log log = ctx.logManager().getLog(I2PSSLSocketFactory.class);
            if (geoFile.exists()) {
                try {
                    // we can't use PublicSuffixMatcherLoader.load() here because we
                    // want to add some of our own and a PublicSuffixMatcher's
                    // underlying PublicSuffixList is immutable and inaccessible
                    long begin = System.currentTimeMillis();
                    InputStream in = null;
                    PublicSuffixList list = new PublicSuffixList(Arrays.asList(ADDITIONAL_TLDS), Collections.<String>emptyList());
                    try {
                        in = new FileInputStream(geoFile);
                        PublicSuffixList list2 = new PublicSuffixListParser().parse(new InputStreamReader(in, "UTF-8"));
                        list = merge(list, list2);
                    } finally {
                        try {
                            if (in != null)
                                in.close();
                        } catch (IOException ioe) {
                        }
                    }
                    DEFAULT_MATCHER = new PublicSuffixMatcher(list.getRules(), list.getExceptions());
                    if (log.shouldWarn())
                        log.warn("Loaded " + geoFile + " in " + (System.currentTimeMillis() - begin) + " ms and created list with " + list.getRules().size() + " entries and " + list.getExceptions().size() + " exceptions");
                } catch (IOException ex) {
                    log.error("Failure loading public suffix list from " + geoFile, ex);
                // DEFAULT_MATCHER remains null
                }
            } else {
                List<String> list = new ArrayList<String>(320);
                addCountries(ctx, list);
                list.addAll(Arrays.asList(DEFAULT_TLDS));
                list.addAll(Arrays.asList(ADDITIONAL_TLDS));
                DEFAULT_MATCHER = new PublicSuffixMatcher(list, null);
                if (log.shouldWarn())
                    log.warn("No public suffix list found at " + geoFile + " - created default with " + list.size() + " entries");
            }
        }
        _matcherLoaded = true;
    }
    return DEFAULT_MATCHER;
}
Also used : InputStreamReader(java.io.InputStreamReader) FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) ArrayList(java.util.ArrayList) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) PublicSuffixList(org.apache.http.conn.util.PublicSuffixList) PublicSuffixListParser(org.apache.http.conn.util.PublicSuffixListParser) PublicSuffixMatcher(org.apache.http.conn.util.PublicSuffixMatcher) File(java.io.File)

Aggregations

File (java.io.File)1 FileInputStream (java.io.FileInputStream)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 InputStreamReader (java.io.InputStreamReader)1 ArrayList (java.util.ArrayList)1 PublicSuffixList (org.apache.http.conn.util.PublicSuffixList)1 PublicSuffixListParser (org.apache.http.conn.util.PublicSuffixListParser)1 PublicSuffixMatcher (org.apache.http.conn.util.PublicSuffixMatcher)1