From c85ce2f6b078dfd5d25195d56d97542a41822a15 Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 16 Aug 2021 06:11:26 +0000 Subject: [PATCH] Add a payload --- src/Model/Subscription.php | 2 +- src/Worker/PushSubscription.php | 30 +++++++++++++++++++++++++----- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/Model/Subscription.php b/src/Model/Subscription.php index 71d26248f3..5fb88911ac 100644 --- a/src/Model/Subscription.php +++ b/src/Model/Subscription.php @@ -155,7 +155,7 @@ class Subscription $subscriptions = DBA::select('subscription', [], ['uid' => $notification['uid'], $type => true]); while ($subscription = DBA::fetch($subscriptions)) { Logger::info('Push notification', ['id' => $subscription['id'], 'uid' => $subscription['uid'], 'type' => $type]); - Worker::add(PRIORITY_HIGH, 'PushSubscription', $subscription['id']); + Worker::add(PRIORITY_HIGH, 'PushSubscription', $subscription['id'], $nid); } DBA::close($subscriptions); } diff --git a/src/Worker/PushSubscription.php b/src/Worker/PushSubscription.php index de385afa1c..f3c3a4046f 100644 --- a/src/Worker/PushSubscription.php +++ b/src/Worker/PushSubscription.php @@ -24,23 +24,43 @@ namespace Friendica\Worker; use Friendica\Core\Logger; use Friendica\Database\DBA; use Friendica\DI; +use Friendica\Model\Contact; use Friendica\Model\Subscription as ModelSubscription; +use Friendica\Util\DateTimeFormat; use Minishlink\WebPush\WebPush; use Minishlink\WebPush\Subscription; class PushSubscription { - public static function execute(int $sid) + public static function execute(int $sid, int $nid) { $subscription = DBA::selectFirst('subscription', [], ['id' => $sid]); + $notification = DBA::selectFirst('notification', [], ['id' => $nid]); - $notification = [ + if (!empty($notification['uri-id'])) { + $notify = DBA::selectFirst('notify', ['msg'], ['uri-id' => $notification['target-uri-id']]); + } + + if (!empty($notification['actor-id'])) { + $actor = Contact::getById($notification['actor-id']); + } + + $push = [ 'subscription' => Subscription::create([ 'endpoint' => $subscription['endpoint'], 'publicKey' => $subscription['pubkey'], 'authToken' => $subscription['secret'], ]), - 'payload' => null, + // @todo Check if we are supposed to transmit a payload at all + 'payload' => json_encode([ + 'title' => 'Friendica', + 'body' => $notify['msg'] ?? '', + 'icon' => $actor['thumb'] ?? '', + 'image' => '', + 'badge' => DI::baseUrl()->get() . '/images/friendica-192.png', + 'tag' => $notification['parent-uri-id'] ?? '', + 'timestamp' => DateTimeFormat::utc($notification['created'], DateTimeFormat::JSON), + ]), ]; $auth = [ @@ -54,8 +74,8 @@ class PushSubscription $webPush = new WebPush($auth); $report = $webPush->sendOneNotification( - $notification['subscription'], - $notification['payload'] + $push['subscription'], + $push['payload'] ); $endpoint = $report->getRequest()->getUri()->__toString();