Add push notifications for forgotten departures #26
|
@ -187,10 +187,10 @@ sudo npm install -g web-push
|
|||
web-push generate-vapid-keys
|
||||
```
|
||||
|
||||
The public Key needs to be copied into `web/main.js` (first line), while the
|
||||
private key is put into the config option `push_private_key`.
|
||||
The keys then need to be copied into the config options `push_public_key` and
|
||||
`push_private_key` respectively so the backend can handle the rest.
|
||||
|
||||
Then, to be VAPID compliant you have to announce an contact address claim to
|
||||
Next, to be VAPID compliant you have to announce an contact address claim to
|
||||
the push services so they can contact you if anything is going wrong with your
|
||||
notifications. Do this by entering your email address as a `mailto:` link in
|
||||
the `push_sender_info` option, like `mailto:it@fasttube.de`.
|
||||
|
|
|
@ -26,8 +26,10 @@ guideline_url = https://fasttube.de/wp-content/uploads/2020/12/Cororna-Regeln-St
|
|||
json_indent = 4
|
||||
|
||||
# VAPID credentials for push notifications
|
||||
# private key: base64url encoded public part of an EC-Prime256v1 keypair. See INSTALL.md
|
||||
# private key: base64url encoded private part of an EC-Prime256v1 keypair. See INSTALL.md
|
||||
# sender info: usually mailto link to responsible party to contact about issues
|
||||
push_public_key = BBwBPYxhogHLU3B1FpxfQNzO3q7qZpmD1n1KaaL8WJbcVmJSHhi1uB-VmvsVjjUHWYCeqKyLT7w-1LBfpIcbbcg
|
||||
push_private_key = abcdefghijklm_NOPQRSTUVWXYZ-0123456789
|
||||
push_sender_info = mailto:it@fasttube.de
|
||||
# when to notify users, in hours after arrival
|
||||
|
|
|
@ -171,6 +171,25 @@ def get_data():
|
|||
return json.dumps(r, indent=SPACES), 200
|
||||
|
||||
|
||||
@app.route('/pushinfo')
|
||||
def get_pushinfo():
|
||||
|
||||
if config['notify_after_hrs']:
|
||||
|
||||
r = {
|
||||
'enabled': True,
|
||||
'publickey': config['push_public_key']
|
||||
}
|
||||
|
||||
else:
|
||||
|
||||
r = {
|
||||
'enabled': False,
|
||||
'publickey': None
|
||||
}
|
||||
|
||||
return json.dumps(r, indent=SPACES), 200
|
||||
|
||||
@app.route('/pushsubscribe', methods=['POST'])
|
||||
def post_pushsub():
|
||||
|
||||
|
|
|
@ -26,8 +26,10 @@ guideline_url = https://youtu.be/oHg5SJYRHA0
|
|||
json_indent = 4
|
||||
|
||||
# VAPID credentials for push notifications
|
||||
# private key: base64url encoded public part of an EC-Prime256v1 keypair. See INSTALL.md
|
||||
# private key: base64url encoded private part of an EC-Prime256v1 keypair. See INSTALL.md
|
||||
# sender info: usually mailto link to responsible party to contact about issues
|
||||
push_public_key = abcdefghijklm_NOPQRSTUVWXYZ-0123456789abcdefghijklm_NOPQRSTUVWXYZ-0123456789abcdefghijklm_NOPQRSTUVWXYZ-0123456789
|
||||
push_private_key = abcdefghijklm_NOPQRSTUVWXYZ-0123456789
|
||||
push_sender_info = mailto:admin@example.com
|
||||
# when to notify users, in hours after arrival
|
||||
|
|
|
@ -10,11 +10,10 @@ then
|
|||
|
||||
web-push generate-vapid-keys --json > $VAPID_CREDS_FILE
|
||||
|
||||
echo "Patching public key into frontend ..."
|
||||
echo "Patching keypair into config ..."
|
||||
PUB_KEY=`cat $VAPID_CREDS_FILE | jq -r .publicKey`
|
||||
sed -i "s/pushServerPublicKey = '[a-zA-Z0-9_\-]*'/pushServerPublicKey = '${PUB_KEY}'/" /var/www/html/ftracker/main.js
|
||||
echo "pushServerPublicKey = ${PUB_KEY}" >> /var/www/html/ftracker/main.js
|
||||
|
||||
echo "Patching private key into backend config ..."
|
||||
PRIV_KEY=`cat $VAPID_CREDS_FILE | jq -r .privateKey`
|
||||
echo "push_private_key = ${PRIV_KEY}" >> /etc/ftracker/config.ini
|
||||
|
||||
|
|
14
web/main.js
14
web/main.js
|
@ -1,5 +1,3 @@
|
|||
var pushServerPublicKey = 'BBwBPYxhogHLU3B1FpxfQNzO3q7qZpmD1n1KaaL8WJbcVmJSHhi1uB-VmvsVjjUHWYCeqKyLT7w-1LBfpIcbbcg'
|
||||
|
||||
var spage = document.getElementById('startpage')
|
||||
var mform = document.getElementById('mainform')
|
||||
|
||||
|
@ -226,6 +224,18 @@ function initPush(name) {
|
|||
return
|
||||
}
|
||||
|
||||
fetch('/pushinfo').then(function(res) {
|
||||
if (res.ok)
|
||||
res.json().then(function(push) {
|
||||
if (push.enabled)
|
||||
registerPush(name, push.publickey);
|
||||
});
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function registerPush(name, pushServerPublicKey) {
|
||||
|
||||
// Register service worker
|
||||
navigator.serviceWorker.register("/sw.js").then(function(swRegistration) {
|
||||
console.log("ServiceWorker registered:", swRegistration)
|
||||
|
|
Loading…
Reference in New Issue