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]

Reply via email to