From f2e639243876bdb6a4b2ba471ed5383c30413476 Mon Sep 17 00:00:00 2001 From: Alessio Gallitano <25105748+galales@users.noreply.github.com> Date: Wed, 14 Feb 2024 17:13:29 +0100 Subject: [PATCH] PIN-4557-fix: Fix escaping for mongodb regex filters (#198) --- .../common/readmodel/ReadModelPurposeQueries.scala | 4 ++-- .../purposeprocess/common/readmodel/ReadModelQuery.scala | 5 ----- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/main/scala/it/pagopa/interop/purposeprocess/common/readmodel/ReadModelPurposeQueries.scala b/src/main/scala/it/pagopa/interop/purposeprocess/common/readmodel/ReadModelPurposeQueries.scala index d4739605..ed3395b2 100644 --- a/src/main/scala/it/pagopa/interop/purposeprocess/common/readmodel/ReadModelPurposeQueries.scala +++ b/src/main/scala/it/pagopa/interop/purposeprocess/common/readmodel/ReadModelPurposeQueries.scala @@ -143,8 +143,8 @@ object ReadModelPurposeQueries extends ReadModelQuery { val eServicesIdsFilter = mapToVarArgs(eServicesIds.map(Filters.eq("data.eserviceId", _)))(Filters.or) val consumersIdsFilter = mapToVarArgs(consumersIds.map(Filters.eq("data.consumerId", _)))(Filters.or) val titleFilter = - if (exactMatchOnTitle) title.map(n => safeRegex("data.title", s"^$n$$", "i")) - else title.map(safeRegex("data.title", _, "i")) + if (exactMatchOnTitle) title.map(n => Filters.regex("data.title", s"^${escape(n)}$$", "i")) + else title.map(n => Filters.regex("data.title", escape(n), "i")) mapToVarArgs( eServicesIdsFilter.toList ++ consumersIdsFilter.toList ++ statesFilter.toList ++ titleFilter.toList // :+ permissionFilter )(Filters.and).getOrElse(Filters.empty()) diff --git a/src/main/scala/it/pagopa/interop/purposeprocess/common/readmodel/ReadModelQuery.scala b/src/main/scala/it/pagopa/interop/purposeprocess/common/readmodel/ReadModelQuery.scala index c200d7b4..51a14990 100644 --- a/src/main/scala/it/pagopa/interop/purposeprocess/common/readmodel/ReadModelQuery.scala +++ b/src/main/scala/it/pagopa/interop/purposeprocess/common/readmodel/ReadModelQuery.scala @@ -1,12 +1,7 @@ package it.pagopa.interop.purposeprocess.common.readmodel -import org.mongodb.scala.bson.conversions.Bson -import org.mongodb.scala.model.Filters - trait ReadModelQuery { def mapToVarArgs[A, B](l: Seq[A])(f: Seq[A] => B): Option[B] = Option.when(l.nonEmpty)(f(l)) def escape(str: String): String = str.replaceAll("([.*+?^${}()|\\[\\]\\\\])", "\\\\$1") - def safeRegex(fieldName: String, pattern: String, options: String): Bson = - Filters.regex(fieldName, escape(pattern), options) }