11package pro.qyoga.i9ns.pushes.web
22
3- import nl.martijndwars.webpush.Encoding
4- import nl.martijndwars.webpush.Notification
5- import nl.martijndwars.webpush.PushService
3+ import nl.martijndwars.webpush.*
4+ import org.bouncycastle.jce.interfaces.ECPublicKey
65import org.bouncycastle.jce.provider.BouncyCastleProvider
76import org.slf4j.LoggerFactory
87import org.springframework.beans.factory.annotation.Value
98import org.springframework.stereotype.Component
109import pro.qyoga.i9ns.pushes.web.model.WebPush
1110import pro.qyoga.i9ns.pushes.web.model.WebPushSubscription
1211import java.security.Security
12+ import java.time.Duration
13+ import java.util.*
1314
1415
1516@Component
@@ -31,12 +32,7 @@ class WebPushServiceClient(
3132 )
3233
3334 fun sendPush (subscription : WebPushSubscription , push : WebPush ) {
34- val notification = Notification (
35- subscription.endpoint,
36- subscription.keys.p256dh,
37- subscription.keys.auth,
38- push.toPayloadJson()
39- )
35+ val notification = createNotification(subscription, push)
4036
4137 val resp = pushService.send(notification, Encoding .AES128GCM )
4238 if (resp.statusLine.statusCode != 201 ) {
@@ -50,6 +46,19 @@ class WebPushServiceClient(
5046
5147}
5248
49+ private fun createNotification (
50+ subscription : WebPushSubscription ,
51+ push : WebPush
52+ ): Notification = Notification (
53+ /* endpoint = */ subscription.endpoint,
54+ /* userPublicKey = */ Utils .loadPublicKey(subscription.keys.p256dh) as ECPublicKey ,
55+ /* userAuth = */ Base64 .getUrlDecoder().decode(subscription.keys.auth),
56+ /* payload = */ push.toPayloadJson().toByteArray(),
57+ /* ttl = */ Duration .ofDays(7 ).toSeconds().toInt(),
58+ /* urgency = */ Urgency .NORMAL ,
59+ /* topic = */ push.topic
60+ )
61+
5362private fun WebPush.toPayloadJson () =
5463 """
5564 {
0 commit comments