using System;
using System.Linq;
using System.Net;
using System.Text;
using Renci.SshNet.Common;
namespace Renci.SshNet
{
///
/// Provides connection information when password authentication method is used
///
///
///
///
///
///
public class PasswordConnectionInfo : ConnectionInfo, IDisposable
{
///
/// Occurs when user's password has expired and needs to be changed.
///
///
///
///
public event EventHandler PasswordExpired;
///
/// Initializes a new instance of the class.
///
/// Connection host.
/// Connection username.
/// Connection password.
///
///
///
/// is null.
/// is invalid, or is null or contains only whitespace characters.
public PasswordConnectionInfo(string host, string username, string password)
: this(host, DefaultPort, username, Encoding.UTF8.GetBytes(password))
{
}
///
/// Initializes a new instance of the class.
///
/// Connection host.
/// Connection port.
/// Connection username.
/// Connection password.
/// is null.
/// is invalid, or is null or contains only whitespace characters.
/// is not within and .
public PasswordConnectionInfo(string host, int port, string username, string password)
: this(host, port, username, Encoding.UTF8.GetBytes(password), ProxyTypes.None, string.Empty, 0, string.Empty, string.Empty)
{
}
///
/// Initializes a new instance of the class.
///
/// Connection host.
/// The port.
/// Connection username.
/// Connection password.
/// Type of the proxy.
/// The proxy host.
/// The proxy port.
public PasswordConnectionInfo(string host, int port, string username, string password, ProxyTypes proxyType, string proxyHost, int proxyPort)
: this(host, port, username, Encoding.UTF8.GetBytes(password), proxyType, proxyHost, proxyPort, string.Empty, string.Empty)
{
}
///
/// Initializes a new instance of the class.
///
/// Connection host.
/// The port.
/// Connection username.
/// Connection password.
/// Type of the proxy.
/// The proxy host.
/// The proxy port.
/// The proxy username.
public PasswordConnectionInfo(string host, int port, string username, string password, ProxyTypes proxyType, string proxyHost, int proxyPort, string proxyUsername)
: this(host, port, username, Encoding.UTF8.GetBytes(password), proxyType, proxyHost, proxyPort, proxyUsername, string.Empty)
{
}
///
/// Initializes a new instance of the class.
///
/// Connection host.
/// Connection username.
/// Connection password.
/// Type of the proxy.
/// The proxy host.
/// The proxy port.
public PasswordConnectionInfo(string host, string username, string password, ProxyTypes proxyType, string proxyHost, int proxyPort)
: this(host, DefaultPort, username, Encoding.UTF8.GetBytes(password), proxyType, proxyHost, proxyPort, string.Empty, string.Empty)
{
}
///
/// Initializes a new instance of the class.
///
/// Connection host.
/// Connection username.
/// Connection password.
/// Type of the proxy.
/// The proxy host.
/// The proxy port.
/// The proxy username.
public PasswordConnectionInfo(string host, string username, string password, ProxyTypes proxyType, string proxyHost, int proxyPort, string proxyUsername)
: this(host, DefaultPort, username, Encoding.UTF8.GetBytes(password), proxyType, proxyHost, proxyPort, proxyUsername, string.Empty)
{
}
///
/// Initializes a new instance of the class.
///
/// Connection host.
/// Connection username.
/// Connection password.
/// Type of the proxy.
/// The proxy host.
/// The proxy port.
/// The proxy username.
/// The proxy password.
public PasswordConnectionInfo(string host, string username, string password, ProxyTypes proxyType, string proxyHost, int proxyPort, string proxyUsername, string proxyPassword)
: this(host, DefaultPort, username, Encoding.UTF8.GetBytes(password), proxyType, proxyHost, proxyPort, proxyUsername, proxyPassword)
{
}
///
/// Initializes a new instance of the class.
///
/// Connection host.
/// Connection username.
/// Connection password.
public PasswordConnectionInfo(string host, string username, byte[] password)
: this(host, DefaultPort, username, password)
{
}
///
/// Initializes a new instance of the class.
///
/// Connection host.
/// Connection port.
/// Connection username.
/// Connection password.
/// is null.
/// is invalid, or is null or contains only whitespace characters.
/// is not within and .
public PasswordConnectionInfo(string host, int port, string username, byte[] password)
: this(host, port, username, password, ProxyTypes.None, string.Empty, 0, string.Empty, string.Empty)
{
}
///
/// Initializes a new instance of the class.
///
/// Connection host.
/// The port.
/// Connection username.
/// Connection password.
/// Type of the proxy.
/// The proxy host.
/// The proxy port.
public PasswordConnectionInfo(string host, int port, string username, byte[] password, ProxyTypes proxyType, string proxyHost, int proxyPort)
: this(host, port, username, password, proxyType, proxyHost, proxyPort, string.Empty, string.Empty)
{
}
///
/// Initializes a new instance of the class.
///
/// Connection host.
/// The port.
/// Connection username.
/// Connection password.
/// Type of the proxy.
/// The proxy host.
/// The proxy port.
/// The proxy username.
public PasswordConnectionInfo(string host, int port, string username, byte[] password, ProxyTypes proxyType, string proxyHost, int proxyPort, string proxyUsername)
: this(host, port, username, password, proxyType, proxyHost, proxyPort, proxyUsername, string.Empty)
{
}
///
/// Initializes a new instance of the class.
///
/// Connection host.
/// Connection username.
/// Connection password.
/// Type of the proxy.
/// The proxy host.
/// The proxy port.
public PasswordConnectionInfo(string host, string username, byte[] password, ProxyTypes proxyType, string proxyHost, int proxyPort)
: this(host, DefaultPort, username, password, proxyType, proxyHost, proxyPort, string.Empty, string.Empty)
{
}
///
/// Initializes a new instance of the class.
///
/// Connection host.
/// Connection username.
/// Connection password.
/// Type of the proxy.
/// The proxy host.
/// The proxy port.
/// The proxy username.
public PasswordConnectionInfo(string host, string username, byte[] password, ProxyTypes proxyType, string proxyHost, int proxyPort, string proxyUsername)
: this(host, DefaultPort, username, password, proxyType, proxyHost, proxyPort, proxyUsername, string.Empty)
{
}
///
/// Initializes a new instance of the class.
///
/// Connection host.
/// Connection username.
/// Connection password.
/// Type of the proxy.
/// The proxy host.
/// The proxy port.
/// The proxy username.
/// The proxy password.
public PasswordConnectionInfo(string host, string username, byte[] password, ProxyTypes proxyType, string proxyHost, int proxyPort, string proxyUsername, string proxyPassword)
: this(host, DefaultPort, username, password, proxyType, proxyHost, proxyPort, proxyUsername, proxyPassword)
{
}
///
/// Initializes a new instance of the class.
///
/// Connection host.
/// The port.
/// Connection username.
/// Connection password.
/// Type of the proxy.
/// The proxy host.
/// The proxy port.
/// The proxy username.
/// The proxy password.
public PasswordConnectionInfo(string host, int port, string username, byte[] password, ProxyTypes proxyType, string proxyHost, int proxyPort, string proxyUsername, string proxyPassword)
: base(host, port, username, proxyType, proxyHost, proxyPort, proxyUsername, proxyPassword, new PasswordAuthenticationMethod(username, password))
{
foreach (var authenticationMethod in AuthenticationMethods.OfType())
{
authenticationMethod.PasswordExpired += AuthenticationMethod_PasswordExpired;
}
}
private void AuthenticationMethod_PasswordExpired(object sender, AuthenticationPasswordChangeEventArgs e)
{
if (PasswordExpired != null)
{
PasswordExpired(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.
///
~PasswordConnectionInfo()
{
// Do not re-create Dispose clean-up code here.
// Calling Dispose(false) is optimal in terms of
// readability and maintainability.
Dispose(false);
}
#endregion
}
}