From 0cdddcfd2c1551e84eb4f46274f0e430f01419fe Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sat, 21 Sep 2019 22:25:42 -0700 Subject: [PATCH] Added getNonNullHeader() extension function. --- .../thauvin/erik/akismet/AkismetComment.kt | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt b/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt index c639636..7d6824e 100644 --- a/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt +++ b/src/main/kotlin/net/thauvin/erik/akismet/AkismetComment.kt @@ -158,13 +158,18 @@ open class AkismetComment(val userIp: String, val userAgent: String) { /** * Create an Akismet comment extracting the [userIp], [userAgent], [referrer] and [serverEnv] environment variables - * from a Servlet request. See the + * from a Servlet request. + * + * See the * [Akismet API](https://akismet.com/development/api/#comment-check) for more details. * * @see [serverEnv] */ - constructor(request: HttpServletRequest) : this(request.remoteAddr, request.getHeader("User-Agent")) { - serverEnv = buildPhpVars(request) + constructor(request: HttpServletRequest) : this(request.remoteAddr, request.getNonNullHeader("User-Agent")) { + referrer = request.getNonNullHeader("referer") + serverEnv = buildServerEnv(request) + } + /** * Returns a string representation of the comment. */ @@ -190,18 +195,29 @@ open class AkismetComment(val userIp: String, val userAgent: String) { } } -private fun buildPhpVars(request: HttpServletRequest): HashMap { +private fun buildServerEnv(request: HttpServletRequest): HashMap { val params = HashMap() - params["REMOTE_ADDR"] = request.remoteAddr - params["REQUEST_URI"] = request.requestURI + + if (request.remoteAddr != null) + params["REMOTE_ADDR"] = request.remoteAddr + if (request.requestURI != null) + params["REQUEST_URI"] = request.requestURI val names = request.headerNames while (names.hasMoreElements()) { val name = names.nextElement() if (!name.equals("cookie", true)) { - params["HTTP_${name.toUpperCase().replace('-', '_')}"] = request.getHeader(name) + params["HTTP_${name.toUpperCase().replace('-', '_')}"] = request.getNonNullHeader(name) } } return params } + +private fun HttpServletRequest.getNonNullHeader(name: String): String { + val header = getHeader(name) + if (header != null) { + return header + } + return "" +}