public override void ViewDidLoad ()
		{
			base.ViewDidLoad ();

			if (_introduction) {
				View.AddSubview(_home.GetIntroductionProgressView(1));

				RegistrationExplanation.Hidden = false;
				TopMenu.Hidden = true;

				BottomMenu.BackgroundColor = null;
				DarkBackground.BackgroundColor = null;

				ToevoegenButton.SetImage (UIImage.FromFile ("IcBottom-Opslaan-Wit.png"), UIControlState.Normal);
				ToevoegenButton.SetTitleColor (UIColor.White, UIControlState.Normal);
			}

			ActivityIndicator.Hidden = true;

			GeenSites.Hidden = true;

			CancelButton.TouchUpInside += async (o, e) => {
				this.View.RemoveFromSuperview();
			};
				
			ToevoegenButton.TouchUpInside += async(o, e) => {
				if (DataLayer.Instance.GetLocalBoxesSync ().Count > 0) {
					try {						
						var localBox = DataLayer.Instance.GetSelectedOrDefaultBox ();
						foreach (Site site in _tableSource.selectedItems) {
							LocalBox box = new LocalBox();
							box.BackColor = localBox.BackColor;
							box.BaseUrl = site.Url;
							box.DatumTijdTokenExpiratie = localBox.DatumTijdTokenExpiratie;
							box.LogoUrl = localBox.LogoUrl;
							box.Name = site.Name;
							box.OriginalServerCertificate = null;
							box.PassPhrase = null;
							box.PrivateKey = null;
							box.PublicKey = null;
							box.User = localBox.User;
							DataLayer.Instance.AddOrUpdateLocalBox(box);
						}

						_home.InitialiseMenu();
						this.View.RemoveFromSuperview();
					}catch (Exception ex){
						Insights.Report(ex);
					}
				}
			};
		}
        public Task <bool> ValidatePassPhrase(LocalBox localBox, string passPhrase)
        {
            return(Task.Run(() => {
                try {
                    var result = CryptoHelper.ValidatePassPhrase(localBox.PrivateKey, passPhrase);

                    localBox.PassPhrase = passPhrase;
                    DataLayer.Instance.AddOrUpdateLocalBox(localBox);

                    return result;
                } catch (Exception ex) {
                    Insights.Report(ex);
                    return false;
                }
            }));
        }
		public override View OnCreateView (LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle bundle)
		{
			Dialog.SetTitle("Sites toevoegen");

			View view = layoutInflater.Inflate (Resource.Layout.fragment_add_site, viewGroup, false);
			sitesAdapter = new SitesAdapter (Activity, sites);

			var siteListView = view.FindViewById<ListView> (Resource.Id.sitelist);
			siteListView.Adapter = sitesAdapter;
			siteListView.ChoiceMode = ChoiceMode.Multiple;

			Button buttonBack = view.FindViewById<Button> (Resource.Id.toevoegen);
			buttonBack.Click += delegate {

				var localBox = DataLayer.Instance.GetSelectedOrDefaultBox ();

				for (var i = 0; i < sites.Count; i++) {
					if (siteListView.CheckedItemPositions.Get(i)) {
						Site site = sites[i];

						LocalBox box = new LocalBox();
						box.BackColor = localBox.BackColor;
						box.BaseUrl = site.Url;
						box.DatumTijdTokenExpiratie = localBox.DatumTijdTokenExpiratie;
						box.LogoUrl = localBox.LogoUrl;
						box.Name = site.Name;
						box.OriginalServerCertificate = null;
						box.PassPhrase = null;
						box.PrivateKey = null;
						box.PublicKey = null;
						box.User = localBox.User;
						DataLayer.Instance.AddOrUpdateLocalBox(box);
					}
				}
					
				var activity = (HomeActivity) Activity;
				activity.ShowToast("Sites toegevoegd...");
				activity.menuFragment.UpdateLocalBoxes();
				activity.HideAddSitesDialog();
			};

			return view;
		}
        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. 5
0
        public int AddOrUpdateLocalBox(LocalBox box)
        {
            int a = -1;

            if ((from l in this.Table <LocalBox>()
                 where l.Id == box.Id
                 select l).Count() == 0)
            {
                Transaction(() =>
                {
                    Insert(box);
                    a = box.Id;
                });
            }
            else
            {
                Update(box);
                a = box.Id;
            }

            return(a);
        }
