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());
}
}
}
/**
- * 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
*
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;
'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'],