binwiederhier / ntfy

Send push notifications to your phone or desktop using PUT/POST
https://ntfy.sh
Apache License 2.0
18.55k stars 730 forks source link

Can Firebase and Cache be disabled via the JSON payload? #1119

Open stendler opened 6 months ago

stendler commented 6 months ago

:question: Question

The documentation explains how to disable firebase or message caching via http request headers.
But these are not listed in the corresponding table on publishing via JSON.

Is this just missing from the documentation or not implemented?
If not implemented, could the JSON payload be paired with the request headers?

Is there a simple way to test this? The message payload does not seem to include any hint about how these properties were set.

wunter8 commented 6 months ago

I'm pretty sure those parameters are not parsed in a JSON body (see https://github.com/binwiederhier/ntfy/blob/9d3fc20e583564e40af5afb90233f4714fdfcb4c/server/server.go#L1811).

You can try including them, and if they're not supported, ntfy will reject the request as "invalid JSON".

You can also turn on debug logs on the server and see if things are written to the cache or forwarded to firebase

stendler commented 6 months ago

That's the right code, thank you!

So this looks like adding them via headers in addition to the JSON message payload should work.

You can try including them, and if they're not supported, ntfy will reject the request as "invalid JSON".

I did send messages against ntfy.sh with "firebase": "no" in the JSON payload, and it did not get rejected (or rather the notification went through - not sure if there was a response with an error message).

wunter8 commented 5 months ago

So this looks like adding them via headers in addition to the JSON message payload should work.

Sorry, I missed this question. Yes, you can definitely combine JSON body and HTTP headers.

I just did a quick test, and a JSON body with "cache":"no" was not rejected by the ntfy server, BUT it was written to the cache. So "cache" (and I'm pretty sure "firebase") needs to be included as a header right now and not in the JSON body

stendler commented 5 months ago

Thanks for confirming!

Now the question would be: should firebase and cache be added to the JSON functionality? Looking at the code, this seems straightforward to implement, and I would create a PR for this.

wunter8 commented 5 months ago

I'm not sure. I don't know what @binwiederhier's preferences are regarding fields in the JSON body vs fields in HTTP headers

stendler commented 5 months ago

I've implemented it and opened a PR as an exercise :)

Feel free to close it, if the feature is not desired. Though, I believe, since the JSON API is intended as a workaround for apps that make it difficult or impossible to define http headers, that this change just completes the API.

https://github.com/binwiederhier/ntfy/blob/9d3fc20e583564e40af5afb90233f4714fdfcb4c/docs/publish.md?plain=1#L1082-L1084