Esempio n. 6
0
        public int AddOrUpdateLocalBox(LocalBox box)
        {
			return database.AddOrUpdateLocalBox(box);
        }
Esempio n. 7
0
		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. 8
0
		public SslValidator (LocalBox localBox)
		{
			this.localBox = localBox;
			LoadRootCertificate (); 
		}
		public static bool RenewCertificateForLocalBox (LocalBox localBox)
		{
			//Temporarly accept all certificates to succeed
			ServicePointManager.ServerCertificateValidationCallback = (p1, p2, p3, p4) => true;

			//Current certificate
			var serverCertificateBytes = CertificateHelper.BytesOfServerCertificate;

			//Renewed Certificate
			GetCertificateFromUrl (localBox.BaseUrl);
			var newServerCertificateBytes = CertificateHelper.BytesOfServerCertificate;


			if (newServerCertificateBytes != null) {
			
				if (newServerCertificateBytes.SequenceEqual (serverCertificateBytes)) { //Compare byte arrays of certificates
					localBox.OriginalServerCertificate = newServerCertificateBytes;
					DataLayer.Instance.AddOrUpdateLocalBox (localBox);

					return true;
				} else {
					return false;
				}
			} else {
				return false;
			}
		}
Esempio n. 10
0
		private void ShowPassphraseForExistingKey(LocalBox localBox, Action onCompletion, bool repeat = false) {
			string message = string.Empty;
			if (repeat)
			{
				message = "Verkeerde passphrase opgegeven, probeer het opnieuw";
			}
			else
			{
				message = "Bij deze Pleiobox is al een sleutel aanwezig, geef de passphrase op van deze sleutel";
			}

			UIAlertView createPassPhrase = new UIAlertView("Passphrase", message, null, "Annuleer", "Ok");
			createPassPhrase.AlertViewStyle = UIAlertViewStyle.SecureTextInput;
			createPassPhrase.GetTextField(0).Placeholder = "Passphrase";

			createPassPhrase.Clicked += async (object s, UIButtonEventArgs args) => {
				if(args.ButtonIndex == 0) {
					DataLayer.Instance.DeleteLocalBox(localBox.Id);
					if(onCompletion != null) {
						onCompletion();
					}
				}else if(args.ButtonIndex == 1) {
					if(!await BusinessLayer.Instance.ValidatePassPhrase(localBox ,createPassPhrase.GetTextField(0).Text)) {
						ShowPassphraseForExistingKey(localBox, onCompletion, true);
					} else {
						if(onCompletion != null) {
							onCompletion();
						}
					}
				}
			};
			createPassPhrase.Show();
		}
Esempio n. 11
0
		private void CreateNewKeyPair(LocalBox localBox, Action onCompletion, bool repeat = false)
		{
			string message = repeat ? "De opgegeven passphrases komen niet overeen, probeer het nog eens" : "U moet een passphrase instellen voordat u deze Pleiobox kunt gebruiken";

			UIAlertView createPassPhrase = new UIAlertView("Passphrase", message, null, "Annuleer", "Ok");
			createPassPhrase.AlertViewStyle = UIAlertViewStyle.LoginAndPasswordInput;
			var firstField = createPassPhrase.GetTextField(0);
			var secondField = createPassPhrase.GetTextField(1);

			firstField.Placeholder = "Passphrase";
			secondField.Placeholder = "Bevestig Passphrase";

			firstField.AutocorrectionType = UITextAutocorrectionType.No;
			firstField.SecureTextEntry = true;


			createPassPhrase.ShouldEnableFirstOtherButton = (av)=> {
				return av.GetTextField(0).Text.Length > 0 && av.GetTextField(0).Text.Equals(av.GetTextField(1).Text);
			};

			createPassPhrase.Clicked += async (object s, UIButtonEventArgs args) => {


				if (args.ButtonIndex == 0) {
					DataLayer.Instance.DeleteLocalBox (localBox.Id);
					if (onCompletion != null) {
						onCompletion ();
					}
				} else if (args.ButtonIndex == 1) {
					if (firstField.Text.Equals (secondField.Text)) {
	
						DialogHelper.ShowBlockingProgressDialog ("Beveiliging", "Bezig met het creëren van sleutels. Dit kan enige tijd in beslag nemen.");
						bool result = await BusinessLayer.Instance.SetPublicAndPrivateKey (localBox, firstField.Text); 
						if (!result) {
							DataLayer.Instance.DeleteLocalBox (localBox.Id);
							DialogHelper.ShowErrorDialog ("Fout", string.Format ("Er is een fout opgetreden bij het toevoegen van de Pleiobox {0}. De Pleiobox is niet toegevoegd", localBox.Name));
						} 
						if (onCompletion != null) {
							onCompletion ();
						}
						DialogHelper.HideBlockingProgressDialog ();

					} else {
						CreateNewKeyPair (localBox, onCompletion, true);
					}
					DialogHelper.HideProgressDialog ();
				}
			};
			createPassPhrase.Show();
		}
