private void RegisterButton_Click(object sender, RoutedEventArgs e)
        {
            RegisterButton.IsEnabled = false;
            RegisterButton.Content   = "Contacting server...";
            var errs = ValidateRegister();

            if (errs != "")
            {
                MessageBox.Show(errs);
                RegisterButton.IsEnabled = true;
                RegisterButton.Content   = "Register";
                return;
            }

            var names  = RegisterName.Text.Split(' ');
            var myUser = new User()
            {
                Email    = RegisterEmail.Text,
                Password = RegisterPassword.Password,
                Name     = names?[0],
                Surname  = names.Length >= 2 ? names?[1] : null,
                Company  = RegisterCompany.Text,
            };

            string  rawPingReply = "";
            dynamic parsedReply  = null;

            using (var client = new WebClient())
            {
                try
                {
                    rawPingReply = client.DownloadString(ServerAddress.ToString());
                    parsedReply  = JsonConvert.DeserializeObject(rawPingReply);
                }
                catch { MessageBox.Show("Failed to contact " + ServerAddress.ToString()); RegisterButton.IsEnabled = true; RegisterButton.Content = "Register"; return; }
            }

            var spkClient = new SpeckleApiClient()
            {
                BaseUrl = ServerAddress.ToString()
            };

            try
            {
                var response = spkClient.UserRegisterAsync(myUser).Result;
                if (response.Success == false)
                {
                    MessageBox.Show("Failed to register user. " + response.Message); RegisterButton.IsEnabled = true; RegisterButton.Content = "Register"; return;
                }

                var serverName = parsedReply.serverName;
                var isDefault  = accounts.Any() ? false : true;
                var newaccount = new Account {
                    Email = myUser.Email, RestApi = ServerAddress.ToString(), ServerName = (string)serverName, Token = response.Resource.Apitoken, IsDefault = isDefault
                };
                LocalContext.AddAccount(newaccount);

                MessageBox.Show("Account creation ok: You're good to go.");
                restApi  = RegisterServerUrl.Text;
                apitoken = response.Resource.Apitoken;
                RegisterButton.IsEnabled = true;
                RegisterButton.Content   = "Register";

                AccoutsTabControl.SelectedIndex = 0;
                LoadAccounts();
                int index = accounts.Select((v, i) => new { acc = v, index = i }).First(x => x.acc.RestApi == RegisterServerUrl.Text && x.acc.Email == RegisterEmail.Text).index;
                AccountListBox.SelectedIndex = index;
                RegisterServerUrl.Text       = RegisterEmail.Text = RegisterName.Text = RegisterCompany.Text = RegisterPassword.Password = RegisterPasswordConfirm.Password = "";
            }
            catch (Exception err)
            {
                MessageBox.Show("Failed to register user. " + err.InnerException.ToString()); RegisterButton.IsEnabled = true; RegisterButton.Content = "Register"; return;
            }
        }
        private void RegisterButton_Click(object sender, RoutedEventArgs e)
        {
            RegisterButton.IsEnabled = false;
            RegisterButton.Content   = "Contacting server...";
            var errs = ValidateRegister();

            if (errs != "")
            {
                MessageBox.Show(errs);
                RegisterButton.IsEnabled = true;
                RegisterButton.Content   = "Register";
                return;
            }

            var names  = this.RegisterName.Text.Split(' ');
            var myUser = new User()
            {
                Email    = this.RegisterEmail.Text,
                Password = this.RegisterPassword.Password,
                Name     = names?[0],
                Surname  = names.Length >= 2 ? names?[1] : null,
                Company  = this.RegisterCompany.Text,
            };

            string  rawPingReply = "";
            dynamic parsedReply  = null;

            using (var client = new WebClient())
            {
                try
                {
                    rawPingReply = client.DownloadString(ServerAddress.ToString());
                    parsedReply  = JsonConvert.DeserializeObject(rawPingReply);
                }
                catch { MessageBox.Show("Failed to contact " + ServerAddress.ToString()); RegisterButton.IsEnabled = true; RegisterButton.Content = "Register"; return; }
            }

            var spkClient = new SpeckleApiClient()
            {
                BaseUrl = ServerAddress.ToString()
            };

            try
            {
                var response = spkClient.UserRegisterAsync(myUser).Result;
                if (response.Success == false)
                {
                    MessageBox.Show("Failed to register user. " + response.Message); RegisterButton.IsEnabled = true; RegisterButton.Content = "Register"; return;
                }

                var serverName = parsedReply.serverName;

                saveAccountToDisk(this.RegisterEmail.Text, response.Resource.Apitoken, (string)serverName, this.RegisterServerUrl.Text, this.RegisterServerUrl.Text);

                MessageBox.Show("Account creation ok: You're good to go.");
                this.restApi             = this.RegisterServerUrl.Text;
                this.apitoken            = response.Resource.Apitoken;
                RegisterButton.IsEnabled = true;
                RegisterButton.Content   = "Register";
                this.Close();
            }
            catch (Exception err)
            {
                MessageBox.Show("Failed to register user. " + err.InnerException.ToString()); RegisterButton.IsEnabled = true; RegisterButton.Content = "Register";  return;
            }
        }