public bool ExecuteNetworkDeviceCommand(DeviceViewModel deviceViewModel, string commandText, bool unattended = false) { NetworkDevices.NetworkDevice networkDevice = GetNetworkDeviceByPath(deviceViewModel.Path); string username = networkDevice.Username; string password = networkDevice.Password; string devicePath = deviceViewModel.Path; string deviceName = devicePath; if (!String.IsNullOrEmpty(deviceViewModel.FriendlyName)) deviceName = deviceViewModel.FriendlyName; bool success = false; bool stop = false; bool prompt = String.IsNullOrEmpty(username) || String.IsNullOrEmpty(password); if (unattended && prompt) return false; while (!success && !stop) { if (prompt) { CredentialsEventArgs ea = new CredentialsEventArgs { ProtectedResource = deviceName, Username = username, Password = password }; if (CredentialsRequested != null) CredentialsRequested(this, ea); if (ea.CredentialsProvided) { username = ea.Username; password = ea.Password; } else { stop = true; } } if (!stop) { Uri uri = new Uri("http://" + devicePath); using (SshClient client = new SshClient(uri.Host, username, password)) { try { client.Connect(); } catch (Exception ex) { if (ex is SshAuthenticationException) prompt = true; else if ((ex is SocketException) || (ex is SshOperationTimeoutException)) { stop = true; PostNotification(String.Format("{0}: {1}", deviceName, ex.Message), NotificationKind.Danger); } else throw; } if (client.IsConnected) { try { stop = true; success = ExecuteSshCommand(deviceName, client, commandText); } finally { client.Disconnect(); } } } } } if (success) { networkDevice.Username = username; networkDevice.Password = password; NetworkDevicesConfiguration.SaveNetworkDevicesConfiguration(); } return success; }
private void HandleCredentialsRequested(object sender, CredentialsEventArgs ea) { CredentialsForm form = new CredentialsForm(ea.ProtectedResource, ea.Username, ea.Password); if (form.ShowDialog() == DialogResult.OK) { ea.Username = form.Username; ea.Password = form.Password; ea.CredentialsProvided = true; } }