Skip to content

kosmigramma/elixir-web-push-encryption

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

74 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WebPushEncryption

CI workflow badge

Elixir implementation of Web Push Payload encryption.

Installation

  1. Add web_push_encryption and a json library for jose to your list of dependencies in mix.exs.
def deps do
  [
    {:poison, "~> 0.4"}, # see jose docs for more options here
    {:web_push_encryption, "~> 0.3"}
  ]
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

About

Elixir implementation of Web Push Payload encryption.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Elixir 97.5%
  • JavaScript 1.6%
  • HTML 0.9%