view ARClient/frmSettings.cs @ 0:90ea68d4f92f

First release
author Ivo Smits <Ivo@UCIS.nl>
date Sat, 08 Nov 2014 22:43:51 +0100
parents
children
line wrap: on
line source

???using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;

namespace ARClient {
	partial class frmSettings : Form {
		public Form1 MainForm { get; set; }
		Boolean Loading = false;
		public frmSettings() {
			InitializeComponent();
		}

		private void frmSettings_Load(object sender, EventArgs e) {
			Import();
		}
		private void Import() {
			Loading = true;
			txtPublicKey.Text = MainForm.PublicKey.ToString();
			txtSecretKey.Text = Functions.bin2hex(MainForm.SecretKey.SecretKey);
			txtDatabase.Text = MainForm.Database;
			lstSyncPeers.Items.Clear();
			foreach (String peer in MainForm.Peers) lstSyncPeers.Items.Add(peer);
			foreach (MARCKey peer in MainForm.BlockedKeys) lstFilterKey.Items.Add(peer);
			chkFilterTypeAnonetDom.Checked = 0 != (MainForm.FilterFlags & Form1.ResourceTypeFilter.AnonetDomain);
			chkFilterTypeAnonetIPv4.Checked = 0 != (MainForm.FilterFlags & Form1.ResourceTypeFilter.AnonetIPv4);
			chkFilterTypeAnonetIPv6.Checked = 0 != (MainForm.FilterFlags & Form1.ResourceTypeFilter.AnonetIPv6);
			chkFilterTypeASN.Checked = 0 != (MainForm.FilterFlags & Form1.ResourceTypeFilter.ASNumber);
			chkFilterTypeInvalid.Checked = 0 != (MainForm.FilterFlags & Form1.ResourceTypeFilter.Invalid);
			chkFilterTypeOther.Checked = 0 != (MainForm.FilterFlags & Form1.ResourceTypeFilter.Other);
			chkFilterTypeOtherDom.Checked = 0 != (MainForm.FilterFlags & Form1.ResourceTypeFilter.OtherDomain);
			chkFilterTypeOtherIPv4.Checked = 0 != (MainForm.FilterFlags & Form1.ResourceTypeFilter.OtherIPv4);
			chkFilterTypeOtherIPv6.Checked = 0 != (MainForm.FilterFlags & Form1.ResourceTypeFilter.OtherIPv6);
			chkFilterTypeKey.Checked = 0 != (MainForm.FilterFlags & Form1.ResourceTypeFilter.Key);
			Loading = false;
		}

		private void btnDatabaseReload_Click(object sender, EventArgs e) {
			MainForm.reloadDatabaseToolStripMenuItem_Click(sender, e);
			Import();
		}
		private void btnDatabaseSave_Click(object sender, EventArgs e) {
			MainForm.saveDatabaseToolStripMenuItem_Click(sender, e);
			Import();
		}
		private void btnDatabaseOpen_Click(object sender, EventArgs e) {
			MainForm.openDatabaseToolStripMenuItem_Click(sender, e);
			Import();
		}
		private void btnDatabaseSaveAs_Click(object sender, EventArgs e) {
			MainForm.saveDatabaseAsToolStripMenuItem_Click(sender, e);
			Import();
		}
		private void btnDatabaseCreate_Click(object sender, EventArgs e) {
			MainForm.newDatabaseToolStripMenuItem_Click(sender, e);
			Import();
		}

