diff --git a/src/App/Abstractions/Services/ISyncService.cs b/src/App/Abstractions/Services/ISyncService.cs index ffb56b40c..fb0fdfc26 100644 --- a/src/App/Abstractions/Services/ISyncService.cs +++ b/src/App/Abstractions/Services/ISyncService.cs @@ -6,7 +6,7 @@ namespace Bit.App.Abstractions public interface ISyncService { bool SyncInProgress { get; } - Task SyncAsync(string id); + Task SyncCipherAsync(string id); Task SyncDeleteFolderAsync(string id, DateTime revisionDate); Task SyncDeleteLoginAsync(string id); Task FullSyncAsync(bool forceSync = false); diff --git a/src/App/Enums/CipherType.cs b/src/App/Enums/CipherType.cs index b81804435..4cef54436 100644 --- a/src/App/Enums/CipherType.cs +++ b/src/App/Enums/CipherType.cs @@ -2,7 +2,8 @@ { public enum CipherType : short { - Folder = 0, + // Folder deprecated + //Folder = 0, Login = 1 } } diff --git a/src/App/Models/Api/Request/LoginRequest.cs b/src/App/Models/Api/Request/LoginRequest.cs index dd8825cda..13d7989fc 100644 --- a/src/App/Models/Api/Request/LoginRequest.cs +++ b/src/App/Models/Api/Request/LoginRequest.cs @@ -4,6 +4,7 @@ { public LoginRequest(Login login) { + OrganizationId = login.OrganizationId; FolderId = login.FolderId; Name = login.Name?.EncryptedString; Uri = login.Uri?.EncryptedString; @@ -13,6 +14,7 @@ Favorite = login.Favorite; } + public string OrganizationId { get; set; } public string FolderId { get; set; } public string Name { get; set; } public string Uri { get; set; } diff --git a/src/App/Models/Api/Response/CipherResponse.cs b/src/App/Models/Api/Response/CipherResponse.cs index 0e398346b..d198faa7e 100644 --- a/src/App/Models/Api/Response/CipherResponse.cs +++ b/src/App/Models/Api/Response/CipherResponse.cs @@ -8,6 +8,8 @@ namespace Bit.App.Models.Api { public string Id { get; set; } public string FolderId { get; set; } + public string UserId { get; set; } + public string OrganizationId { get; set; } public CipherType Type { get; set; } public bool Favorite { get; set; } public JObject Data { get; set; } diff --git a/src/App/Models/Api/Response/LoginResponse.cs b/src/App/Models/Api/Response/LoginResponse.cs index 0402d1f15..3ef616181 100644 --- a/src/App/Models/Api/Response/LoginResponse.cs +++ b/src/App/Models/Api/Response/LoginResponse.cs @@ -6,6 +6,8 @@ namespace Bit.App.Models.Api { public string Id { get; set; } public string FolderId { get; set; } + public string UserId { get; set; } + public string OrganizationId { get; set; } public string Name { get; set; } public string Uri { get; set; } public string Username { get; set; } @@ -13,8 +15,5 @@ namespace Bit.App.Models.Api public string Notes { get; set; } public bool Favorite { get; set; } public DateTime RevisionDate { get; set; } - - // Expandables - public FolderResponse Folder { get; set; } } } diff --git a/src/App/Models/Data/FolderData.cs b/src/App/Models/Data/FolderData.cs index eccc7d4a3..5d806769d 100644 --- a/src/App/Models/Data/FolderData.cs +++ b/src/App/Models/Data/FolderData.cs @@ -26,21 +26,6 @@ namespace Bit.App.Models.Data RevisionDateTime = folder.RevisionDate; } - public FolderData(CipherResponse cipher, string userId) - { - if(cipher.Type != Enums.CipherType.Folder) - { - throw new ArgumentException(nameof(cipher.Type)); - } - - var data = cipher.Data.ToObject(); - - Id = cipher.Id; - UserId = userId; - Name = data.Name; - RevisionDateTime = cipher.RevisionDate; - } - [PrimaryKey] public string Id { get; set; } [Indexed] diff --git a/src/App/Models/Data/LoginData.cs b/src/App/Models/Data/LoginData.cs index 7f8be6f6f..d4fcf324a 100644 --- a/src/App/Models/Data/LoginData.cs +++ b/src/App/Models/Data/LoginData.cs @@ -16,6 +16,7 @@ namespace Bit.App.Models.Data Id = login.Id; FolderId = login.FolderId; UserId = userId; + OrganizationId = login.OrganizationId; Name = login.Name?.EncryptedString; Uri = login.Uri?.EncryptedString; Username = login.Username?.EncryptedString; @@ -29,6 +30,7 @@ namespace Bit.App.Models.Data Id = login.Id; FolderId = login.FolderId; UserId = userId; + OrganizationId = login.OrganizationId; Name = login.Name; Uri = login.Uri; Username = login.Username; @@ -50,6 +52,7 @@ namespace Bit.App.Models.Data Id = cipher.Id; FolderId = cipher.FolderId; UserId = userId; + OrganizationId = cipher.OrganizationId; Name = data.Name; Uri = data.Uri; Username = data.Username; @@ -64,6 +67,7 @@ namespace Bit.App.Models.Data public string FolderId { get; set; } [Indexed] public string UserId { get; set; } + public string OrganizationId { get; set; } public string Name { get; set; } public string Uri { get; set; } public string Username { get; set; } diff --git a/src/App/Models/Login.cs b/src/App/Models/Login.cs index 355921e2e..6d381aa6e 100644 --- a/src/App/Models/Login.cs +++ b/src/App/Models/Login.cs @@ -11,6 +11,8 @@ namespace Bit.App.Models public Login(LoginData data) { Id = data.Id; + UserId = data.UserId; + OrganizationId = data.OrganizationId; FolderId = data.FolderId; Name = data.Name != null ? new CipherString(data.Name) : null; Uri = data.Uri != null ? new CipherString(data.Uri) : null; @@ -23,6 +25,8 @@ namespace Bit.App.Models public Login(LoginResponse response) { Id = response.Id; + UserId = response.UserId; + OrganizationId = response.OrganizationId; FolderId = response.FolderId; Name = response.Name != null ? new CipherString(response.Name) : null; Uri = response.Uri != null ? new CipherString(response.Uri) : null; @@ -32,6 +36,8 @@ namespace Bit.App.Models Favorite = response.Favorite; } + public string UserId { get; set; } + public string OrganizationId { get; set; } public string FolderId { get; set; } public CipherString Uri { get; set; } public CipherString Username { get; set; } diff --git a/src/App/Services/PushNotificationListener.cs b/src/App/Services/PushNotificationListener.cs index 71d83dc36..9d6c3112d 100644 --- a/src/App/Services/PushNotificationListener.cs +++ b/src/App/Services/PushNotificationListener.cs @@ -64,7 +64,7 @@ namespace Bit.App.Services { break; } - _syncService.SyncAsync(createUpdateMessage.Id); + _syncService.SyncCipherAsync(createUpdateMessage.Id); break; case Enums.PushType.SyncFolderDelete: var folderDeleteMessage = values.ToObject(); diff --git a/src/App/Services/SyncService.cs b/src/App/Services/SyncService.cs index 1f836d59a..db6fc3c69 100644 --- a/src/App/Services/SyncService.cs +++ b/src/App/Services/SyncService.cs @@ -50,7 +50,7 @@ namespace Bit.App.Services public bool SyncInProgress { get; private set; } - public async Task SyncAsync(string id) + public async Task SyncCipherAsync(string id) { if(!_authService.IsAuthenticated) { @@ -77,10 +77,6 @@ namespace Bit.App.Services { switch(cipher.Result.Type) { - case Enums.CipherType.Folder: - var folderData = new FolderData(cipher.Result, _authService.UserId); - await _folderRepository.UpsertAsync(folderData).ConfigureAwait(false); - break; case Enums.CipherType.Login: var loginData = new LoginData(cipher.Result, _authService.UserId); await _loginRepository.UpsertAsync(loginData).ConfigureAwait(false); @@ -172,6 +168,7 @@ namespace Bit.App.Services var now = DateTime.UtcNow; var ciphers = await _cipherApiRepository.GetAsync().ConfigureAwait(false); + var folders = await _folderApiRepository.GetAsync().ConfigureAwait(false); var domains = await _settingsApiRepository.GetDomains(false).ConfigureAwait(false); if(!ciphers.Succeeded || !domains.Succeeded) @@ -193,11 +190,11 @@ namespace Bit.App.Services return false; } - var logins = ciphers.Result.Data.Where(c => c.Type == Enums.CipherType.Login).ToDictionary(s => s.Id); - var folders = ciphers.Result.Data.Where(c => c.Type == Enums.CipherType.Folder).ToDictionary(f => f.Id); + var loginsDict = ciphers.Result.Data.Where(c => c.Type == Enums.CipherType.Login).ToDictionary(s => s.Id); + var foldersDict = folders.Result.Data.ToDictionary(f => f.Id); - var loginTask = SyncLoginsAsync(logins); - var folderTask = SyncFoldersAsync(folders); + var loginTask = SyncLoginsAsync(loginsDict); + var folderTask = SyncFoldersAsync(foldersDict); var domainsTask = SyncDomainsAsync(domains.Result); await Task.WhenAll(loginTask, folderTask, domainsTask).ConfigureAwait(false); @@ -236,7 +233,7 @@ namespace Bit.App.Services return false; } - private async Task SyncFoldersAsync(IDictionary serverFolders) + private async Task SyncFoldersAsync(IDictionary serverFolders) { if(!_authService.IsAuthenticated) {