public Task <bool> SetPublicAndPrivateKey(LocalBox localBox, string passPhrase)
        {
            return(Task.Run(() => {
                try {
                    byte[] publicKey;
                    byte[] privateKey;
                    CryptoHelper.GenerateKeyPair(localBox.User, passPhrase, out publicKey, out privateKey);
                    var explorer = new RemoteExplorer(localBox);

                    var result = explorer.UpdateUser(new UserPost()
                    {
                        PublicKey = Convert.ToBase64String(publicKey),
                        PrivateKey = Convert.ToBase64String(privateKey)
                    });
                    if (result)
                    {
                        localBox.PublicKey = publicKey;
                        localBox.PrivateKey = privateKey;
                        localBox.PassPhrase = passPhrase;
                        DataLayer.Instance.AddOrUpdateLocalBox(localBox);
                    }
                    return result;
                } catch (Exception ex) {
                    Insights.Report(ex);
                    return false;
                }
            }));
        }
Esempio n. 2
0
        public async override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            var remoteExplorer = new RemoteExplorer();

            try {
                var remoteSites = await remoteExplorer.GetSites();

                foreach (LocalBox box in DataLayer.Instance.GetLocalBoxesSync())
                {
                    for (int i = 0; i < remoteSites.Count; i++)
                    {
                        if (box.BaseUrl == remoteSites[i].Url)
                        {
                            remoteSites.RemoveAt(i);
                            break;
                        }
                    }
                }

                foreach (Site site in remoteSites)
                {
                    sites.Add(site);
                }

                sitesAdapter.NotifyDataSetChanged();
            } catch (Exception ex) {
                Insights.Report(ex);
            }
        }
        public Task <bool> UpdateSettingsSharedFolder(Share share, List <Identity> usersToShareWith)
        {
            return(Task.Run(() => {
                LocalBox box = DataLayer.Instance.GetSelectedOrDefaultBox();
                var explorer = new RemoteExplorer(box);

                List <Identity> inBoth = (from local in share.Identities
                                          join remote in usersToShareWith
                                          on local.Id equals remote.Id
                                          select local).ToList();

                var toAdd = usersToShareWith.Where(e => inBoth.All(f => f.Id != e.Id)).ToList();
                var toRemove = share.Identities.Where(e => inBoth.All(f => f.Id != e.Id)).ToList();

                var messages = AddKeys(share.Item.Path, usersToShareWith, toAdd);
                RemoveKeys(share.Item.Path, toRemove);


                var result = explorer.UpdateSettingsSharedFolder(share.Id, usersToShareWith);

                foreach (var message in messages)
                {
                    var r = explorer.AddAesKey(share.Item.Path, message);
                }

                return result;
            }));
        }
Esempio n. 4
0
        public Task <bool> UploadFile(string destination, string file)
        {
            return(Task.Run(() => {
                try {
                    var remoteExplorer = new RemoteExplorer();

                    if (destination.Count(e => e == '/') > 1)
                    {
                        int index = destination.IndexOf('/', destination.IndexOf('/') + 1);
                        var rootFolder = destination.Substring(0, index);
                        var folder = GetFolder(rootFolder).Result;

                        if (folder.HasCryptoKeys)
                        {
                            Rijndael rijndael = Rijndael.Create();
                            rijndael.Key = folder.Key;
                            rijndael.IV = folder.IV;

                            using (var stream = new CryptoStream(File.OpenRead(file), rijndael.CreateEncryptor(), CryptoStreamMode.Read)) {
                                return remoteExplorer.UploadFile(destination, stream);
                            }
                        }
                    }

                    using (var stream = File.OpenRead(file)) {
                        return remoteExplorer.UploadFile(destination, stream);
                    }
                } catch (Exception ex) {
                    Insights.Report(ex);
                    return false;
                }
            }));
        }
        public Task <bool> Authenticate(LocalBox localBox)
        {
            return(Task.Run(() => {
                //bool result = false;

                try {
                    var explorer = new RemoteExplorer(localBox);
                    //result = explorer.Authorize (password);

                    //if (result) {
                    DataLayer.Instance.AddOrUpdateLocalBox(localBox);
                    SetKeys(localBox);
                    //} else {
                    //Login failure so delete local box
                    //	DataLayer.Instance.DeleteLocalBox (localBox.Id);
                    //}

                    return true;
                } catch (Exception ex) {
                    Insights.Report(ex);
                    DataLayer.Instance.DeleteLocalBox(localBox.Id);
                    return false;
                }
            }));
        }
Esempio n. 6
0
        public Task <PublicUrl> CreatePublicFileShare(string filePath, DateTime expirationDateOfShare)
        {
            return(Task.Run(() => {
                var remoteExplorer = new RemoteExplorer();

                return remoteExplorer.CreatePublicFileShare(filePath, expirationDateOfShare);
            }));
        }
