Add basic webpush backend functionality and endpoints for testing

This commit is contained in:
Oskar Winkels 2021-06-08 00:48:11 +02:00
parent e7a3a0a673
commit e521edd62b
Signed by: o.winkels
GPG Key ID: E7484A06E99DAEF1
2 changed files with 57 additions and 0 deletions

View File

@ -22,6 +22,10 @@ from flask import Flask, request, redirect
app = Flask(__name__, static_folder='../web')
from pywebpush import webpush, WebPushException
pushsubs = db.table('pushsubs')
if config['delete_after_days']:
from .deleter import Deleter
deleter = Deleter(db, int(config['delete_after_days']))
@ -159,3 +163,55 @@ def get_data():
)
return json.dumps(r, indent=SPACES), 200
@app.route('/pushsubscribe', methods=['POST'])
def post_pushsub():
try:
payload = request.data.decode('UTF-8')
data = json.loads(payload)
except ValueError as e:
return 'Error: JSON decode error:\n' + str(e), 400
name = slugify(data['name'])
data['name'] = name
print(json.dumps(data, indent=SPACES))
Entry = Query()
pushsubs.upsert(data, Entry.name == name)
return 'OK', 201
@app.route('/testpush/<name>')
def testpush(name):
Entry = Query()
ps = pushsubs.search(Entry.name == name)[0]
arr = db.search((Entry.name == name) & (Entry.departure == None))
arr = arr if len(arr) else None
print(ps)
subscription = ps['sub']
notification = {
'title': "Forgot to sign out?",
'body': "You didn't sign out of ftracker yet",
'arr': arr
}
try:
webpush(
subscription,
json.dumps(notification, indent=SPACES),
vapid_private_key = config['push_private_key'],
vapid_claims = {
'sub': config['push_sender_info']
},
verbose=True
)
return 'OK', 201
except WebPushException as exc:
print(exc)
return 'Error', 500

View File

@ -20,6 +20,7 @@ st.setup(
"flask",
"tinydb",
"python-slugify",
"pywebpush",
],
license=license_text,
classifiers=[