From 80273d02347a3ac35ba2566151b53e8a420e2d0a Mon Sep 17 00:00:00 2001 From: Corey Hulen Date: Thu, 23 Feb 2017 20:27:24 -0500 Subject: Adding ability to remove push ids when reported as removed from google or apple (#5513) * Adding ability to remove push device Ids when reported as removed from google or apple * Fixing log string * Removing unneeded nil check --- app/notification.go | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'app/notification.go') diff --git a/app/notification.go b/app/notification.go index e9e76de45..ae365b417 100644 --- a/app/notification.go +++ b/app/notification.go @@ -514,7 +514,7 @@ func sendPushNotification(post *model.Post, user *model.User, channel *model.Cha for _, session := range sessions { tmpMessage := *model.PushNotificationFromJson(strings.NewReader(msg.ToJson())) tmpMessage.SetDeviceIdAndPlatform(session.DeviceId) - go sendToPushProxy(tmpMessage) + go sendToPushProxy(tmpMessage, session) if einterfaces.GetMetricsInterface() != nil { einterfaces.GetMetricsInterface().IncrementPostSentPush() @@ -546,13 +546,13 @@ func ClearPushNotification(userId string, channelId string) *model.AppError { for _, session := range sessions { tmpMessage := *model.PushNotificationFromJson(strings.NewReader(msg.ToJson())) tmpMessage.SetDeviceIdAndPlatform(session.DeviceId) - go sendToPushProxy(tmpMessage) + go sendToPushProxy(tmpMessage, session) } return nil } -func sendToPushProxy(msg model.PushNotification) *model.AppError { +func sendToPushProxy(msg model.PushNotification, session *model.Session) *model.AppError { msg.ServerId = utils.CfgDiagnosticId tr := &http.Transport{ @@ -565,8 +565,17 @@ func sendToPushProxy(msg model.PushNotification) *model.AppError { if resp, err := httpClient.Do(request); err != nil { return model.NewLocAppError("sendToPushProxy", "api.post.send_notifications_and_forget.push_notification.error", map[string]interface{}{"DeviceId": msg.DeviceId, "Error": err.Error()}, "") } else { - ioutil.ReadAll(resp.Body) - resp.Body.Close() + m := model.MapFromJson(resp.Body) + if resp.Body != nil { + ioutil.ReadAll(resp.Body) + resp.Body.Close() + } + + if m[model.STATUS] == model.STATUS_REMOVE { + l4g.Info("Device was reported as removed for UserId=%v SessionId=%v removing push for this session", session.UserId, session.Id) + AttachDeviceId(session.Id, "", session.ExpiresAt) + ClearSessionCacheForUser(session.UserId) + } } return nil -- cgit v1.2.3-1-g7c22