Esempio n. 7
0
 public Task <bool> DeleteFileOrFolder(string fileOrFolderPath)
 {
     return(Task.Run(() => {
         var remoteExplorer = new RemoteExplorer();
         DeleteLocalFileOrFolder(fileOrFolderPath);
         return remoteExplorer.DeleteFile(fileOrFolderPath);
     }));
 }
Esempio n. 8
0
 public Task <List <Identity> > GetLocalboxUsers()
 {
     return(Task.Run(() => {
         var currentBox = GetSelectedOrDefaultBox();
         var remoteExplorer = new RemoteExplorer();
         var users = remoteExplorer.GetLocalBoxUsers().Result.Where(e => e.Username != currentBox.User).ToList();
         return users;
     }));
 }
        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);
        }
Esempio n. 10
0
        public Task <Share> GetShareSettings(string pathOfShare)
        {
            try{
                LocalBox box      = DataLayer.Instance.GetSelectedOrDefaultBox();
                var      explorer = new RemoteExplorer(box);

                return(explorer.GetShareSettings(pathOfShare));
            }
            catch (Exception ex) {
                Insights.Report(ex);
                return(null);
            }
        }
Esempio n. 11
0
        private void RemoveKeys(string path, List <Identity> toRemove)
        {
            LocalBox box      = DataLayer.Instance.GetSelectedOrDefaultBox();
            var      explorer = new RemoteExplorer(box);

            foreach (var identity in toRemove)
            {
                explorer.RevokeAesKey(path, new AesKeyRevoke()
                {
                    Username = identity.Username
                });
            }
        }
Esempio n. 12
0
        public Task <bool> ShareFolder(string path, List <Identity> users)
        {
            return(Task.Run(() => {
                LocalBox box = DataLayer.Instance.GetSelectedOrDefaultBox();
                var explorer = new RemoteExplorer(box);

                var messages = AddKeys(path, users, users.Select(e => e).ToList());
                foreach (var message in messages)
                {
                    var r = explorer.AddAesKey(path, message);
                }
                return explorer.ShareFolder(path, users);
            }));
        }
        public override async void ViewDidAppear(bool didAppear)
        {
            ActivityIndicator.Hidden = false;
            ActivityIndicator.StartAnimating();

            // Perform any additional setup after loading the view, typically from a nib.
            if (DataLayer.Instance.GetLocalBoxesSync().Count > 0)
            {
                var remoteExplorer = new RemoteExplorer();

                try {
                    List <Site> sites = await remoteExplorer.GetSites();

                    foreach (LocalBox box in DataLayer.Instance.GetLocalBoxesSync())
                    {
                        for (int i = 0; i < sites.Count; i++)
                        {
                            if (box.BaseUrl == sites [i].Url)
                            {
                                sites.RemoveAt(i);
                                break;
                            }
                        }
                    }

                    ActivityIndicator.StopAnimating();
                    ActivityIndicator.Hidden = true;

                    _tableSource     = new TableSource(sites);
                    TableView.Source = _tableSource;
                    TableView.ReloadData();

                    if (sites.Count == 0)
                    {
                        GeenSites.Hidden = false;

                        if (_introduction)
                        {
                            ToevoegenButton.SetTitle("Verder", UIControlState.Normal);
                        }
                    }
                } catch (Exception ex) {
                    Insights.Report(ex);
                    DialogHelper.ShowErrorDialog("Fout", "Er is een fout opgetreden tijdens het ophalen van de sites.");
                }
            }
        }
Esempio n. 14
0
        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;
            }));
        }
Esempio n. 15
0
        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);
            }
        }
Esempio n. 16
0
        private void RefreshFolder(string path)
        {
            var explorer = new RemoteExplorer();

            //Get all pending share inventations and accept them
            List <ShareInventation> foundInventations = explorer.GetPendingShareInventations();

            foreach (ShareInventation foundShareInventation in foundInventations)               //Accept all inventations
            {
                explorer.AcceptShareInventation(foundShareInventation.Id);
            }

            var localData  = database.GetTree(path);
            var remoteData = MapDataGroupToTreeNode(explorer.GetFiles(localData.Path), localData.Id, localData.LocalBoxId);

            List <string> inBoth = (from local in localData.Children
                                    join remote in remoteData
                                    on local.Path equals remote.Path
                                    select local.Path).ToList();

            List <TreeNode> updateNodes = (from local in localData.Children
                                           join remote in remoteData
                                           on local.Path equals remote.Path
                                           select new TreeNode {
                Id = local.Id, Name = remote.Name, Type = local.Type,
                ParentId = local.ParentId, Path = local.Path, IsDirectory = remote.IsDirectory, HasKeys = remote.HasKeys,
                IsFavorite = local.IsFavorite, IsShare = remote.IsShare, IsShared = remote.IsShared, IsWritable = remote.IsWritable, LocalBoxId = local.LocalBoxId, IV = local.IV, Key = local.Key, CheckedForKeys = local.CheckedForKeys
            }).ToList();

            var toAdd    = remoteData.Where(e => !inBoth.Contains(e.Path)).ToList();
            var toRemove = localData.Children.Where(e => !inBoth.Contains(e.Path)).ToList();

            updateNodes.ForEach(e => database.Update(e));
            toAdd.ForEach(e => database.AddNode(e));
            toRemove.ForEach(e => {
                DeleteLocalFileOrFolder(e);
                database.RemoveNode(e);
            });
        }
