sync folders & added org id for ciphers/logins

This commit is contained in:
Kyle Spearrin 2017-04-20 10:47:14 -04:00
parent 458de2d2e0
commit 490d1775a2
10 changed files with 27 additions and 31 deletions

View file

@ -6,7 +6,7 @@ namespace Bit.App.Abstractions
public interface ISyncService public interface ISyncService
{ {
bool SyncInProgress { get; } bool SyncInProgress { get; }
Task<bool> SyncAsync(string id); Task<bool> SyncCipherAsync(string id);
Task<bool> SyncDeleteFolderAsync(string id, DateTime revisionDate); Task<bool> SyncDeleteFolderAsync(string id, DateTime revisionDate);
Task<bool> SyncDeleteLoginAsync(string id); Task<bool> SyncDeleteLoginAsync(string id);
Task<bool> FullSyncAsync(bool forceSync = false); Task<bool> FullSyncAsync(bool forceSync = false);

View file

@ -2,7 +2,8 @@
{ {
public enum CipherType : short public enum CipherType : short
{ {
Folder = 0, // Folder deprecated
//Folder = 0,
Login = 1 Login = 1
} }
} }

View file

@ -4,6 +4,7 @@
{ {
public LoginRequest(Login login) public LoginRequest(Login login)
{ {
OrganizationId = login.OrganizationId;
FolderId = login.FolderId; FolderId = login.FolderId;
Name = login.Name?.EncryptedString; Name = login.Name?.EncryptedString;
Uri = login.Uri?.EncryptedString; Uri = login.Uri?.EncryptedString;
@ -13,6 +14,7 @@
Favorite = login.Favorite; Favorite = login.Favorite;
} }
public string OrganizationId { get; set; }
public string FolderId { get; set; } public string FolderId { get; set; }
public string Name { get; set; } public string Name { get; set; }
public string Uri { get; set; } public string Uri { get; set; }

View file

@ -8,6 +8,8 @@ namespace Bit.App.Models.Api
{ {
public string Id { get; set; } public string Id { get; set; }
public string FolderId { get; set; } public string FolderId { get; set; }
public string UserId { get; set; }
public string OrganizationId { get; set; }
public CipherType Type { get; set; } public CipherType Type { get; set; }
public bool Favorite { get; set; } public bool Favorite { get; set; }
public JObject Data { get; set; } public JObject Data { get; set; }

View file

@ -6,6 +6,8 @@ namespace Bit.App.Models.Api
{ {
public string Id { get; set; } public string Id { get; set; }
public string FolderId { get; set; } public string FolderId { get; set; }
public string UserId { get; set; }
public string OrganizationId { get; set; }
public string Name { get; set; } public string Name { get; set; }
public string Uri { get; set; } public string Uri { get; set; }
public string Username { get; set; } public string Username { get; set; }
@ -13,8 +15,5 @@ namespace Bit.App.Models.Api
public string Notes { get; set; } public string Notes { get; set; }
public bool Favorite { get; set; } public bool Favorite { get; set; }
public DateTime RevisionDate { get; set; } public DateTime RevisionDate { get; set; }
// Expandables
public FolderResponse Folder { get; set; }
} }
} }

View file

@ -26,21 +26,6 @@ namespace Bit.App.Models.Data
RevisionDateTime = folder.RevisionDate; 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<LoginDataModel>();
Id = cipher.Id;
UserId = userId;
Name = data.Name;
RevisionDateTime = cipher.RevisionDate;
}
[PrimaryKey] [PrimaryKey]
public string Id { get; set; } public string Id { get; set; }
[Indexed] [Indexed]

View file

@ -16,6 +16,7 @@ namespace Bit.App.Models.Data
Id = login.Id; Id = login.Id;
FolderId = login.FolderId; FolderId = login.FolderId;
UserId = userId; UserId = userId;
OrganizationId = login.OrganizationId;
Name = login.Name?.EncryptedString; Name = login.Name?.EncryptedString;
Uri = login.Uri?.EncryptedString; Uri = login.Uri?.EncryptedString;
Username = login.Username?.EncryptedString; Username = login.Username?.EncryptedString;
@ -29,6 +30,7 @@ namespace Bit.App.Models.Data
Id = login.Id; Id = login.Id;
FolderId = login.FolderId; FolderId = login.FolderId;
UserId = userId; UserId = userId;
OrganizationId = login.OrganizationId;
Name = login.Name; Name = login.Name;
Uri = login.Uri; Uri = login.Uri;
Username = login.Username; Username = login.Username;
@ -50,6 +52,7 @@ namespace Bit.App.Models.Data
Id = cipher.Id; Id = cipher.Id;
FolderId = cipher.FolderId; FolderId = cipher.FolderId;
UserId = userId; UserId = userId;
OrganizationId = cipher.OrganizationId;
Name = data.Name; Name = data.Name;
Uri = data.Uri; Uri = data.Uri;
Username = data.Username; Username = data.Username;
@ -64,6 +67,7 @@ namespace Bit.App.Models.Data
public string FolderId { get; set; } public string FolderId { get; set; }
[Indexed] [Indexed]
public string UserId { get; set; } public string UserId { get; set; }
public string OrganizationId { get; set; }
public string Name { get; set; } public string Name { get; set; }
public string Uri { get; set; } public string Uri { get; set; }
public string Username { get; set; } public string Username { get; set; }

View file

@ -11,6 +11,8 @@ namespace Bit.App.Models
public Login(LoginData data) public Login(LoginData data)
{ {
Id = data.Id; Id = data.Id;
UserId = data.UserId;
OrganizationId = data.OrganizationId;
FolderId = data.FolderId; FolderId = data.FolderId;
Name = data.Name != null ? new CipherString(data.Name) : null; Name = data.Name != null ? new CipherString(data.Name) : null;
Uri = data.Uri != null ? new CipherString(data.Uri) : null; Uri = data.Uri != null ? new CipherString(data.Uri) : null;
@ -23,6 +25,8 @@ namespace Bit.App.Models
public Login(LoginResponse response) public Login(LoginResponse response)
{ {
Id = response.Id; Id = response.Id;
UserId = response.UserId;
OrganizationId = response.OrganizationId;
FolderId = response.FolderId; FolderId = response.FolderId;
Name = response.Name != null ? new CipherString(response.Name) : null; Name = response.Name != null ? new CipherString(response.Name) : null;
Uri = response.Uri != null ? new CipherString(response.Uri) : null; Uri = response.Uri != null ? new CipherString(response.Uri) : null;
@ -32,6 +36,8 @@ namespace Bit.App.Models
Favorite = response.Favorite; Favorite = response.Favorite;
} }
public string UserId { get; set; }
public string OrganizationId { get; set; }
public string FolderId { get; set; } public string FolderId { get; set; }
public CipherString Uri { get; set; } public CipherString Uri { get; set; }
public CipherString Username { get; set; } public CipherString Username { get; set; }

View file

@ -64,7 +64,7 @@ namespace Bit.App.Services
{ {
break; break;
} }
_syncService.SyncAsync(createUpdateMessage.Id); _syncService.SyncCipherAsync(createUpdateMessage.Id);
break; break;
case Enums.PushType.SyncFolderDelete: case Enums.PushType.SyncFolderDelete:
var folderDeleteMessage = values.ToObject<SyncCipherPushNotification>(); var folderDeleteMessage = values.ToObject<SyncCipherPushNotification>();

View file

@ -50,7 +50,7 @@ namespace Bit.App.Services
public bool SyncInProgress { get; private set; } public bool SyncInProgress { get; private set; }
public async Task<bool> SyncAsync(string id) public async Task<bool> SyncCipherAsync(string id)
{ {
if(!_authService.IsAuthenticated) if(!_authService.IsAuthenticated)
{ {
@ -77,10 +77,6 @@ namespace Bit.App.Services
{ {
switch(cipher.Result.Type) 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: case Enums.CipherType.Login:
var loginData = new LoginData(cipher.Result, _authService.UserId); var loginData = new LoginData(cipher.Result, _authService.UserId);
await _loginRepository.UpsertAsync(loginData).ConfigureAwait(false); await _loginRepository.UpsertAsync(loginData).ConfigureAwait(false);
@ -172,6 +168,7 @@ namespace Bit.App.Services
var now = DateTime.UtcNow; var now = DateTime.UtcNow;
var ciphers = await _cipherApiRepository.GetAsync().ConfigureAwait(false); var ciphers = await _cipherApiRepository.GetAsync().ConfigureAwait(false);
var folders = await _folderApiRepository.GetAsync().ConfigureAwait(false);
var domains = await _settingsApiRepository.GetDomains(false).ConfigureAwait(false); var domains = await _settingsApiRepository.GetDomains(false).ConfigureAwait(false);
if(!ciphers.Succeeded || !domains.Succeeded) if(!ciphers.Succeeded || !domains.Succeeded)
@ -193,11 +190,11 @@ namespace Bit.App.Services
return false; return false;
} }
var logins = ciphers.Result.Data.Where(c => c.Type == Enums.CipherType.Login).ToDictionary(s => s.Id); var loginsDict = 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 foldersDict = folders.Result.Data.ToDictionary(f => f.Id);
var loginTask = SyncLoginsAsync(logins); var loginTask = SyncLoginsAsync(loginsDict);
var folderTask = SyncFoldersAsync(folders); var folderTask = SyncFoldersAsync(foldersDict);
var domainsTask = SyncDomainsAsync(domains.Result); var domainsTask = SyncDomainsAsync(domains.Result);
await Task.WhenAll(loginTask, folderTask, domainsTask).ConfigureAwait(false); await Task.WhenAll(loginTask, folderTask, domainsTask).ConfigureAwait(false);
@ -236,7 +233,7 @@ namespace Bit.App.Services
return false; return false;
} }
private async Task SyncFoldersAsync(IDictionary<string, CipherResponse> serverFolders) private async Task SyncFoldersAsync(IDictionary<string, FolderResponse> serverFolders)
{ {
if(!_authService.IsAuthenticated) if(!_authService.IsAuthenticated)
{ {