This is an automated email from the ASF dual-hosted git repository. rcordier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 0f4025952f1630458a008b36b812359a1bd9d3a7 Author: Quan Tran <[email protected]> AuthorDate: Thu Oct 28 21:07:54 2021 +0700 JAMES-3539 MemoryPushSubscriptionRepository should handle InvalidPushSubscriptionKeys error --- .../pushsubscription/MemoryPushSubscriptionRepository.java | 11 +++++++++++ .../org/apache/james/jmap/api/model/PushSubscription.scala | 4 +++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/pushsubscription/MemoryPushSubscriptionRepository.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/pushsubscription/MemoryPushSubscriptionRepository.java index 61c5c5a..488b616 100644 --- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/pushsubscription/MemoryPushSubscriptionRepository.java +++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/pushsubscription/MemoryPushSubscriptionRepository.java @@ -32,10 +32,12 @@ import javax.inject.Inject; import org.apache.james.core.Username; import org.apache.james.jmap.api.model.DeviceClientIdInvalidException; import org.apache.james.jmap.api.model.ExpireTimeInvalidException; +import org.apache.james.jmap.api.model.InvalidPushSubscriptionKeys; import org.apache.james.jmap.api.model.PushSubscription; import org.apache.james.jmap.api.model.PushSubscriptionCreationRequest; import org.apache.james.jmap.api.model.PushSubscriptionExpiredTime; import org.apache.james.jmap.api.model.PushSubscriptionId; +import org.apache.james.jmap.api.model.PushSubscriptionKeys; import org.apache.james.jmap.api.model.PushSubscriptionNotFoundException; import org.apache.james.jmap.api.model.TypeName; import org.apache.james.jmap.api.pushsubscription.PushSubscriptionRepository; @@ -70,6 +72,9 @@ public class MemoryPushSubscriptionRepository implements PushSubscriptionReposit if (!isUniqueDeviceClientId(username, req.deviceClientId())) { sink.error(new DeviceClientIdInvalidException(req.deviceClientId(), "deviceClientId must be unique")); } + if (isInvalidPushSubscriptionKey(req.keys())) { + sink.error(new InvalidPushSubscriptionKeys(req.keys().get())); + } }) .thenReturn(PushSubscription.from(request, evaluateExpiresTime(OptionConverters.toJava(request.expires().map(PushSubscriptionExpiredTime::value))))) @@ -158,4 +163,10 @@ public class MemoryPushSubscriptionRepository implements PushSubscriptionReposit return table.row(username).values().stream() .noneMatch(subscription -> subscription.deviceClientId().equals(deviceClientId)); } + + private boolean isInvalidPushSubscriptionKey(Option<PushSubscriptionKeys> keysOption) { + return OptionConverters.toJava(keysOption) + .map(key -> key.p256dh().isEmpty() || key.auth().isEmpty()) + .orElse(false); + } } diff --git a/server/data/data-jmap/src/main/scala/org/apache/james/jmap/api/model/PushSubscription.scala b/server/data/data-jmap/src/main/scala/org/apache/james/jmap/api/model/PushSubscription.scala index 6d7b7ac..993b9e0 100644 --- a/server/data/data-jmap/src/main/scala/org/apache/james/jmap/api/model/PushSubscription.scala +++ b/server/data/data-jmap/src/main/scala/org/apache/james/jmap/api/model/PushSubscription.scala @@ -116,4 +116,6 @@ case class PushSubscriptionNotFoundException(id: PushSubscriptionId) extends Run case class ExpireTimeInvalidException(expires: ZonedDateTime, message: String) extends RuntimeException -case class DeviceClientIdInvalidException(deviceClientId: DeviceClientId, message: String) extends RuntimeException \ No newline at end of file +case class DeviceClientIdInvalidException(deviceClientId: DeviceClientId, message: String) extends RuntimeException + +case class InvalidPushSubscriptionKeys(keys: PushSubscriptionKeys) extends RuntimeException \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
