55 lines
1.2 KiB
Go
55 lines
1.2 KiB
Go
package arn
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
|
|
webpush "github.com/akyoto/webpush-go"
|
|
)
|
|
|
|
// PushSubscription ...
|
|
type PushSubscription struct {
|
|
Platform string `json:"platform"`
|
|
UserAgent string `json:"userAgent"`
|
|
Screen struct {
|
|
Width int `json:"width"`
|
|
Height int `json:"height"`
|
|
} `json:"screen"`
|
|
Endpoint string `json:"endpoint" private:"true"`
|
|
P256DH string `json:"p256dh" private:"true"`
|
|
Auth string `json:"auth" private:"true"`
|
|
Created string `json:"created"`
|
|
LastSuccess string `json:"lastSuccess"`
|
|
}
|
|
|
|
// ID ...
|
|
func (sub *PushSubscription) ID() string {
|
|
return sub.Endpoint
|
|
}
|
|
|
|
// SendNotification ...
|
|
func (sub *PushSubscription) SendNotification(notification *PushNotification) (*http.Response, error) {
|
|
// Define endpoint and security tokens
|
|
s := webpush.Subscription{
|
|
Endpoint: sub.Endpoint,
|
|
Keys: webpush.Keys{
|
|
P256dh: sub.P256DH,
|
|
Auth: sub.Auth,
|
|
},
|
|
}
|
|
|
|
// Create notification
|
|
data, err := json.Marshal(notification)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Send Notification
|
|
return webpush.SendNotification(data, &s, &webpush.Options{
|
|
Subscriber: APIKeys.VAPID.Subject,
|
|
TTL: 60,
|
|
VAPIDPrivateKey: APIKeys.VAPID.PrivateKey,
|
|
})
|
|
}
|