Esempio n. 17
0
        private void UpdateFolderKey(TreeNode node)
        {
            // alleen keys ophalen als het nog niet eerder is gedaan en het op een map op het rootniveau is.
            if (!node.CheckedForKeys && node.Path.Count(e => e == '/') == 1 && node.Path.Length > 1)
            {
                var            explorer = new RemoteExplorer();
                AesKeyResponse response;

                if (explorer.GetAesKey(node.Path, out response))
                {
                    if (response != null && response.IV != null && response.Key != null)
                    {
                        var encryptedIV  = Convert.FromBase64String(response.IV);
                        var encryptedKey = Convert.FromBase64String(response.Key);
                        var box          = GetSelectedOrDefaultBox();
                        node.Key = CryptoHelper.DecryptPgp(encryptedKey, box.PrivateKey, box.PassPhrase);
                        node.IV  = CryptoHelper.DecryptPgp(encryptedIV, box.PrivateKey, box.PassPhrase);
                    }

                    node.CheckedForKeys = true;
                    database.Update(node);
                }
            }
        }
Esempio n. 18
0
        public Task <bool> CreateFolder(string path, bool encrypt = true)
        {
            return(Task.Run(() =>
            {
                var explorer = new RemoteExplorer();
                var result = explorer.CreateFolder(path);

                // kijken of het een map op rootniveau is
                if (encrypt && path.Count(e => e == '/') == 1)
                {
                    AESKeyAndIVGenerator gen = new AESKeyAndIVGenerator();
                    var box = GetSelectedOrDefaultBox();
                    var post = new AesKeyPost()
                    {
                        User = null,
                        Key = Convert.ToBase64String(CryptoHelper.EncryptPgp(gen.aesKey, box.PublicKey)),
                        IV = Convert.ToBase64String(CryptoHelper.EncryptPgp(gen.aesIV, box.PublicKey))
                    };

                    var keyResult = explorer.AddAesKey(path, post);
                }
                return result;
            }));
        }
Esempio n. 19
0
        public string GetFilePathSync(string path)
        {
            var documentsPath = DocumentConstants.DocumentsPath;
            var pathToFile    = Path.Combine(documentsPath, "" + Waardes.Instance.GeselecteerdeBox, path.Substring(1, path.Length - 1));

            EmptyDecryptedFolder();


            if (!File.Exists(pathToFile))            //Does not exist
            {
                var explorer  = new RemoteExplorer();
                var fileBytes = explorer.GetFile(path);

                if (fileBytes == null)
                {
                    return(null);
                }

                if (!Directory.Exists(pathToFile.Substring(0, pathToFile.LastIndexOf("/"))))
                {
                    Directory.CreateDirectory(pathToFile.Substring(0, pathToFile.LastIndexOf("/")));
                }

                if (pathToFile != null)
                {
                    File.WriteAllBytes(pathToFile, fileBytes);
                }
            }



            // moeten buiten de root zitten
            if (path.Count(e => e == '/') > 1)
            {
                int index      = path.IndexOf('/', path.IndexOf('/') + 1);
                var rootFolder = path.Substring(0, index);
                var folder     = GetFolder(rootFolder).Result;

                if (folder.HasCryptoKeys)
                {
                    try{
                        Rijndael rijndael = Rijndael.Create();
                        rijndael.Key = folder.Key;
                        rijndael.IV  = folder.IV;

                        var decpath = Path.Combine(documentsPath, "decrypted", path.Substring(1, path.Length - 1));
                        if (!Directory.Exists(decpath.Substring(0, decpath.LastIndexOf("/"))))
                        {
                            Directory.CreateDirectory(decpath.Substring(0, decpath.LastIndexOf("/")));
                        }

                        using (var stream = new CryptoStream(File.OpenRead(pathToFile), rijndael.CreateDecryptor(), CryptoStreamMode.Read))
                            using (var fs = File.OpenWrite(decpath))
                            {
                                stream.CopyTo(fs);
                            }
                        return(decpath);
                    }catch (Exception ex) {
                        Insights.Report(ex);
                        return(pathToFile);
                    }
                }
            }

            return(pathToFile);
        }