Skip to content

Commit c6821ab

Browse files
committed
add filter out logic
1 parent 08c88d5 commit c6821ab

2 files changed

Lines changed: 23 additions & 12 deletions

File tree

common/src/main/scala/models/Registration.scala

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,17 @@ object Registration {
2121
val n = (v \ "name").asOpt[String].getOrElse("unknown")
2222
s"$t (id=$n)"
2323
}
24-
val all = (json \ "topics").asOpt[JsArray].toSeq.flatMap(_.value.map(topicSummary))
25-
val invalid = (json \ "topics").asOpt[JsArray].toSeq.flatMap { arr =>
26-
arr.value.flatMap { v =>
27-
if (v.validate[Topic].isError) Some(topicSummary(v)) else None
28-
}
29-
}
30-
if (invalid.nonEmpty) {
31-
MDC.put("invalidTopics", invalid.mkString(", "))
32-
if (all.nonEmpty) MDC.put("allTopics", all.mkString(", "))
24+
25+
val topicsArray = (json \ "topics").asOpt[JsArray].getOrElse(JsArray())
26+
val (validTopics, invalidTopics) = topicsArray.value.partition(_.validate[Topic].isSuccess)
27+
28+
if (invalidTopics.nonEmpty) {
29+
MDC.put("invalidTopics", invalidTopics.map(topicSummary).mkString(", "))
30+
MDC.put("validTopics", validTopics.map(topicSummary).mkString(", "))
3331
}
34-
base.reads(json)
32+
33+
val filteredJson = json.as[JsObject] + ("topics" -> JsArray(validTopics))
34+
base.reads(filteredJson)
3535
},
3636
base
3737
)

registration/app/registration/controllers/Main.scala

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import registration.services._
1414
import registration.services.topic.TopicValidator
1515

1616
import scala.concurrent.{ExecutionContext, Future}
17-
import org.slf4j.{Logger, LoggerFactory}
17+
import org.slf4j.{Logger, LoggerFactory, MDC}
1818
import play.api.http.HttpEntity
1919
import providers.ProviderError
2020

@@ -62,7 +62,18 @@ final class Main(
6262
registerWithConverter(legacyRegistrationConverter)
6363

6464
def register: Action[Registration] = actionWithTimeout(parse.json[Registration]) { request: Request[Registration] =>
65-
registerCommon(request.body).map(processResponse(_))
65+
Option(MDC.get("invalidTopics")).foreach { invalidTopics =>
66+
val validTopics = Option(MDC.get("validTopics")).getOrElse("")
67+
val userAgent = request.headers.get("User-Agent").getOrElse("unknown")
68+
val deviceToken = request.body.deviceToken
69+
logger.warn(s"Request contains invalid topic type(s): [$invalidTopics]. Filtering them out. Keeping: [$validTopics]. Device token: $deviceToken. User agent: $userAgent")
70+
MDC.remove("invalidTopics")
71+
MDC.remove("validTopics")
72+
}
73+
if (request.body.topics.isEmpty)
74+
Future.successful(BadRequest("Request contains no valid topics"))
75+
else
76+
registerCommon(request.body).map(processResponse(_))
6677
}
6778

6879
private def registerWithConverter[T](converter: RegistrationConverter[T])(implicit format: Format[T]): Action[T] = actionWithTimeout(parse.json[T]) { request =>

0 commit comments

Comments
 (0)