1
0
mirror of https://github.com/bitwarden/mobile synced 2025-12-05 23:53:33 +00:00

Compare commits

...

9 Commits

Author SHA1 Message Date
Andre Rosado
1da62d8211 Fixed whitespace formatting 2023-08-04 11:34:21 +01:00
Bernd Schoolmann
c5f1df6e4c Fix if condition in SyncService
Co-authored-by: aj-rosado <109146700+aj-rosado@users.noreply.github.com>
2023-08-03 21:03:28 +02:00
Bernd Schoolmann
cd45992e6b Further simplify SyncService code 2023-08-03 19:43:08 +02:00
Bernd Schoolmann
ed75aa7942 Merge branch 'master' into feature/sync-on-send-changed 2023-08-03 17:23:38 +02:00
Bernd Schoolmann
743bf06b24 Simplify shouldUpdate logic in SyncUpsertSendAsync 2023-08-03 17:21:42 +02:00
Bernd Schoolmann
73f3ffceb2 Invert if to improve readability 2023-08-03 17:11:43 +02:00
Bernd Schoolmann
39881d2c7f Fix incorrect notification type in PushNotificationListenerService
Co-authored-by: aj-rosado <109146700+aj-rosado@users.noreply.github.com>
2023-08-03 16:49:13 +02:00
Bernd Schoolmann
fc79042212 Update send notifications to only sync sends 2023-07-09 08:27:02 +02:00
Bernd Schoolmann
dc6a0bbd33 Add sync on send create/update/delete notification 2023-07-09 07:49:55 +02:00
4 changed files with 87 additions and 0 deletions

View File

@@ -131,6 +131,24 @@ namespace Bit.App.Services
_messagingService.Value.Send("logout");
}
break;
case NotificationType.SyncSendCreate:
case NotificationType.SyncSendUpdate:
var sendCreateUpdateMessage = JsonConvert.DeserializeObject<SyncSendNotification>(
notification.Payload);
if (isAuthenticated && sendCreateUpdateMessage.UserId == myUserId)
{
await _syncService.Value.SyncUpsertSendAsync(sendCreateUpdateMessage,
notification.Type == NotificationType.SyncSendUpdate);
}
break;
case NotificationType.SyncSendDelete:
var sendDeleteMessage = JsonConvert.DeserializeObject<SyncSendNotification>(
notification.Payload);
if (isAuthenticated && sendDeleteMessage.UserId == myUserId)
{
await _syncService.Value.SyncDeleteSendAsync(sendDeleteMessage);
}
break;
case NotificationType.AuthRequest:
var passwordlessLoginMessage = JsonConvert.DeserializeObject<PasswordlessRequestNotification>(notification.Payload);

View File

@@ -12,8 +12,10 @@ namespace Bit.Core.Abstractions
Task SetLastSyncAsync(DateTime date);
Task<bool> SyncDeleteCipherAsync(SyncCipherNotification notification);
Task<bool> SyncDeleteFolderAsync(SyncFolderNotification notification);
Task<bool> SyncDeleteSendAsync(SyncSendNotification notification);
Task<bool> SyncUpsertCipherAsync(SyncCipherNotification notification, bool isEdit);
Task<bool> SyncUpsertFolderAsync(SyncFolderNotification notification, bool isEdit);
Task<bool> SyncUpsertSendAsync(SyncSendNotification notification, bool isEdit);
// Passwordless code will be moved to an independent service in future techdept
Task SyncPasswordlessLoginRequestsAsync();
}

View File

@@ -34,6 +34,13 @@ namespace Bit.Core.Models.Response
public DateTime Date { get; set; }
}
public class SyncSendNotification
{
public string Id { get; set; }
public string UserId { get; set; }
public DateTime RevisionDate { get; set; }
}
public class PasswordlessRequestNotification
{
public string UserId { get; set; }

View File

@@ -274,6 +274,66 @@ namespace Bit.Core.Services
return SyncCompleted(false);
}
public async Task<bool> SyncUpsertSendAsync(SyncSendNotification notification, bool isEdit)
{
SyncStarted();
if (!await _stateService.IsAuthenticatedAsync())
{
return SyncCompleted(false);
}
try
{
var localSend = await _sendService.GetAsync(notification.Id);
if ((localSend != null && localSend.RevisionDate >= notification.RevisionDate)
|| (isEdit && localSend == null) || (!isEdit && localSend != null))
{
return SyncCompleted(false);
}
var remoteSend = await _apiService.GetSendAsync(notification.Id);
if (remoteSend != null)
{
var userId = await _stateService.GetActiveUserIdAsync();
await _sendService.UpsertAsync(new SendData(remoteSend, userId));
_messagingService.Send("syncedUpsertedSend", new Dictionary<string, string>
{
["sendId"] = notification.Id
});
return SyncCompleted(true);
}
}
catch (ApiException e)
{
if (e.Error != null && e.Error.StatusCode == System.Net.HttpStatusCode.NotFound && isEdit)
{
await _sendService.DeleteAsync(notification.Id);
_messagingService.Send("syncedDeletedSend", new Dictionary<string, string>
{
["sendId"] = notification.Id
});
return SyncCompleted(true);
}
}
return SyncCompleted(false);
}
public async Task<bool> SyncDeleteSendAsync(SyncSendNotification notification)
{
SyncStarted();
if (await _stateService.IsAuthenticatedAsync())
{
await _sendService.DeleteAsync(notification.Id);
_messagingService.Send("syncedDeletedSend", new Dictionary<string, string>
{
["sendId"] = notification.Id
});
return SyncCompleted(true);
}
return SyncCompleted(false);
}
// Helpers
private void SyncStarted()