Protection against non-parsable Accept-Language header
This commit is contained in:
@@ -2,6 +2,7 @@ package org.jeudego.pairgoth.view
|
||||
|
||||
import org.apache.velocity.tools.config.ValidScope
|
||||
import org.jeudego.pairgoth.web.WebappManager
|
||||
import org.slf4j.LoggerFactory
|
||||
import javax.servlet.http.HttpServletRequest
|
||||
|
||||
@ValidScope("request")
|
||||
@@ -19,12 +20,15 @@ class CountriesTool {
|
||||
countries[iso]?.let { name ->
|
||||
Pair(iso, name)
|
||||
}
|
||||
} ?: null.also {
|
||||
logger.warn("could not get country from Accept-Language header: ${request.getHeader("Accept-Language")}")
|
||||
}
|
||||
}
|
||||
|
||||
public fun getCountries() = countries.entries.sortedBy { it.value }
|
||||
|
||||
companion object {
|
||||
val logger = LoggerFactory.getLogger("view")
|
||||
private val langHeaderParser = Regex("(?:\\b(\\*|[a-z]{2})(?:(?:_|-)([a-z]{2}))?)(?:;q=([0-9.]+))?", RegexOption.IGNORE_CASE)
|
||||
public val countries = mapOf(
|
||||
"ad" to "Andorra",
|
||||
|
@@ -25,7 +25,13 @@
|
||||
<span class="info"></span>
|
||||
<select name="country" placeholder="country">
|
||||
<option></option>
|
||||
#set($defaultCountry = $countries.country.first)
|
||||
#set($countryFromPreferredLanguage = $countries.country)
|
||||
#if($countryFromPreferredLanguage)
|
||||
#set($defaultCountry = $countryFromPreferredLanguage.first)
|
||||
#else
|
||||
## Accept-Language could not be parsed
|
||||
#set($defaultCountry = 'en')
|
||||
#end
|
||||
#foreach($country in $countries.countries)
|
||||
<option value="$country.key" #if($tour && $country.key.toLowerCase() == $tour.country.toLowerCase() || !$tour && $country.key.toLowerCase() == $defaultCountry.toLowerCase()) selected #end>$country.value</option>
|
||||
#end
|
||||
|
Reference in New Issue
Block a user