diff --git a/src/App/Models/PushNotification.cs b/src/App/Models/PushNotification.cs index e81221dd2..903c25905 100644 --- a/src/App/Models/PushNotification.cs +++ b/src/App/Models/PushNotification.cs @@ -1,14 +1,20 @@ using System; using Bit.App.Enums; +using Newtonsoft.Json.Linq; namespace Bit.App.Models { - public class PushNotification + public class PushNotificationData { public PushType Type { get; set; } } - public class SyncCipherPushNotification : PushNotification + public class PushNotificationDataPayload : PushNotificationData + { + public string Payload { get; set; } + } + + public class SyncCipherPushNotification { public string Id { get; set; } public string UserId { get; set; } @@ -16,14 +22,14 @@ namespace Bit.App.Models public DateTime RevisionDate { get; set; } } - public class SyncFolderPushNotification : PushNotification + public class SyncFolderPushNotification { public string Id { get; set; } public string UserId { get; set; } public DateTime RevisionDate { get; set; } } - public class SyncUserPushNotification : PushNotification + public class SyncUserPushNotification { public string UserId { get; set; } public DateTime Date { get; set; } diff --git a/src/App/Services/PushNotificationListener.cs b/src/App/Services/PushNotificationListener.cs index 503916476..ba075efcf 100644 --- a/src/App/Services/PushNotificationListener.cs +++ b/src/App/Services/PushNotificationListener.cs @@ -33,33 +33,38 @@ namespace Bit.App.Services _settings = settings; } - public void OnMessage(JObject values, DeviceType deviceType) + public void OnMessage(JObject value, DeviceType deviceType) { - if(values == null) + if(value == null) { return; } _showNotification = false; - Debug.WriteLine("Message Arrived: {0}", JsonConvert.SerializeObject(values)); + Debug.WriteLine("Message Arrived: {0}", JsonConvert.SerializeObject(value)); if(!_authService.IsAuthenticated) { return; } - JToken token; - if(!values.TryGetValue("type", StringComparison.OrdinalIgnoreCase, out token) || token == null) + JToken dataToken; + if(!value.TryGetValue("data", StringComparison.OrdinalIgnoreCase, out dataToken) || dataToken == null) { return; } - var type = (Enums.PushType)token.ToObject(); - switch(type) + var data = dataToken.ToObject(); + if(data?.Payload == null) + { + return; + } + + switch(data.Type) { case Enums.PushType.SyncCipherUpdate: case Enums.PushType.SyncCipherCreate: - var cipherCreateUpdateMessage = values.ToObject(); + var cipherCreateUpdateMessage = JsonConvert.DeserializeObject(data.Payload); if(cipherCreateUpdateMessage.OrganizationId == null && cipherCreateUpdateMessage.UserId != _authService.UserId) { @@ -74,7 +79,7 @@ namespace Bit.App.Services break; case Enums.PushType.SyncFolderUpdate: case Enums.PushType.SyncFolderCreate: - var folderCreateUpdateMessage = values.ToObject(); + var folderCreateUpdateMessage = JsonConvert.DeserializeObject(data.Payload); if(folderCreateUpdateMessage.UserId != _authService.UserId) { break; @@ -82,7 +87,7 @@ namespace Bit.App.Services _syncService.SyncFolderAsync(folderCreateUpdateMessage.Id); break; case Enums.PushType.SyncFolderDelete: - var folderDeleteMessage = values.ToObject(); + var folderDeleteMessage = JsonConvert.DeserializeObject(data.Payload); if(folderDeleteMessage.UserId != _authService.UserId) { break; @@ -90,7 +95,7 @@ namespace Bit.App.Services _syncService.SyncDeleteFolderAsync(folderDeleteMessage.Id, folderDeleteMessage.RevisionDate); break; case Enums.PushType.SyncLoginDelete: - var loginDeleteMessage = values.ToObject(); + var loginDeleteMessage = JsonConvert.DeserializeObject(data.Payload); if(loginDeleteMessage.OrganizationId == null && loginDeleteMessage.UserId != _authService.UserId) { @@ -105,7 +110,7 @@ namespace Bit.App.Services break; case Enums.PushType.SyncCiphers: case Enums.PushType.SyncVault: - var cipherMessage = values.ToObject(); + var cipherMessage = JsonConvert.DeserializeObject(data.Payload); if(cipherMessage.UserId != _authService.UserId) { break; @@ -113,7 +118,7 @@ namespace Bit.App.Services _syncService.FullSyncAsync(true); break; case Enums.PushType.SyncSettings: - var domainMessage = values.ToObject(); + var domainMessage = JsonConvert.DeserializeObject(data.Payload); if(domainMessage.UserId != _authService.UserId) { break; @@ -121,7 +126,7 @@ namespace Bit.App.Services _syncService.SyncSettingsAsync(); break; case Enums.PushType.SyncOrgKeys: - var orgKeysMessage = values.ToObject(); + var orgKeysMessage = JsonConvert.DeserializeObject(data.Payload); if(orgKeysMessage.UserId != _authService.UserId) { break;