using System; using System.Linq; using Renci.SshNet.Common; namespace Renci.SshNet { /// /// Provides connection information when keyboard interactive authentication method is used /// /// /// /// public class KeyboardInteractiveConnectionInfo : ConnectionInfo, IDisposable { /// /// Occurs when server prompts for more authentication information. /// /// /// /// public event EventHandler AuthenticationPrompt; // TODO: DOCS Add exception documentation for this class. /// /// Initializes a new instance of the class. /// /// The host. /// The username. public KeyboardInteractiveConnectionInfo(string host, string username) : this(host, DefaultPort, username, ProxyTypes.None, string.Empty, 0, string.Empty, string.Empty) { } /// /// Initializes a new instance of the class. /// /// The host. /// The port. /// The username. public KeyboardInteractiveConnectionInfo(string host, int port, string username) : this(host, port, username, ProxyTypes.None, string.Empty, 0, string.Empty, string.Empty) { } /// /// Initializes a new instance of the class. /// /// Connection host. /// Connection port. /// Connection username. /// Type of the proxy. /// The proxy host. /// The proxy port. public KeyboardInteractiveConnectionInfo(string host, int port, string username, ProxyTypes proxyType, string proxyHost, int proxyPort) : this(host, port, username, proxyType, proxyHost, proxyPort, string.Empty, string.Empty) { } /// /// Initializes a new instance of the class. /// /// Connection host. /// Connection port. /// Connection username. /// Type of the proxy. /// The proxy host. /// The proxy port. /// The proxy username. public KeyboardInteractiveConnectionInfo(string host, int port, string username, ProxyTypes proxyType, string proxyHost, int proxyPort, string proxyUsername) : this(host, port, username, proxyType, proxyHost, proxyPort, proxyUsername, string.Empty) { } /// /// Initializes a new instance of the class. /// /// Connection host. /// Connection username. /// Type of the proxy. /// The proxy host. /// The proxy port. public KeyboardInteractiveConnectionInfo(string host, string username, ProxyTypes proxyType, string proxyHost, int proxyPort) : this(host, DefaultPort, username, proxyType, proxyHost, proxyPort, string.Empty, string.Empty) { } /// /// Initializes a new instance of the class. /// /// Connection host. /// Connection username. /// Type of the proxy. /// The proxy host. /// The proxy port. /// The proxy username. public KeyboardInteractiveConnectionInfo(string host, string username, ProxyTypes proxyType, string proxyHost, int proxyPort, string proxyUsername) : this(host, DefaultPort, username, proxyType, proxyHost, proxyPort, proxyUsername, string.Empty) { } /// /// Initializes a new instance of the class. /// /// Connection host. /// Connection username. /// Type of the proxy. /// The proxy host. /// The proxy port. /// The proxy username. /// The proxy password. public KeyboardInteractiveConnectionInfo(string host, string username, ProxyTypes proxyType, string proxyHost, int proxyPort, string proxyUsername, string proxyPassword) : this(host, DefaultPort, username, proxyType, proxyHost, proxyPort, proxyUsername, proxyPassword) { } /// /// Initializes a new instance of the class. /// /// Connection host. /// Connection port. /// Connection username. /// Type of the proxy. /// The proxy host. /// The proxy port. /// The proxy username. /// The proxy password. public KeyboardInteractiveConnectionInfo(string host, int port, string username, ProxyTypes proxyType, string proxyHost, int proxyPort, string proxyUsername, string proxyPassword) : base(host, port, username, proxyType, proxyHost, proxyPort, proxyUsername, proxyPassword, new KeyboardInteractiveAuthenticationMethod(username)) { foreach (var authenticationMethod in AuthenticationMethods.OfType()) { authenticationMethod.AuthenticationPrompt += AuthenticationMethod_AuthenticationPrompt; } } private void AuthenticationMethod_AuthenticationPrompt(object sender, AuthenticationPromptEventArgs e) { if (AuthenticationPrompt != null) { AuthenticationPrompt(sender, e); } } #region IDisposable Members private bool _isDisposed; /// /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } /// /// Releases unmanaged and - optionally - managed resources /// /// true to release both managed and unmanaged resources; false to release only unmanaged resources. protected virtual void Dispose(bool disposing) { if (_isDisposed) return; if (disposing) { if (AuthenticationMethods != null) { foreach (var authenticationMethods in AuthenticationMethods.OfType()) { authenticationMethods.Dispose(); } } _isDisposed = true; } } /// /// Releases unmanaged resources and performs other cleanup operations before the /// is reclaimed by garbage collection. /// ~KeyboardInteractiveConnectionInfo() { Dispose(false); } #endregion } }