Elixir implementation of Web Push Payload encryption.
- Add
web_push_encryption
and a json library for jose to your list of dependencies inmix.exs
.
def deps do
[
{:poison, "~> 0.4"}, # see jose docs for more options here
{:web_push_encryption, "~> 0.3"}
]
end
- Generate a web push Vapid keypair on the CLI and put it in your
config.exs
file:
$ mix do deps.get, compile
$ mix web_push.gen.keypair
WebPushEncryption
has two public API:
-
WebPushEncryption.encrypt/3
: Takes a body, a subscription, and an optional padding and returns a map containingciphertext
,server_public_key
andsalt
. -
WebPushEncryption.send_web_push/3
: Takes a body, a subcription, and a GCM secret key and sends a push notification with the given payload.
body = ~s({"hello": "elixir"})
subscription = %{keys: %{p256dh: "P256DH", auth: "AUTH" }, endpoint: "ENDPOINT"}
gcm_api_key = "API_KEY"
# encrypt the body
encrypted_body = WebPushEncryption.encrypt(body, subscription)
# or just send the push
{:ok, response} = WebPushEncryption.send_web_push(body, subscription, gcm_api_key)
See the docs for more info.
You can find the strict minimum client code to try the library under client-sample. You will need Chrome >= 50 or Firefox >= 44.
The implementation is ported from googlechrome/web-push-encryption