Rust Web Push
=============
[](https://travis-ci.org/pimeys/rust-web-push)
[](https://crates.io/crates/web_push)
Web push notification sender.
## Requirements
Needs a Tokio executor version 0.2 or later and Rust compiler version 1.39.0 or later.
Documentation
-------------
* [Released](https://docs.rs/web-push/)
* [Master](https://pimeys.github.io/rust-web-push/master/index.html)
To send a web push from command line, first subscribe to receive push
notifications with your browser and store the subscription info into a json
file. It should have the following content:
``` json
{
"endpoint": "https://updates.push.services.mozilla.com/wpush/v1/TOKEN",
"keys": {
"auth": "####secret####",
"p256dh": "####public_key####"
}
}
```
Google has
[good instructions](https://developers.google.com/web/updates/2015/03/push-notifications-on-the-open-web) for
building a frontend to receive notifications.
Store the subscription info to `examples/test.json` and send a notification with
`cargo run --example simple_send -- -f examples/test.json -p "It works!"`. If
using Google Chrome, you need to register yourself
into [Firebase](https://firebase.google.com/) and provide a GCM API Key with
parameter `-k GCM_API_KEY`.
Examples
--------
To see it used in a real project, take a look to the [XORC
Notifications](https://github.com/xray-tech/xorc-notifications), which is a
full-fledged consumer for sending push notifications.
VAPID
-----
VAPID authentication prevents unknown sources sending notifications to the
client and allows sending notifications to Chrome without signing in to Firebase
and providing a GCM API key.
The private key to be used by the server can be generated with OpenSSL:
```
openssl ecparam -genkey -name prime256v1 -out private_key.pem
```
To derive a public key from the just-generated private key, to be used in the
JavaScript client:
```