		private void btnPeerAdd_Click(object sender, EventArgs e) {
			frmTextInput input = new frmTextInput();
			input.Text = "MARC - Synchronization peer";
			input.Description = "Enter the HTTP address of the peer, including the protocol (http/https):";
			input.Value = "http://";
			if (input.ShowDialog(this) == DialogResult.Cancel) return;
			MainForm.Peers.Add(input.Value);
			lstSyncPeers.Items.Add(input.Value);
			MainForm.DatabaseSaved = false;
			MainForm.UpdatePeersList();
		}
		private void btnPeerDelete_Click(object sender, EventArgs e) {
			if (lstSyncPeers.SelectedItem == null) return;
			if (MainForm.Peers.Remove(lstSyncPeers.SelectedItem.ToString())) lstSyncPeers.Items.Remove(lstSyncPeers.SelectedItem);
			MainForm.DatabaseSaved = false;
			MainForm.UpdatePeersList();
		}
		private void btnPeerEdit_Click(object sender, EventArgs e) {
			if (lstSyncPeers.SelectedItem == null) return;
			frmTextInput input = new frmTextInput();
			input.Text = "MARC - Synchronization peer";
			input.Description = "Enter the HTTP address of the peer, including the protocol (http/https):";
			input.Value = lstSyncPeers.SelectedItem.ToString();
			if (input.ShowDialog(this) == DialogResult.Cancel) return;
			if (MainForm.Peers.Remove(lstSyncPeers.SelectedItem.ToString())) lstSyncPeers.Items.Remove(lstSyncPeers.SelectedItem);
			MainForm.Peers.Add(input.Value);
			lstSyncPeers.Items.Add(input.Value);
			MainForm.DatabaseSaved = false;
			MainForm.UpdatePeersList();
		}

		private void btnKeypairGenerate_Click(object sender, EventArgs e) {
			MainForm.GenerateKeyPair();
			Import();
		}

		private void btnFilterKeyDelete_Click(object sender, EventArgs e) {
			if (lstFilterKey.SelectedItem == null) return;
			if (MainForm.BlockedKeys.Remove((MARCKey)lstFilterKey.SelectedItem)) lstFilterKey.Items.Remove(lstFilterKey.SelectedItem);
			MainForm.DatabaseSaved = false;
		}

		private void chkFilterType_CheckedChanged(object sender, EventArgs e) {
			if (Loading) return;
			MainForm.FilterFlags =
				(chkFilterTypeAnonetDom.Checked ? Form1.ResourceTypeFilter.AnonetDomain : 0) |
				(chkFilterTypeAnonetIPv4.Checked ? Form1.ResourceTypeFilter.AnonetIPv4 : 0) |
				(chkFilterTypeAnonetIPv6.Checked ? Form1.ResourceTypeFilter.AnonetIPv6 : 0) |
				(chkFilterTypeASN.Checked ? Form1.ResourceTypeFilter.ASNumber : 0) |
				(chkFilterTypeInvalid.Checked ? Form1.ResourceTypeFilter.Invalid : 0) |
				(chkFilterTypeOther.Checked ? Form1.ResourceTypeFilter.Other : 0) |
				(chkFilterTypeOtherDom.Checked ? Form1.ResourceTypeFilter.OtherDomain : 0) |
				(chkFilterTypeOtherIPv4.Checked ? Form1.ResourceTypeFilter.OtherIPv4 : 0) |
				(chkFilterTypeOtherIPv6.Checked ? Form1.ResourceTypeFilter.OtherIPv6 : 0) |
				(chkFilterTypeKey.Checked ? Form1.ResourceTypeFilter.Key : 0) |
				0;
			MainForm.DatabaseSaved = false;
		}

		private void btnKeypairExport_Click(object sender, EventArgs e) {
			SaveFileDialog dialog = new SaveFileDialog();
			dialog.OverwritePrompt = true;
			dialog.Title = "MARC - Save key pair";
			dialog.AddExtension = true;
			dialog.CheckPathExists = true;
			dialog.DefaultExt = "mkp";
			dialog.DereferenceLinks = true;
			dialog.Filter = "Keypair files (*.mkp)|*.mkp|All files (*.*)|*.*";
			dialog.InitialDirectory = MainForm.Database == null ? Environment.CurrentDirectory : Path.GetDirectoryName(MainForm.Database);
			dialog.SupportMultiDottedExtensions = true;
			dialog.ValidateNames = true;
			if (dialog.ShowDialog(this) != DialogResult.OK) return;
			using (Stream stream = dialog.OpenFile()) {
				stream.SetLength(0);
				stream.Write(MainForm.SecretKey.ExpandedKey, 0, 64);
			}
		}

