-
-
Notifications
You must be signed in to change notification settings - Fork 15
[bug]: [JMAP] [PushSubscription/set] issues #55
Description
What happened?
Hello Mauro,
It seems that "PushSubscription/set" is not fully implemented.
When I call it for the first time:
[[ "PushSubscription/set", {
"create": {
"4f29": {
"deviceClientId": "iOS-device-id",
"url": "https://mailtemi.eu/api/v1/notify/jmap/?device=iOS-device-id&client=12c6d086",
"types": null
}
}
}, "0" ]]
Stalwart returns:
{"created":{"0696":{"id":"a"}}}
It should be:
"created": {
"4f29": {
"id": "a",
"keys": null,
"expires": "2018-07-13T02:14:29Z"
}
}
Two issues here. Stalwart should call the "app push service" via the "url" property. If it doesn't respond or returns an error, an entry in Stalwart should not be created. Instead, report that push notification creation is not possible. This way, the client can communicate with the user and fallback to fetch. It will also be easier for self-hosted users to troubleshoot.
According to my reading of the RFC, Stalwart should communicate with the Push Service, then Apple APNS/Google GCM (assuming this is the correct device-id for the given app). If each service returns okay to the caller, Stalwart will know that the client will have a verificationCode, and then it makes sense to save that entry for subsequent activation.
For the test, I called "PushSubscription/set" with an update containing only the "expires" property. The returned result was:
Two issues here. Stalwart should call the "app push service" via the "url" property. If it doesn't respond or returns an error, an entry in Stalwart should not be created. Instead, report that push notification creation is not possible. This way, the client can communicate with the user and fallback to fetch. It will also be easier for self-hosted users to troubleshoot.
According to my reading of the RFC, Stalwart should communicate with the Push Service, then Apple APNS/Google GCM (assuming this is the correct device-id for the given app). If each service returns okay to the caller, Stalwart will know that the client will have a verificationCode, and then it makes sense to save that entry for subsequent activation.
For the test, I called "PushSubscription/set" with an update containing only the "expires" property. The returned result was:
{"updated":{"a":null}}
In my opinion, if "PushSubscription/set" with an update without "verificationCode" hasn't passed, it should return an error?
How can we reproduce the problem?
I can reproduce the problem by doing the following steps:
"PushSubscription/set" create
"PushSubscription/set" update
Version
v0.3.x
What database are you using?
SQLite
What blob storage are you using?
Local
Where is your directory located?
SQLite
What operating system are you using?
Linux
Relevant log output
No response
Code of Conduct
- I agree to follow this project's Code of Conduct