diff --git a/pom.xml b/pom.xml
index 6328a7e..ee71dc5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
io.dropwizard
dropwizard-maxmind
- 1.0.5-1
+ 1.0.5-2
jar
dropwizard-maxmind
diff --git a/src/main/java/io/dropwizard/maxmind/geoip2/Characters.java b/src/main/java/io/dropwizard/maxmind/geoip2/Characters.java
new file mode 100644
index 0000000..d7c1923
--- /dev/null
+++ b/src/main/java/io/dropwizard/maxmind/geoip2/Characters.java
@@ -0,0 +1,12 @@
+package io.dropwizard.maxmind.geoip2;
+
+public class Characters {
+
+ public static String toAscii(String s) {
+ if (s == null || s.isEmpty()) {
+ return s;
+ }
+ return s.replaceAll("[^\\x20-\\x7e]", "");
+ }
+
+}
diff --git a/src/main/java/io/dropwizard/maxmind/geoip2/filter/MaxMindGeoIpRequestFilter.java b/src/main/java/io/dropwizard/maxmind/geoip2/filter/MaxMindGeoIpRequestFilter.java
index 286827a..56f7aab 100644
--- a/src/main/java/io/dropwizard/maxmind/geoip2/filter/MaxMindGeoIpRequestFilter.java
+++ b/src/main/java/io/dropwizard/maxmind/geoip2/filter/MaxMindGeoIpRequestFilter.java
@@ -28,6 +28,7 @@
import com.maxmind.geoip2.model.CountryResponse;
import com.maxmind.geoip2.model.EnterpriseResponse;
import com.maxmind.geoip2.record.*;
+import io.dropwizard.maxmind.geoip2.Characters;
import io.dropwizard.maxmind.geoip2.config.MaxMindConfig;
import io.dropwizard.maxmind.geoip2.core.MaxMindHeaders;
import lombok.extern.slf4j.Slf4j;
@@ -175,26 +176,32 @@ public void filter(final ContainerRequestContext containerRequestContext) throws
private void addCountryInfo(Country country, final ContainerRequestContext containerRequestContext) {
if (!Strings.isNullOrEmpty(country.getName()))
- containerRequestContext.getHeaders().putSingle(MaxMindHeaders.X_COUNTRY, country.getName());
+ containerRequestContext.getHeaders().putSingle(MaxMindHeaders.X_COUNTRY,
+ Characters.toAscii(country.getName()));
if (!Strings.isNullOrEmpty(country.getIsoCode()))
- containerRequestContext.getHeaders().putSingle(MaxMindHeaders.X_COUNTRY_ISO, country.getIsoCode());
+ containerRequestContext.getHeaders().putSingle(MaxMindHeaders.X_COUNTRY_ISO,
+ Characters.toAscii(country.getIsoCode()));
}
private void addStateInfo(Subdivision subdivision, final ContainerRequestContext containerRequestContext) {
if (!Strings.isNullOrEmpty(subdivision.getName()))
- containerRequestContext.getHeaders().putSingle(MaxMindHeaders.X_STATE, subdivision.getName());
+ containerRequestContext.getHeaders().putSingle(MaxMindHeaders.X_STATE,
+ Characters.toAscii(subdivision.getName()));
if (!Strings.isNullOrEmpty(subdivision.getIsoCode()))
- containerRequestContext.getHeaders().putSingle(MaxMindHeaders.X_STATE_ISO, subdivision.getIsoCode());
+ containerRequestContext.getHeaders().putSingle(MaxMindHeaders.X_STATE_ISO,
+ Characters.toAscii(subdivision.getIsoCode()));
}
private void addCityInfo(City city, final ContainerRequestContext containerRequestContext) {
if (!Strings.isNullOrEmpty(city.getName()))
- containerRequestContext.getHeaders().putSingle(MaxMindHeaders.X_CITY, city.getName());
+ containerRequestContext.getHeaders().putSingle(MaxMindHeaders.X_CITY,
+ Characters.toAscii(city.getName()));
}
private void addPostalInfo(Postal postal, final ContainerRequestContext containerRequestContext) {
if (!Strings.isNullOrEmpty(postal.getCode()))
- containerRequestContext.getHeaders().putSingle(MaxMindHeaders.X_POSTAL, postal.getCode());
+ containerRequestContext.getHeaders().putSingle(MaxMindHeaders.X_POSTAL,
+ Characters.toAscii(postal.getCode()));
}
private void addLocationInfo(Location location, final ContainerRequestContext containerRequestContext) {
@@ -208,11 +215,14 @@ private void addLocationInfo(Location location, final ContainerRequestContext co
private void addTraitsInfo(Traits traits, final ContainerRequestContext containerRequestContext) {
if (!Strings.isNullOrEmpty(traits.getUserType()))
- containerRequestContext.getHeaders().putSingle(MaxMindHeaders.X_USER_TYPE, traits.getUserType());
+ containerRequestContext.getHeaders().putSingle(MaxMindHeaders.X_USER_TYPE,
+ Characters.toAscii(traits.getUserType()));
if (!Strings.isNullOrEmpty(traits.getIsp()))
- containerRequestContext.getHeaders().putSingle(MaxMindHeaders.X_ISP, traits.getIsp());
+ containerRequestContext.getHeaders().putSingle(MaxMindHeaders.X_ISP,
+ Characters.toAscii(traits.getIsp()));
if (traits.getConnectionType() != null)
- containerRequestContext.getHeaders().putSingle(MaxMindHeaders.X_CONNECTION_TYPE, traits.getConnectionType().name());
+ containerRequestContext.getHeaders().putSingle(MaxMindHeaders.X_CONNECTION_TYPE,
+ Characters.toAscii(traits.getConnectionType().name()));
containerRequestContext.getHeaders().putSingle(MaxMindHeaders.X_PROXY_LEGAL, String.valueOf(traits.isLegitimateProxy()));
}
diff --git a/src/test/java/io/dropwizard/maxmind/geoip2/CharactersTest.java b/src/test/java/io/dropwizard/maxmind/geoip2/CharactersTest.java
new file mode 100644
index 0000000..7b473ca
--- /dev/null
+++ b/src/test/java/io/dropwizard/maxmind/geoip2/CharactersTest.java
@@ -0,0 +1,25 @@
+package io.dropwizard.maxmind.geoip2;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class CharactersTest {
+
+ @Test
+ public void testAsciiOnlyAsciiString(){
+ String s = "example abcd";
+ assertEquals(s, Characters.toAscii(s));
+ }
+
+ @Test
+ public void testAsciiNullString(){
+ assertEquals(null, Characters.toAscii(null));
+ }
+
+ @Test
+ public void testAsciiWithNonAsciiCharacters(){
+ assertEquals("orpsd", Characters.toAscii("orčpžsíáýd"));
+ }
+
+}
\ No newline at end of file