merged changes hopefully not broooken

This commit is contained in:
trav 2021-04-07 10:11:30 -04:00
commit 4fd70faf99
5 changed files with 68 additions and 7 deletions

View File

@ -1,6 +1,8 @@
from django.db import models
def send_request(target, object_iri, instance, created):
ActivityQueueService.send_activity(target, json)
ActivityQueueService.send_activity(target, json)
class VAPIDKeyset(models.Model):
public_key = models.BinaryField(max_length=87)
private_key = models.BinaryField(max_length=43)
@ -10,7 +12,3 @@ class VAPIDKeyset(models.Model):
self.public_key.tobytes()[:10],
self.private_key.tobytes()[:10]
)
@receiver(post_save, sender=Notification)
def send_email_on_notification(sender, instance, created, **kwargs):
if created and instance.summary and getattr(settings,'JABBER_DEFAULT_HOST',False) and instance.user.email:

View File

@ -0,0 +1,18 @@
// Register event listener for the 'push' event.
self.addEventListener("push", function (event) {
// Retrieve the textual payload from event.data (a PushMessageData object).
// Other formats are supported (ArrayBuffer, Blob, JSON), check out the documentation
// on https://developer.mozilla.org/en-US/docs/Web/API/PushMessageData.
const eventInfo = event.data.text();
const data = JSON.parse(eventInfo);
const head = data.head || "New Notification 🕺🕺";
const body = data.body || "This is default content. Your notification didn't have one 🙄🙄";
// Keep the service worker alive until the notification is created.
event.waitUntil(
self.registration.showNotification(head, {
body: body,
icon: "https://i.imgur.com/MZM3K5w.png",
})
);
});

View File

@ -0,0 +1,15 @@
from django.urls import include, path
from django.views.generic import TemplateView
from .views import home, send_push
urlpatterns = [
path("send_push", send_push),
path("webpush/", include("webpush.urls")),
path(
"sw.js",
TemplateView.as_view(
template_name="sw.js", content_type="application/x-javascript"
),
),
]

View File

@ -0,0 +1,29 @@
import json
from django.conf import settings
from django.http.response import HttpResponse, JsonResponse
from django.shortcuts import get_object_or_404, render
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_GET, require_POST
from djangoldp_account.models import LDPUser
from webpush import send_user_notification
@require_POST
@csrf_exempt
def send_push(request):
try:
body = request.body
data = json.loads(body)
if "head" not in data or "body" not in data or "id" not in data:
return JsonResponse(status=400, data={"message": "Invalid data format"})
user_id = data["id"]
user = get_object_or_404(LDPUser, pk=user_id)
payload = {"head": data["head"], "body": data["body"]}
send_user_notification(user=user, payload=payload, ttl=1000)
return JsonResponse(status=200, data={"message": "Web push successful"})
except TypeError:
return JsonResponse(status=500, data={"message": "An error occurred"})

View File

@ -10,9 +10,10 @@ license = MIT
[options]
packages = find:
install_requires =
djangoldp~=2.1.0
djangoldp~=2.1
djangoldp_account~=2.1
ecdsa~=0.16.1
django-webpush~=0.3
[options.extras_require]
include_package_data = True