From 69f11c4a8461bd148b9d5e6223046e57994bb4cc Mon Sep 17 00:00:00 2001 From: Michael Date: Sun, 15 Aug 2021 21:24:23 +0000 Subject: [PATCH] Adding the VAPID keys --- src/Factory/Api/Mastodon/Subscription.php | 2 +- src/Model/Subscription.php | 28 ++++++++++++++++++++--- src/Worker/PushSubscription.php | 12 +++++++++- 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/src/Factory/Api/Mastodon/Subscription.php b/src/Factory/Api/Mastodon/Subscription.php index 08dbcf0d17..76034708a9 100644 --- a/src/Factory/Api/Mastodon/Subscription.php +++ b/src/Factory/Api/Mastodon/Subscription.php @@ -36,6 +36,6 @@ class Subscription extends BaseFactory public function createForApplicationIdAndUserId(int $applicationid, int $uid): \Friendica\Object\Api\Mastodon\Subscription { $subscription = DBA::selectFirst('subscription', [], ['application-id' => $applicationid, 'uid' => $uid]); - return new \Friendica\Object\Api\Mastodon\Subscription($subscription, ModelSubscription::getVapidKey()); + return new \Friendica\Object\Api\Mastodon\Subscription($subscription, ModelSubscription::getPublicVapidKey()); } } diff --git a/src/Model/Subscription.php b/src/Model/Subscription.php index dd81ee2d63..43bf2ae551 100644 --- a/src/Model/Subscription.php +++ b/src/Model/Subscription.php @@ -100,20 +100,42 @@ class Subscription } /** - * Fetch a VAPID key + * Fetch a VAPID keypair * - * @return string + * @return array */ - public static function getVapidKey(): string + private static function getKeyPair(): array { $keypair = DI::config()->get('system', 'ec_keypair'); if (empty($keypair)) { $keypair = Crypto::newECKeypair(); DI::config()->set('system', 'ec_keypair', $keypair); } + return $keypair; + } + + /** + * Fetch the public VAPID key + * + * @return string + */ + public static function getPublicVapidKey(): string + { + $keypair = self::getKeyPair(); return $keypair['vapid-public']; } + /** + * Fetch the public VAPID key + * + * @return string + */ + public static function getPrivateVapidKey(): string + { + $keypair = self::getKeyPair(); + return $keypair['vapid-private']; + } + /** * Prepare push notification * diff --git a/src/Worker/PushSubscription.php b/src/Worker/PushSubscription.php index 3f209af2cd..aef82103be 100644 --- a/src/Worker/PushSubscription.php +++ b/src/Worker/PushSubscription.php @@ -23,6 +23,8 @@ namespace Friendica\Worker; use Friendica\Core\Logger; use Friendica\Database\DBA; +use Friendica\DI; +use Friendica\Model\Subscription as ModelSubscription; use Minishlink\WebPush\WebPush; use Minishlink\WebPush\Subscription; @@ -41,7 +43,15 @@ class PushSubscription 'payload' => null, ]; - $webPush = new WebPush(); + $auth = [ + 'VAPID' => [ + 'subject' => DI::baseUrl()->getHostname(), + 'publicKey' => ModelSubscription::getPublicVapidKey(), + 'privateKey' => ModelSubscription::getPrivateVapidKey(), + ], + ]; + + $webPush = new WebPush($auth); $report = $webPush->sendOneNotification( $notification['subscription'],