notify.moe/arn/PushSubscription.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,
})
}