This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 9a60a678adb901943f427e0646d9068953e884c3 Author: Benoit Tellier <[email protected]> AuthorDate: Mon Nov 16 14:00:14 2020 +0700 JAMES-3440 EmailQuery Limit & Position validation should not rely on Mono Synchronous checks needs to be represented via an Either --- .../james/jmap/method/EmailQueryMethod.scala | 27 +++++++++++----------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala index b2bfb02..6c32948 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala @@ -54,19 +54,20 @@ class EmailQueryMethod @Inject() (serializer: EmailQuerySerializer, private def processRequest(mailboxSession: MailboxSession, invocation: Invocation, request: EmailQueryRequest, - capabilities: Set[CapabilityIdentifier]): SMono[Invocation] = - searchQueryFromRequest(request, capabilities, mailboxSession) - .flatMap(searchQuery => Limit.validateRequestLimit(request.limit).map((searchQuery, _))) - .flatMap { - case (searchQuery, limit) => Position.validateRequestPosition(request.position) - .map((searchQuery, limit, _)) - }.map { - case (searchQuery, limitToUse, positionToUse) => executeQuery(mailboxSession, request, searchQuery, positionToUse, limitToUse) - .map(response => Invocation( - methodName = methodName, - arguments = Arguments(serializer.serialize(response)), - methodCallId = invocation.methodCallId)) - }.fold(SMono.raiseError, res => res) + capabilities: Set[CapabilityIdentifier]): SMono[Invocation] = { + def validation: Either[Throwable, SMono[Invocation]] = for { + searchQuery <- searchQueryFromRequest(request, capabilities, mailboxSession) + limit <- Limit.validateRequestLimit(request.limit) + position <- Position.validateRequestPosition(request.position) + } yield { + executeQuery(mailboxSession, request, searchQuery, position, limit) + .map(response => Invocation( + methodName = methodName, + arguments = Arguments(serializer.serialize(response)), + methodCallId = invocation.methodCallId)) + } + validation.fold(SMono.raiseError, res => res) + } override def getRequest(mailboxSession: MailboxSession, invocation: Invocation): SMono[EmailQueryRequest] = asEmailQueryRequest(invocation.arguments) --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
