diff --git a/src/Core/Models/EncryptedData.cs b/src/Core/Models/EncryptedData.cs index 41a1d5f4..d1b79ebc 100644 --- a/src/Core/Models/EncryptedData.cs +++ b/src/Core/Models/EncryptedData.cs @@ -29,12 +29,12 @@ namespace Bit.Core.Models public byte[] Decrypt() { - return ProtectedData.Unprotect(Value, IV, DataProtectionScope.CurrentUser); + return ProtectedData.Unprotect(Value, IV, DataProtectionScope.LocalMachine); } public string DecryptToString() { - var bytes = ProtectedData.Unprotect(Value, IV, DataProtectionScope.CurrentUser); + var bytes = ProtectedData.Unprotect(Value, IV, DataProtectionScope.LocalMachine); return Encoding.UTF8.GetString(bytes); } diff --git a/src/Core/Utilities/Sync.cs b/src/Core/Utilities/Sync.cs index 279d3e12..8b0d3816 100644 --- a/src/Core/Utilities/Sync.cs +++ b/src/Core/Utilities/Sync.cs @@ -11,6 +11,9 @@ namespace Bit.Core.Utilities { public static async Task SyncAllAsync(bool force = false, bool sendToServer = true) { + var startingGroupDelta = SettingsService.Instance.GroupDeltaToken; + var startingUserDelta = SettingsService.Instance.UserDeltaToken; + try { var now = DateTime.UtcNow; @@ -20,8 +23,9 @@ namespace Bit.Core.Utilities FlattenUsersToGroups(groups, null, groups, users); - if(!sendToServer) + if(!sendToServer || (groups.Count == 0 && users.Count == 0)) { + RestoreDeltas(startingGroupDelta, startingUserDelta); return new SyncResult { Success = true, @@ -53,6 +57,7 @@ namespace Bit.Core.Utilities } else { + RestoreDeltas(startingGroupDelta, startingUserDelta); return new SyncResult { Success = false, @@ -60,14 +65,20 @@ namespace Bit.Core.Utilities }; } } - catch (ApplicationException e) + catch(ApplicationException e) { + RestoreDeltas(startingGroupDelta, startingUserDelta); return new SyncResult { Success = false, ErrorMessage = e.Message }; } + catch + { + RestoreDeltas(startingGroupDelta, startingUserDelta); + throw; + } } private static IDirectoryService GetDirectoryService() @@ -114,5 +125,11 @@ namespace Bit.Core.Utilities FlattenUsersToGroups(groupsInThisGroup, usersInThisGroup, allGroups, allUsers); } } + + private static void RestoreDeltas(string groupDelta, string userDelta) + { + SettingsService.Instance.GroupDeltaToken = groupDelta; + SettingsService.Instance.UserDeltaToken = userDelta; + } } }