/* GNU GENERAL PUBLIC LICENSE Copyright (C) 2006 The Lobo Project This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either verion 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Contact info: [email protected] */ /* * Created on Mar 14, 2005 */ package org.lobobrowser.protocol.cobra; import org.lobobrowser.LoboBrowser; import java.io.*; import java.net.URL; import java.net.URLConnection; import java.util.Properties; /** * @author J. H. S. */ public class CobraURLConnection extends URLConnection { public CobraURLConnection(final URL url) { super(url); } /* * (non-Javadoc) * * @see java.net.URLConnection#connect() */ @Override public void connect() throws IOException { } /* * (non-Javadoc) * * @see java.net.URLConnection#getContentLength() */ @Override public int getContentLength() { return -1; } /* * (non-Javadoc) * * @see java.net.URLConnection#getContentType() */ @Override public String getContentType() { return "text/html"; } /* * (non-Javadoc) * * @see java.net.URLConnection#getInputStream() */ @Override public InputStream getInputStream() throws IOException { return new ByteArrayInputStream(this.getURLText(this.getURL()).getBytes("UTF-8")); } private String getURLText(final URL url) { final String path = url.getPath(); if ("blank".equalsIgnoreCase(path)) { return ""; } else if ("java-properties".equals(path)) { return getSystemProperties(); } else if ("welcome".equals(path)) { return getWelcomeMessage(); } else { return "<p>Unknown cobra path: " + path + "</p>" + "<h3>Known paths are:</h3>" + "<ul>" + "<li><a href='cobra:blank'>cobra:blank</a></li>" + "<li><a href='cobra:welcome'>cobra:welcome</a></li>" + "<li><a href='about:java-properties'>cobra:java-properties</a></li>" + "</ul>"; } } private static String getWelcomeMessage() { final Properties relProps = LoboBrowser.getInstance().relProps; return "<div style='max-width:900px;margin:0 auto;text-align:center;'>" + "<h1>Welcome to LoboBrowser</h1>" + "<p>Version: " + relProps.getProperty(LoboBrowser.RELEASE_VERSION_STRING) + "<br/>" + "Published on: " + relProps.getProperty(LoboBrowser.RELEASE_VERSION_RELEASE_DATE) + "</p>" + "<p><b><a href='https://lobobrowser.org'>LoboBrowser</a></b> is a browser that cares deeply about privacy.</p>" + "<p>It is currently a proof-of-concept, and not very stable or secure.</p>" + "<div style='text-align:left;padding:1em;margin:1em auto; width:50em;background:#ffd;border:1px solid #bbb'>" + "<p>We recommend that you use this version for casual browsing only and follow the project's <a href='https://blog.lobobrowser.org'>blog</a> to stay abreast of changes.</p>" + "<p>Other ways of reaching us:</p>" + "<ul>" + "<li style='margin:1em 0'><a href='https://github.com/LoboBrowser/LoboBrowser'>Source code and issues</a> on GitHub</li>" + "<li style='margin:1em 0'>#lobobrowser and #lobobrowser-dev on Freenode IRC</li>" + "<li style='margin:1em 0'><a href='https://reddit.com/r/lobobrowser'>/r/lobobrowser</a> on Reddit</li>" + "<li style='margin:1em 0'><a href='https://twitter.com/LoboBrowser'>@LoboBrowser</a> on Twitter</li>" + "</ul>" + "</div>" + "<div style='padding:1em;border:1px solid #bbb;background:#efe;width:50em;margin:0 auto'>" + "<p><span style='border-bottom:2px solid red; font-weight:bold'>Tip:</span> Checkout the Request Manager button on the right of the URL bar. " + "The Request Manager allows you to control which URL requests are allowed on a given webpage.</p>" + "<p>By default, cookies, scripts and frames are disabled on all websites. " + "You can change these rules as per your preferences.</p>" + "<p>Note: the button is disabled on this page since it is an internal page and there are no external requests.</p>" + "<div style='position:fixed; right: 0; top: 0; background: #efe; color:#595; padding: 0.33em 1em; border:2px dotted #9f9; border-top:0'>" + "<p style='margin:0; font-weight:bold; text-align:right; font-size:120% '>⬆</p>" + "<p style='margin:0; font-weight:bold'>Request Manager</p>" + "<p style='margin:0; font-size: 90%'>(read the tip below)</p>" + "</div>" + "</div>" + "</div>"; } private static String getSystemProperties() { final StringWriter swriter = new StringWriter(); final PrintWriter writer = new PrintWriter(swriter); writer.println("<html>"); writer.println("<head><title>Java Properties</title></head>"); writer.println("<body>"); writer.println("<pre>"); final Properties properties = System.getProperties(); properties.list(writer); writer.println("</pre>"); writer.println("</body>"); writer.println("</html>"); writer.flush(); return swriter.toString(); } }