Skip to content

Commit f9274fe

Browse files
committed
Java & Scala: add configurable list of domains which should count as "internal" (#18)
1 parent ad2c2a4 commit f9274fe

File tree

2 files changed

+32
-4
lines changed
  • java-scala/src/main

2 files changed

+32
-4
lines changed

java-scala/src/main/java/com/snowplowanalytics/refererparser/Parser.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.util.List;
2727
import java.util.Map;
2828
import java.util.HashMap;
29+
import java.util.Collections;
2930

3031
// SnakeYAML
3132
import org.yaml.snakeyaml.Yaml;
@@ -107,8 +108,12 @@ public Referer parse(String refererUri, String pageHost) throws URISyntaxExcepti
107108
}
108109

109110
public Referer parse(URI refererUri, String pageHost) {
111+
return parse(refererUri, pageHost, Collections.<String>emptyList());
112+
}
113+
114+
public Referer parse(URI refererUri, String pageHost, List<String> internalDomains) {
110115
if (refererUri == null) { return null; }
111-
return parse(refererUri.getScheme(), refererUri.getHost(), refererUri.getPath(), refererUri.getRawQuery(), pageHost);
116+
return parse(refererUri.getScheme(), refererUri.getHost(), refererUri.getPath(), refererUri.getRawQuery(), pageHost, internalDomains);
112117
}
113118

114119
public Referer parse(URL refererUrl, String pageHost){
@@ -117,6 +122,10 @@ public Referer parse(URL refererUrl, String pageHost){
117122
}
118123

119124
private Referer parse(String scheme, String host, String path, String query, String pageHost){
125+
return parse(scheme, host, path, query, pageHost, Collections.<String>emptyList());
126+
}
127+
128+
private Referer parse(String scheme, String host, String path, String query, String pageHost, List<String> internalDomains){
120129

121130
if (scheme == null || (!scheme.equals("http") && !scheme.equals("https"))) return null;
122131

@@ -126,6 +135,10 @@ private Referer parse(String scheme, String host, String path, String query, Str
126135
// 2. Have an algo for stripping subdomains before checking match
127136
if (host == null) return null; // Not a valid URL
128137
if (host.equals(pageHost)) return new Referer(Medium.INTERNAL, null, null);
138+
for (String s : internalDomains) {
139+
if (s.trim().equals(host))
140+
return new Referer(Medium.INTERNAL, null, null);
141+
}
129142

130143
// Try to lookup our referer. First check with paths, then without.
131144
// This is the safest way of handling lookups
@@ -264,4 +277,4 @@ private Map<String,RefererLookup> loadReferers(InputStream referersYaml) throws
264277

265278
return referers;
266279
}
267-
}
280+
}

java-scala/src/main/scala/com/snowplowanalytics/refererparser/scala/Parser.scala

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.snowplowanalytics.refererparser.scala
1818

1919
// Java
20+
import java.util.{List => JavaList}
2021
import java.net.{URI, URISyntaxException}
2122

2223
// RefererParser Java impl
@@ -114,14 +115,28 @@ object Parser {
114115
* either Some Referer, or None.
115116
*/
116117
def parse(refererUri: URI, pageHost: String): MaybeReferer = {
118+
parse(refererUri, pageHost, List[String]())
119+
}
120+
121+
122+
/**
123+
* Parses a `refererUri` URI to return
124+
* either Some Referer, or None.
125+
*/
126+
def parse(refererUri: URI, pageHost: String, internalDomains: List[String]): MaybeReferer = {
117127

118128
try {
119-
val jrefr = Option(jp.parse(refererUri, pageHost))
129+
130+
// Convert from a Scala list to a Java list
131+
val javaInternalDomains = new java.util.ArrayList[String](internalDomains.size)
132+
internalDomains.foreach (javaInternalDomains.add(_))
133+
134+
val jrefr = Option(jp.parse(refererUri, pageHost, javaInternalDomains))
120135
jrefr.map(jr =>
121136
Referer(Medium.fromJava(jr.medium), Option(jr.source), Option(jr.term))
122137
)
123138
} catch {
124139
case use: URISyntaxException => None
125140
}
126141
}
127-
}
142+
}

0 commit comments

Comments
 (0)