[bugfix] Reduce Web Push record size (#3762)

This commit is contained in:
Vyr Cossont 2025-02-09 02:13:28 -08:00 committed by GitHub
parent 62f25ea08a
commit a6d1f5bf2c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -192,6 +192,11 @@ func (r *realSender) sendToSubscription(
// while waiting for the client to retrieve them. // while waiting for the client to retrieve them.
TTL = 48 * time.Hour TTL = 48 * time.Hour
// recordSize limits how big our notifications can be once padding is applied.
// To be polite to applications that need to relay them over services like APNS,
// which has a max message size of 4 kB, we set this comfortably smaller.
recordSize = 2048
// responseBodyMaxLen limits how much of the Web Push server response we read for error messages. // responseBodyMaxLen limits how much of the Web Push server response we read for error messages.
responseBodyMaxLen = 1024 responseBodyMaxLen = 1024
) )
@ -232,6 +237,7 @@ func (r *realSender) sendToSubscription(
}, },
&webpushgo.Options{ &webpushgo.Options{
HTTPClient: r.httpClient, HTTPClient: r.httpClient,
RecordSize: recordSize,
Subscriber: "https://" + config.GetHost(), Subscriber: "https://" + config.GetHost(),
VAPIDPublicKey: vapidKeyPair.Public, VAPIDPublicKey: vapidKeyPair.Public,
VAPIDPrivateKey: vapidKeyPair.Private, VAPIDPrivateKey: vapidKeyPair.Private,
@ -346,8 +352,9 @@ func formatNotificationTitle(
// or the beginning of the bio text of the related account. // or the beginning of the bio text of the related account.
func formatNotificationBody(apiNotification *apimodel.Notification) string { func formatNotificationBody(apiNotification *apimodel.Notification) string {
// bodyMaxLen is a polite maximum length for a Web Push notification's body text, in bytes. Note that this isn't // bodyMaxLen is a polite maximum length for a Web Push notification's body text, in bytes. Note that this isn't
// limited per se, but Web Push servers may reject anything with a total request body size over 4k. // limited per se, but Web Push servers may reject anything with a total request body size over 4k,
const bodyMaxLen = 3000 // and we set a lower max size above for compatibility with mobile push systems.
const bodyMaxLen = 1500
var body string var body string
if apiNotification.Status != nil { if apiNotification.Status != nil {