You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by rc...@apache.org on 2021/11/01 04:33:23 UTC

[james-project] 03/05: JAMES-3539 MemoryPushSubscriptionRepository should handle InvalidPushSubscriptionKeys error

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 <hq...@linagora.com>
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: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org