Fix MM 56723 (#26643)
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
30d450c4d8
Коммит
0d9b6b0ec8
@@ -14,6 +14,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
"github.com/golang-jwt/jwt/v5"
|
||||||
"github.com/mattermost/mattermost/server/public/plugin"
|
"github.com/mattermost/mattermost/server/public/plugin"
|
||||||
|
|
||||||
"github.com/mattermost/mattermost/server/public/model"
|
"github.com/mattermost/mattermost/server/public/model"
|
||||||
@@ -25,6 +26,12 @@ import (
|
|||||||
|
|
||||||
type notificationType string
|
type notificationType string
|
||||||
|
|
||||||
|
type pushJWTClaims struct {
|
||||||
|
AckId string `json:"ack_id"`
|
||||||
|
DeviceId string `json:"device_id"`
|
||||||
|
jwt.RegisteredClaims
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
notificationTypeClear notificationType = "clear"
|
notificationTypeClear notificationType = "clear"
|
||||||
notificationTypeMessage notificationType = "message"
|
notificationTypeMessage notificationType = "message"
|
||||||
@@ -108,17 +115,17 @@ func (a *App) sendPushNotificationToAllSessions(rctx request.CTX, msg *model.Pus
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
sessions, err := a.getMobileAppSessions(userID)
|
sessions, appErr := a.getMobileAppSessions(userID)
|
||||||
if err != nil {
|
if appErr != nil {
|
||||||
a.CountNotificationReason(model.NotificationStatusError, model.NotificationTypePush, model.NotificationReasonFetchError)
|
a.CountNotificationReason(model.NotificationStatusError, model.NotificationTypePush, model.NotificationReasonFetchError)
|
||||||
a.NotificationsLog().Error("Failed to send mobile app sessions",
|
a.NotificationsLog().Error("Failed to send mobile app sessions",
|
||||||
mlog.String("type", model.NotificationTypePush),
|
mlog.String("type", model.NotificationTypePush),
|
||||||
mlog.String("status", model.NotificationStatusError),
|
mlog.String("status", model.NotificationStatusError),
|
||||||
mlog.String("reason", model.NotificationReasonFetchError),
|
mlog.String("reason", model.NotificationReasonFetchError),
|
||||||
mlog.String("user_id", userID),
|
mlog.String("user_id", userID),
|
||||||
mlog.Err(err),
|
mlog.Err(appErr),
|
||||||
)
|
)
|
||||||
return err
|
return appErr
|
||||||
}
|
}
|
||||||
|
|
||||||
if msg == nil {
|
if msg == nil {
|
||||||
@@ -156,8 +163,26 @@ func (a *App) sendPushNotificationToAllSessions(rctx request.CTX, msg *model.Pus
|
|||||||
tmpMessage := msg.DeepCopy()
|
tmpMessage := msg.DeepCopy()
|
||||||
tmpMessage.SetDeviceIdAndPlatform(session.DeviceId)
|
tmpMessage.SetDeviceIdAndPlatform(session.DeviceId)
|
||||||
tmpMessage.AckId = model.NewId()
|
tmpMessage.AckId = model.NewId()
|
||||||
|
signature, err := jwt.NewWithClaims(jwt.SigningMethodES256, pushJWTClaims{
|
||||||
|
AckId: tmpMessage.AckId,
|
||||||
|
DeviceId: tmpMessage.DeviceId,
|
||||||
|
}).SignedString(a.AsymmetricSigningKey())
|
||||||
|
|
||||||
err := a.sendToPushProxy(tmpMessage, session)
|
if err != nil {
|
||||||
|
a.NotificationsLog().Error("Notification error",
|
||||||
|
mlog.String("ackId", tmpMessage.AckId),
|
||||||
|
mlog.String("type", tmpMessage.Type),
|
||||||
|
mlog.String("userId", session.UserId),
|
||||||
|
mlog.String("postId", tmpMessage.PostId),
|
||||||
|
mlog.String("channelId", tmpMessage.ChannelId),
|
||||||
|
mlog.String("deviceId", tmpMessage.DeviceId),
|
||||||
|
mlog.String("status", err.Error()),
|
||||||
|
)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
tmpMessage.Signature = signature
|
||||||
|
|
||||||
|
err = a.sendToPushProxy(tmpMessage, session)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
a.CountNotificationReason(model.NotificationStatusError, model.NotificationTypePush, model.NotificationReasonPushProxySendError)
|
a.CountNotificationReason(model.NotificationStatusError, model.NotificationTypePush, model.NotificationReasonPushProxySendError)
|
||||||
a.NotificationsLog().Error("Failed to send to push proxy",
|
a.NotificationsLog().Error("Failed to send to push proxy",
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ type PushNotification struct {
|
|||||||
IsIdLoaded bool `json:"is_id_loaded"`
|
IsIdLoaded bool `json:"is_id_loaded"`
|
||||||
PostType string `json:"-"`
|
PostType string `json:"-"`
|
||||||
ChannelType ChannelType `json:"-"`
|
ChannelType ChannelType `json:"-"`
|
||||||
|
Signature string `json:"signature"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pn *PushNotification) DeepCopy() *PushNotification {
|
func (pn *PushNotification) DeepCopy() *PushNotification {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user