@@ -262,34 +262,12 @@ private function prepare(array $notifications): array
262
262
}
263
263
// if VAPID (GCM doesn't support it but FCM does)
264
264
elseif (array_key_exists ('VAPID ' , $ auth )) {
265
- $ vapid = $ auth ['VAPID ' ];
266
-
267
265
$ audience = parse_url ($ endpoint , PHP_URL_SCHEME ).':// ' .parse_url ($ endpoint , PHP_URL_HOST );
268
-
269
266
if (!parse_url ($ audience )) {
270
267
throw new \ErrorException ('Audience " ' .$ audience .'"" could not be generated. ' );
271
268
}
272
269
273
- $ vapidHeaders = null ;
274
- $ cache_key = null ;
275
- if ($ this ->reuseVAPIDHeaders ) {
276
- $ cache_key = implode ('# ' , [$ audience , $ contentEncoding , crc32 (serialize ($ vapid ))]);
277
- if (array_key_exists ($ cache_key , $ this ->vapidHeaders )) {
278
- $ vapidHeaders = $ this ->vapidHeaders [$ cache_key ];
279
- }
280
- }
281
-
282
- if (!$ vapidHeaders ) {
283
- if (!$ contentEncoding ) {
284
- throw new \ErrorException ('Subscription should have a content encoding ' );
285
- }
286
-
287
- $ vapidHeaders = VAPID ::getVapidHeaders ($ audience , $ vapid ['subject ' ], $ vapid ['publicKey ' ], $ vapid ['privateKey ' ], $ contentEncoding );
288
- }
289
-
290
- if ($ this ->reuseVAPIDHeaders ) {
291
- $ this ->vapidHeaders [$ cache_key ] = $ vapidHeaders ;
292
- }
270
+ $ vapidHeaders = $ this ->getVAPIDHeaders ($ audience , $ contentEncoding , $ auth ['VAPID ' ]);
293
271
294
272
$ headers ['Authorization ' ] = $ vapidHeaders ['Authorization ' ];
295
273
@@ -391,4 +369,38 @@ public function setDefaultOptions(array $defaultOptions)
391
369
public function countPendingNotifications (): int {
392
370
return null !== $ this ->notifications ? count ($ this ->notifications ) : 0 ;
393
371
}
372
+
373
+ /**
374
+ * @param string $audience
375
+ * @param string|null $contentEncoding
376
+ * @param array $vapid
377
+ * @return array
378
+ * @throws \ErrorException
379
+ */
380
+ private function getVAPIDHeaders (string $ audience , ?string $ contentEncoding , array $ vapid )
381
+ {
382
+ $ vapidHeaders = null ;
383
+
384
+ $ cache_key = null ;
385
+ if ($ this ->reuseVAPIDHeaders ) {
386
+ $ cache_key = implode ('# ' , [$ audience , $ contentEncoding , crc32 (serialize ($ vapid ))]);
387
+ if (array_key_exists ($ cache_key , $ this ->vapidHeaders )) {
388
+ $ vapidHeaders = $ this ->vapidHeaders [$ cache_key ];
389
+ }
390
+ }
391
+
392
+ if (!$ vapidHeaders ) {
393
+ if (!$ contentEncoding ) {
394
+ throw new \ErrorException ('Subscription should have a content encoding ' );
395
+ }
396
+
397
+ $ vapidHeaders = VAPID ::getVapidHeaders ($ audience , $ vapid ['subject ' ], $ vapid ['publicKey ' ], $ vapid ['privateKey ' ], $ contentEncoding );
398
+ }
399
+
400
+ if ($ this ->reuseVAPIDHeaders ) {
401
+ $ this ->vapidHeaders [$ cache_key ] = $ vapidHeaders ;
402
+ }
403
+
404
+ return $ vapidHeaders ;
405
+ }
394
406
}
0 commit comments