private void SetKeys (LocalBox localBox) { var explorer = new RemoteExplorer (localBox); var user = explorer.GetUser (); if (user != null && !(string.IsNullOrEmpty (user.PrivateKey) || string.IsNullOrEmpty (user.PublicKey))) { localBox.PrivateKey = Convert.FromBase64String (user.PrivateKey); localBox.PublicKey = Convert.FromBase64String (user.PublicKey); } DataLayer.Instance.AddOrUpdateLocalBox (localBox); }
private List<AesKeyPost> AddKeys (string path, List<Identity> usersToShareWith, List<Identity> toAdd) { List<AesKeyPost> result = new List<AesKeyPost> (); try { LocalBox box = DataLayer.Instance.GetSelectedOrDefaultBox (); var explorer = new RemoteExplorer (box); var node = DataLayer.Instance.GetFolder (path).Result; if (node.HasCryptoKeys) { foreach (var identity in toAdd) { var user = explorer.GetUser (identity.Username); if (!string.IsNullOrEmpty (user.PublicKey)) { byte[] pkey = Convert.FromBase64String (user.PublicKey); result.Add (new AesKeyPost () { User = identity.Username, Key = Convert.ToBase64String (CryptoHelper.EncryptPgp (node.Key, pkey)), IV = Convert.ToBase64String (CryptoHelper.EncryptPgp (node.IV, pkey)) }); } else { var u = identity; usersToShareWith.RemoveAll (e => e.Id.Equals (u.Id)); } } } return result; } catch (Exception ex){ Insights.Report(ex); return result; } }
public Task<TreeNode> GetFolder(string path, bool refresh = false) { return Task.Run(() => { if (refresh) { RefreshFolder(path); } var result = database.GetTree(path); if (result != null && result.Children.Count == 0) { RefreshFolder(path); result = database.GetTree(path); UpdateFolderKey(result); } else // root is null { if(result == null && (path.Equals("/") || path.Equals(""))) { int boxId = Waardes.Instance.GeselecteerdeBox; var node = new TreeNode(){ Name = "Root", Path = "/", ParentId = 0, IsDirectory = true, LocalBoxId = boxId }; database.AddNode(node); //Create unencrypted public folder in empty root directory var explorer = new RemoteExplorer(); string nameOfUser = explorer.GetUser().Name; CreateFolder("/Publiek - " + nameOfUser, false); RefreshFolder(node.Path); result = database.GetTree(path); } } return result; }); }