Esempio n. 12
0
		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. 13
0
		public void ValidateKeyPresence(LocalBox localBox, Action onCompletion) {
			if (localBox.HasCryptoKeys)
			{
				if (!localBox.HasPassPhrase)
				{
					ShowPassphraseForExistingKey(localBox, onCompletion);
				}
			}
			else
			{
				CreateNewKeyPair(localBox, onCompletion);
			}
		}
Esempio n. 14
0
		//Register new LocalBox part 4
		public void EnterPassphrase (LocalBox localBox)
		{
			LayoutInflater factory = LayoutInflateHelper.GetLayoutInflater (homeActivity);
			View viewNewPhrase = factory.Inflate (Resource.Layout.dialog_enter_passphrase, null);
			EditText editEnterPassphrase = (EditText)viewNewPhrase.FindViewById<EditText> (Resource.Id.editText_dialog_enter_passphrase);          

			var dialogBuilder = new AlertDialog.Builder (homeActivity);
			dialogBuilder.SetTitle ("Passphrase");
			dialogBuilder.SetView (viewNewPhrase);
			dialogBuilder.SetPositiveButton ("OK", (EventHandler<DialogClickEventArgs>)null);
			dialogBuilder.SetNegativeButton (Resource.String.cancel, (EventHandler<DialogClickEventArgs>)null);
			var dialog = dialogBuilder.Create ();
			dialog.Show ();

			var buttonCancel = dialog.GetButton ((int)DialogButtonType.Negative);
			var buttonAddPassphrase = dialog.GetButton ((int)DialogButtonType.Positive);
			buttonAddPassphrase.Click += async (sender, args) => {
				string passphrase = editEnterPassphrase.Text;

				if (String.IsNullOrEmpty (passphrase)) {
					homeActivity.ShowToast("Passphrase is niet ingevuld");
				} 
				else {
					try {
						homeActivity.ShowProgressDialog ("Uw passphrase controleren. Een ogenblik geduld a.u.b.");
						bool correctPassphraseEntered = await BusinessLayer.Instance.ValidatePassPhrase (localBox, passphrase);
						homeActivity.HideProgressDialog();

						if (!correctPassphraseEntered) {
							homeActivity.ShowToast("Passphrase onjuist. Probeer het a.u.b. opnieuw");
						} else {
							dialog.Dismiss ();
							homeActivity.ShowToast("Passphrase geaccepteerd en Pleiobox succesvol geregistreerd");
							homeActivity.menuFragment.UpdateLocalBoxes ();
							SplashActivity.intentData = null;
						}
					} catch (Exception ex){
						Insights.Report(ex);
						homeActivity.HideProgressDialog ();
						homeActivity.ShowToast("Passphrase verifieren mislukt. Probeer het a.u.b. opnieuw");
					}
				}
			};
			buttonCancel.Click += (sender, args) => {
				DataLayer.Instance.DeleteLocalBox (localBox.Id);
				homeActivity.menuFragment.UpdateLocalBoxes ();
				dialog.Dismiss ();
			};
		}
Esempio n. 15
0
		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. 16
