diff --git a/src/App/Models/Api/Response/CipherResponse.cs b/src/App/Models/Api/Response/CipherResponse.cs index d22e481e1..0e398346b 100644 --- a/src/App/Models/Api/Response/CipherResponse.cs +++ b/src/App/Models/Api/Response/CipherResponse.cs @@ -1,5 +1,6 @@ using Bit.App.Enums; using System; +using Newtonsoft.Json.Linq; namespace Bit.App.Models.Api { @@ -9,7 +10,7 @@ namespace Bit.App.Models.Api public string FolderId { get; set; } public CipherType Type { get; set; } public bool Favorite { get; set; } - public dynamic Data { get; set; } + public JObject Data { get; set; } public DateTime RevisionDate { get; set; } } } diff --git a/src/App/Models/Data/FolderData.cs b/src/App/Models/Data/FolderData.cs index 9eaf06b10..ebb354837 100644 --- a/src/App/Models/Data/FolderData.cs +++ b/src/App/Models/Data/FolderData.cs @@ -32,11 +32,7 @@ namespace Bit.App.Models.Data throw new ArgumentException(nameof(cipher.Type)); } - var data = cipher.Data as FolderDataModel; - if(data == null) - { - throw new ArgumentException(nameof(cipher.Data)); - } + var data = cipher.Data.ToObject(); Id = cipher.Id; UserId = userId; diff --git a/src/App/Models/Data/SiteData.cs b/src/App/Models/Data/SiteData.cs index 48620f7db..bc4c2f8dc 100644 --- a/src/App/Models/Data/SiteData.cs +++ b/src/App/Models/Data/SiteData.cs @@ -2,6 +2,7 @@ using SQLite; using Bit.App.Abstractions; using Bit.App.Models.Api; +using Newtonsoft.Json.Linq; namespace Bit.App.Models.Data { @@ -44,11 +45,7 @@ namespace Bit.App.Models.Data throw new ArgumentException(nameof(cipher.Type)); } - var data = cipher.Data as SiteDataModel; - if(data == null) - { - throw new ArgumentException(nameof(cipher.Data)); - } + var data = cipher.Data.ToObject(); Id = cipher.Id; UserId = userId; diff --git a/src/App/Models/Page/VaultListPageModel.cs b/src/App/Models/Page/VaultListPageModel.cs index 3576aaed8..4d3fd73d8 100644 --- a/src/App/Models/Page/VaultListPageModel.cs +++ b/src/App/Models/Page/VaultListPageModel.cs @@ -15,7 +15,7 @@ namespace Bit.App.Models.Page Id = site.Id; FolderId = folderId; Name = site.Name?.Decrypt(); - Username = site.Username?.Decrypt(); + Username = site.Username?.Decrypt() ?? " "; Password = site.Password?.Decrypt(); Uri = site.Uri?.Decrypt(); } diff --git a/src/App/Models/PushNotification.cs b/src/App/Models/PushNotification.cs index 2fe72e27e..129e45432 100644 --- a/src/App/Models/PushNotification.cs +++ b/src/App/Models/PushNotification.cs @@ -1,4 +1,5 @@ -using Bit.App.Enums; +using System; +using Bit.App.Enums; namespace Bit.App.Models { @@ -7,13 +8,19 @@ namespace Bit.App.Models public PushType Type { get; set; } } - public class SyncPushNotification : PushNotification + public abstract class SyncPushNotification : PushNotification { public string UserId { get; set; } } public class SyncCipherPushNotification : SyncPushNotification { - public string CipherId { get; set; } + public string Id { get; set; } + public DateTime RevisionDate { get; set; } + } + + public class SyncCiphersPushNotification : SyncPushNotification + { + public DateTime Date { get; set; } } } diff --git a/src/App/Pages/SettingsPage.cs b/src/App/Pages/SettingsPage.cs index 05f1d784d..621401016 100644 --- a/src/App/Pages/SettingsPage.cs +++ b/src/App/Pages/SettingsPage.cs @@ -7,6 +7,7 @@ using Bit.App.Controls; using Acr.UserDialogs; using Plugin.Settings.Abstractions; using Plugin.Fingerprint.Abstractions; +using PushNotification.Plugin.Abstractions; namespace Bit.App.Pages { @@ -16,6 +17,7 @@ namespace Bit.App.Pages private readonly IUserDialogs _userDialogs; private readonly ISettings _settings; private readonly IFingerprint _fingerprint; + private readonly IPushNotification _pushNotification; // TODO: Model binding context? @@ -25,6 +27,7 @@ namespace Bit.App.Pages _userDialogs = Resolver.Resolve(); _settings = Resolver.Resolve(); _fingerprint = Resolver.Resolve(); + _pushNotification = Resolver.Resolve(); Init(); } @@ -174,6 +177,7 @@ namespace Bit.App.Pages } _authService.LogOut(); + _pushNotification.Unregister(); Application.Current.MainPage = new HomePage(); } diff --git a/src/App/Services/PushNotificationListener.cs b/src/App/Services/PushNotificationListener.cs index 79d7d6173..940fdd11b 100644 --- a/src/App/Services/PushNotificationListener.cs +++ b/src/App/Services/PushNotificationListener.cs @@ -39,17 +39,18 @@ namespace Bit.App.Services case Enums.PushType.SyncCipherUpdate: case Enums.PushType.SyncCipherCreate: var createUpdateMessage = values.ToObject(); - _syncService.SyncAsync(createUpdateMessage.CipherId); + _syncService.SyncAsync(createUpdateMessage.Id); break; case Enums.PushType.SyncFolderDelete: var folderDeleteMessage = values.ToObject(); - _syncService.SyncDeleteFolderAsync(folderDeleteMessage.CipherId); + _syncService.SyncDeleteFolderAsync(folderDeleteMessage.Id); break; case Enums.PushType.SyncSiteDelete: var siteDeleteMessage = values.ToObject(); - _syncService.SyncDeleteFolderAsync(siteDeleteMessage.CipherId); + _syncService.SyncDeleteSiteAsync(siteDeleteMessage.Id); break; case Enums.PushType.SyncCiphers: + var cipherMessage = values.ToObject(); _syncService.FullSyncAsync(); break; default: diff --git a/src/App/Services/SyncService.cs b/src/App/Services/SyncService.cs index e254dac60..61106acf2 100644 --- a/src/App/Services/SyncService.cs +++ b/src/App/Services/SyncService.cs @@ -125,7 +125,7 @@ namespace Bit.App.Services var folderTask = SyncFoldersAsync(ciphers.Result.Data.Where(c => c.Type == Enums.CipherType.Folder), true); await Task.WhenAll(siteTask, folderTask); - if(folderTask.Exception == null || siteTask.Exception == null) + if(folderTask.Exception != null || siteTask.Exception != null) { return false; } @@ -164,7 +164,7 @@ namespace Bit.App.Services await Task.WhenAll(siteTask, folderTask); - if(folderTask.Exception == null || siteTask.Exception == null) + if(folderTask.Exception != null || siteTask.Exception != null) { return false; }