/elixir-web-push-encryption

Elixir implementation of Web Push Payload encryption.

Primary LanguageElixirMIT LicenseMIT

WebPushEncryption

Build Status

Elixir implementation of Web Push Payload encryption.

Installation

  1. Add web_push_encryption to your list of dependencies in mix.exs.
def deps do
  [{:web_push_encryption, "~> 0.1.1"}]
end
  1. Ensure web_push_encryption is started before your application:
def application do
  [applications: [:web_push_encryption]]
end
  1. 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

Usage

WebPushEncryption has two public API:

  • WebPushEncryption.encrypt/3: Takes a body, a subscription, and an optional padding and returns a map containing ciphertext, server_public_key and salt.

  • 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.

Client Sample

You can find the strict minimum client code to try the library under client-sample. You will need Chrome >= 50 or Firefox >= 44.

Credits

The implementation is ported from googlechrome/web-push-encryption