https://github.com/danhper/elixir-web-push-encryption
Elixir implementation of Web Push Payload encryption.
https://github.com/danhper/elixir-web-push-encryption
Last synced: 3 months ago
JSON representation
Elixir implementation of Web Push Payload encryption.
- Host: GitHub
- URL: https://github.com/danhper/elixir-web-push-encryption
- Owner: danhper
- License: mit
- Created: 2016-04-27T01:40:13.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2024-06-09T21:52:39.000Z (about 1 year ago)
- Last Synced: 2025-03-22T18:04:18.030Z (4 months ago)
- Language: Elixir
- Homepage: https://hex.pm/packages/web_push_encryption
- Size: 61.5 KB
- Stars: 59
- Watchers: 5
- Forks: 43
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# WebPushEncryption

Elixir implementation of [Web Push Payload encryption](https://developers.google.com/web/updates/2016/03/web-push-encryption?hl=en).
## Installation
1. Add `web_push_encryption` and a json library for jose to your list of dependencies in `mix.exs`.
```elixir
def deps do
[
{:poison, "~> 0.4"}, # see jose docs for more options here
{:web_push_encryption, "~> 0.3"}
]
end
```2. 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.
```elixir
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](https://hexdocs.pm/web_push_encryption) for more info.
## Client Sample
You can find the strict minimum client code to try the library under [client-sample](./client-sample/).
You will need Chrome >= 50 or Firefox >= 44.## Credits
The implementation is ported from [googlechrome/web-push-encryption](https://github.com/GoogleChrome/web-push-encryption)