summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/btr/proxy/selector/whitelist/DefaultWhiteListParser.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/btr/proxy/selector/whitelist/DefaultWhiteListParser.java')
-rw-r--r--src/main/java/com/btr/proxy/selector/whitelist/DefaultWhiteListParser.java78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/main/java/com/btr/proxy/selector/whitelist/DefaultWhiteListParser.java b/src/main/java/com/btr/proxy/selector/whitelist/DefaultWhiteListParser.java
new file mode 100644
index 0000000..0f949e1
--- /dev/null
+++ b/src/main/java/com/btr/proxy/selector/whitelist/DefaultWhiteListParser.java
@@ -0,0 +1,78 @@
+package com.btr.proxy.selector.whitelist;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.btr.proxy.selector.whitelist.HostnameFilter.Mode;
+import com.btr.proxy.util.UriFilter;
+
+/*****************************************************************************
+ * Default implementation for an white list parser. This will support the most
+ * common forms of filters found in white lists.
+ * The white list is a comma (or space) separated list of domain names or IP addresses.
+ * The following section shows some examples.
+ *
+ * .mynet.com - Filters all host names ending with .mynet.com
+ * *.mynet.com - Filters all host names ending with .mynet.com
+ * www.mynet.* - Filters all host names starting with www.mynet.
+ * 123.12.32.1 - Filters the IP 123.12.32.1
+ * 123.12.32.1/255 - Filters the IP range
+ * http://www.mynet.com - Filters only HTTP protocol not FTP and no HTTPS
+ *
+ * Example of a list:
+ *
+ * .mynet.com, *.my-other-net.org, 123.55.23.222, 123.55.23.0/24
+ *
+ * Some info about this topic can be found here:
+ * http://kb.mozillazine.org/No_proxy_for
+ * http://technet.microsoft.com/en-us/library/dd361953.aspx
+ *
+ * Note that this implementation does not cover all variations of all browsers
+ * but should cover the most used formats.
+ *
+ * @author Bernd Rosstauscher (proxyvole@rosstauscher.de) Copyright 2009
+ ****************************************************************************/
+
+public class DefaultWhiteListParser implements WhiteListParser {
+
+ /*************************************************************************
+ * parseWhiteList
+ * @see com.btr.proxy.selector.whitelist.WhiteListParser#parseWhiteList(java.lang.String)
+ ************************************************************************/
+
+ public List<UriFilter> parseWhiteList(String whiteList) {
+ List<UriFilter> result = new ArrayList<UriFilter>();
+
+ String[] token = whiteList.split("[, ]+");
+ for (int i = 0; i < token.length; i++) {
+ String tkn = token[i].trim();
+ if (isIP4SubnetFilter(tkn)) {
+ result.add(new IpRangeFilter(tkn));
+ continue;
+ } else
+ if (tkn.endsWith("*")) {
+ tkn = tkn.substring(0, tkn.length()-1);
+ result.add(new HostnameFilter(Mode.BEGINS_WITH, tkn));
+ continue;
+ } else
+ if (tkn.trim().startsWith("*")) {
+ tkn = tkn.substring(1);
+ result.add(new HostnameFilter(Mode.ENDS_WITH, tkn));
+ } else {
+ result.add(new HostnameFilter(Mode.ENDS_WITH, tkn));
+ }
+ }
+
+ return result;
+ }
+
+ /*************************************************************************
+ * @param token
+ * @return
+ ************************************************************************/
+
+ private boolean isIP4SubnetFilter(String token) {
+ return IPv4WithSubnetChecker.isValid(token);
+ }
+
+}