0
		//Register new LocalBox part 4
		public void SetUpPassphrase (LocalBox localBox)
		{
			LayoutInflater factory = LayoutInflateHelper.GetLayoutInflater (homeActivity);
			View viewNewPhrase = factory.Inflate (Resource.Layout.dialog_new_passphrase, null);

			EditText editNewPassphrase = (EditText)viewNewPhrase.FindViewById<EditText> (Resource.Id.editText_dialog_new_passphrase);          
			EditText editNewPassphraseVerify = (EditText)viewNewPhrase.FindViewById<EditText> (Resource.Id.editText_dialog_new_passphrase_verify);

			var dialogBuilder = new AlertDialog.Builder (homeActivity);
			dialogBuilder.SetTitle ("Passphrase");
			dialogBuilder.SetView (viewNewPhrase);
			dialogBuilder.SetPositiveButton ("OK", (EventHandler<DialogClickEventArgs>)null);
			dialogBuilder.SetNegativeButton (Resource.String.cancel, (EventHandler<DialogClickEventArgs>)null);
			var dialog = dialogBuilder.Create ();
			dialog.Show ();

			var buttonCancel = dialog.GetButton ((int)DialogButtonType.Negative);
			var buttonAddPassphrase = dialog.GetButton ((int)DialogButtonType.Positive);
			buttonAddPassphrase.Click += async (sender, args) => {
				string passphraseOne = editNewPassphrase.Text;
				string passphraseTwo = editNewPassphraseVerify.Text;

				if (String.IsNullOrEmpty (passphraseOne)) {
					homeActivity.ShowToast("Passphrase is niet ingevuld");
				} else if (String.IsNullOrEmpty (passphraseTwo)) {
					homeActivity.ShowToast("U dient uw ingevoerde passphrase te verifieren");
				} else {
					if (!passphraseOne.Equals (passphraseTwo)) {
						homeActivity.ShowToast("De ingevoerde passphrases komen niet overeen. Corrigeer dit a.u.b.");
					} else {
						try 
						{
							homeActivity.ShowProgressDialog ("Passphrase aanmaken. Dit kan enige tijd in beslag nemen. Een ogenblik geduld a.u.b.");
							bool newPassphraseSucceeded = await BusinessLayer.Instance.SetPublicAndPrivateKey (localBox, passphraseOne);
							homeActivity.HideProgressDialog();

							if (!newPassphraseSucceeded) {
								homeActivity.ShowToast("Passphrase instellen mislukt. Probeer het a.u.b. opnieuw");
							} 
							else {
								dialog.Dismiss ();
								homeActivity.ShowToast("LocalBox succesvol geregistreerd");

								homeActivity.menuFragment.UpdateLocalBoxes ();
								SplashActivity.intentData = null;
							}
						} 
						catch (Exception ex){
							Insights.Report(ex);
							homeActivity.HideProgressDialog ();
							homeActivity.ShowToast("Passphrase instellen mislukt. Probeer het a.u.b. opnieuw");
						}
					}
				}
			};
			buttonCancel.Click += (sender, args) => {
				DataLayer.Instance.DeleteLocalBox (localBox.Id);
				homeActivity.menuFragment.UpdateLocalBoxes ();
				dialog.Dismiss ();
			};
		}
Esempio n. 17
0
		//Register new LocalBox part 3
		public async void AddLocalBox(LocalBox lbToAdd)
		{
			bool result = false;

			homeActivity.ShowProgressDialog ("LocalBox laden...");

			result = await BusinessLayer.Instance.Authenticate (lbToAdd);

			homeActivity.HideProgressDialog ();
		}
Esempio n. 18
0
 public SslValidator(LocalBox localBox)
 {
     this.localBox = localBox;
     LoadRootCertificate();
 }
Esempio n. 19
0
 public int AddOrUpdateLocalBox(LocalBox box)
 {
     return(database.AddOrUpdateLocalBox(box));
 }
Esempio n. 20
0
		public Task<bool> ValidatePassPhrase (LocalBox localBox, string passPhrase)
		{
			return Task.Run (() => {
				try {
					var result = CryptoHelper.ValidatePassPhrase (localBox.PrivateKey, passPhrase);

					localBox.PassPhrase = passPhrase;
					DataLayer.Instance.AddOrUpdateLocalBox (localBox);

					return result;
				} catch (Exception ex){
					Insights.Report(ex);
					return false;
				}
			});
		}