		private void btnKeypairImport_Click(object sender, EventArgs e) {
			OpenFileDialog dialog = new OpenFileDialog();
			dialog.CheckFileExists = true;
			dialog.Title = "MARC - Load key pair";
			dialog.AddExtension = true;
			dialog.CheckPathExists = true;
			dialog.DefaultExt = "mkp";
			dialog.DereferenceLinks = true;
			dialog.Filter = "Keypair files (*.mkp)|*.mkp|All files (*.*)|*.*";
			dialog.InitialDirectory = MainForm.Database == null ? Environment.CurrentDirectory : Path.GetDirectoryName(MainForm.Database);
			dialog.SupportMultiDottedExtensions = true;
			dialog.ValidateNames = true;
			if (dialog.ShowDialog(this) != DialogResult.OK) return;
			if (DialogResult.Yes != MessageBox.Show(this, "Importing a new key pair will erase your old key pair from the local database. If you lose your key you will no longer be able to update your resource claims. Please make sure that you either have a backup of your key, or have no claims! Do you want to continue?", "MARC - Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation)) {
				return;
			}
			if (DialogResult.Yes != MessageBox.Show(this, "Are you really sure you want to overwrite your key? There is no way back! Did you make a backup?", "MARC - Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation)) {
				return;
			}
			using (Stream stream = dialog.OpenFile()) {
				Byte[] sk = new Byte[32];
				if (stream.Read(sk, 0, sk.Length) != sk.Length) return;
				MainForm.SecretKey = new UCIS.NaCl.v2.ed25519keypair(sk);
				MainForm.PublicKey = new MARCKey(MainForm.SecretKey.PublicKey);
				MainForm.DatabaseSaved = false;
				Import();
			}
		}

		private void frmSettings_FormClosed(object sender, FormClosedEventArgs e) {
			MainForm.RefreshResourceList();
		}

		private void btnKeypairInput_Click(object sender, EventArgs e) {
			frmTextInput form = new frmTextInput();
			form.Text = "MARC - Key pair input";
			form.Description = "Input your new secret key:";
			form.Value = Functions.bin2hex(MainForm.SecretKey.SecretKey);
			if (form.ShowDialog(this) != DialogResult.OK) return;
			Byte[] sk = Functions.hex2bin(form.Value);
			if (sk.Length != 32 && sk.Length != 64) return;
			if (DialogResult.Yes != MessageBox.Show(this, "Importing a new key pair will erase your old key pair from the local database. If you lose your key you will no longer be able to update your resource claims. Please make sure that you either have a backup of your key, or have no claims! Do you want to continue?", "MARC - Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation)) {
				return;
			}
			if (DialogResult.Yes != MessageBox.Show(this, "Are you really sure you want to overwrite your key? There is no way back! Did you make a backup?", "MARC - Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation)) {
				return;
			}
			MainForm.SecretKey = new UCIS.NaCl.v2.ed25519keypair(sk);
			MainForm.PublicKey = new MARCKey(MainForm.SecretKey.PublicKey);
			MainForm.DatabaseSaved = false;
			Import();
		}

		private void btnFilterDeleteAllFiltered_Click(object sender, EventArgs e) {
			List<MARCUpdate> ToDelete = new List<MARCUpdate>();
			foreach (MARCUpdate update in MainForm.Resources.Values) {
				if (MainForm.IsResourceFiltered(update)) ToDelete.Add(update);
			}
			if (ToDelete.Count == 0) return;
			if (DialogResult.Yes != MessageBox.Show(this, "Are you really sure you want to delete " + ToDelete.Count.ToString() + " filtred resources?", "MARC - Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation)) {
				return;
			}
			MainForm.lstResources.BeginUpdate();
			MainForm.lstResources.Sorted = false;
			foreach (MARCUpdate item in ToDelete) {
				MainForm.Resources.Remove(item.Label);
				MainForm.ResourceHasChanged(null, item);
			}
			MainForm.lstResources.Sorted = true;
			MainForm.lstResources.EndUpdate();
			MainForm.DatabaseSaved = false;
		}
	}
}