public CredentialsProviderScope(CredentialsProvider credentialsProvider) { if (credentialsProvider == null) throw new ArgumentNullException("credentialsProvider"); _lastProvider = _currentProvider; _currentProvider = credentialsProvider; }
public void Dispose() { if (!_disposed) { _currentProvider = _lastProvider; _disposed = true; } }
/// <exception cref="NSch.JSchException"></exception> public override Session GetSession(string user, string pass, string host, int port , CredentialsProvider credentialsProvider, FS fs) { lock (this) { if (config == null) { config = OpenSshConfig.Get(fs); } OpenSshConfig.Host hc = config.Lookup(host); host = hc.GetHostName(); if (port <= 0) { port = hc.GetPort(); } if (user == null) { user = hc.GetUser(); } Session session = CreateSession(hc, user, host, port, fs); if (pass != null) { session.SetPassword(pass); } string strictHostKeyCheckingPolicy = hc.GetStrictHostKeyChecking(); if (strictHostKeyCheckingPolicy != null) { session.SetConfig("StrictHostKeyChecking", strictHostKeyCheckingPolicy); } string pauth = hc.GetPreferredAuthentications(); if (pauth != null) { session.SetConfig("PreferredAuthentications", pauth); } if (credentialsProvider != null && (!hc.IsBatchMode() || !credentialsProvider.IsInteractive ())) { session.SetUserInfo(new CredentialsProviderUserInfo(session, credentialsProvider) ); } Configure(hc, session); return session; } }
/// <summary>Create a minimal transport instance not tied to a single repository.</summary> /// <remarks>Create a minimal transport instance not tied to a single repository.</remarks> /// <param name="uri"></param> protected internal Transport(URIish uri) { this.uri = uri; this.local = null; this.checkFetchedObjects = true; this.credentialsProvider = CredentialsProvider.GetDefault(); }
/// <summary>Wrap a CredentialsProvider to make it suitable for use with JSch.</summary> /// <remarks>Wrap a CredentialsProvider to make it suitable for use with JSch.</remarks> /// <param name="session">the JSch session this UserInfo will support authentication on. /// </param> /// <param name="credentialsProvider">the provider that will perform the authentication. /// </param> public CredentialsProviderUserInfo(Session session, CredentialsProvider credentialsProvider ) { this.uri = CreateURI(session); this.provider = credentialsProvider; }
/// <summary>Create a new transport instance.</summary> /// <remarks>Create a new transport instance.</remarks> /// <param name="local"> /// the repository this instance will fetch into, or push out of. /// This must be the repository passed to /// <see cref="Open(NGit.Repository, URIish)">Open(NGit.Repository, URIish)</see> /// . /// </param> /// <param name="uri"> /// the URI used to access the remote repository. This must be the /// URI passed to /// <see cref="Open(NGit.Repository, URIish)">Open(NGit.Repository, URIish)</see> /// . /// </param> protected internal Transport(Repository local, URIish uri) { TransferConfig tc = local.GetConfig().Get(TransferConfig.KEY); this.local = local; this.uri = uri; this.checkFetchedObjects = tc.IsFsckObjects(); this.credentialsProvider = CredentialsProvider.GetDefault(); }
/// <exception cref="NGit.Errors.TransportException"></exception> public override RemoteSession GetSession(URIish uri, CredentialsProvider credentialsProvider , FS fs, int tms) { lock (this) { string user = uri.GetUser(); string pass = uri.GetPass(); string host = uri.GetHost(); int port = uri.GetPort(); try { if (config == null) { config = OpenSshConfig.Get(fs); } OpenSshConfig.Host hc = config.Lookup(host); host = hc.GetHostName(); if (port <= 0) { port = hc.GetPort(); } if (user == null) { user = hc.GetUser(); } Session session = CreateSession(credentialsProvider, fs, user, pass, host, port, hc); int retries = 0; while (!session.IsConnected() && retries < 3) { try { retries++; session.Connect(tms); } catch (JSchException e) { session.Disconnect(); session = null; // if authentication failed maybe credentials changed at the // remote end therefore reset credentials and retry if (credentialsProvider != null && e.InnerException == null && e.Message.Equals("Auth fail" )) { credentialsProvider.Reset(uri); session = CreateSession(credentialsProvider, fs, user, pass, host, port, hc); } else { throw; } } } return new JschSession(session, uri); } catch (JSchException je) { Exception c = je.InnerException; if (c is UnknownHostException) { throw new TransportException(uri, JGitText.Get().unknownHost); } if (c is ConnectException) { throw new TransportException(uri, c.Message); } throw new TransportException(uri, je.Message, je); } } }
/// <summary>Set the default credentials provider.</summary> /// <remarks>Set the default credentials provider.</remarks> /// <param name="p">the new default provider, may be null to select no default.</param> public static void SetDefault(CredentialsProvider p) { defaultProvider = p; }
/// <exception cref="NGit.Errors.TransportException"></exception> public override RemoteSession GetSession(URIish uri, CredentialsProvider credentialsProvider , FS fs, int tms) { lock (this) { string user = uri.GetUser(); string pass = uri.GetPass(); string host = uri.GetHost(); int port = uri.GetPort(); try { if (config == null) { config = OpenSshConfig.Get(fs); } OpenSshConfig.Host hc = config.Lookup(host); host = hc.GetHostName(); if (port <= 0) { port = hc.GetPort(); } if (user == null) { user = hc.GetUser(); } Session session = CreateSession(credentialsProvider, fs, user, pass, host, port, hc); int retries = 0; while (!session.IsConnected() && retries < 3) { try { retries++; session.Connect(tms); } catch (JSchException e) { session.Disconnect(); session = null; // if authentication failed maybe credentials changed at the // remote end therefore reset credentials and retry if (credentialsProvider != null && e.InnerException == null && e.Message.Equals("Auth fail" ) && retries < 3) { credentialsProvider.Reset(uri); session = CreateSession(credentialsProvider, fs, user, pass, host, port, hc); } else { throw; } } } return(new JschSession(session, uri)); } catch (JSchException je) { Exception c = je.InnerException; if (c is UnknownHostException) { throw new TransportException(uri, JGitText.Get().unknownHost); } if (c is ConnectException) { throw new TransportException(uri, c.Message); } throw new TransportException(uri, je.Message, je); } } }
public GitProvider(IAuthor author, CredentialsProvider credentials) : this(author) { Credentials = credentials; }
/// <summary>Update this method with the credentials from the URIish.</summary> /// <remarks>Update this method with the credentials from the URIish.</remarks> /// <param name="uri">the URI used to create the connection.</param> /// <param name="credentialsProvider"> /// the credentials provider, or null. If provided, /// <see cref="URIish.GetPass()">credentials in the URI</see> /// are ignored. /// </param> /// <returns> /// true if the authentication method is able to provide /// authorization for the given URI /// </returns> internal virtual bool Authorize(URIish uri, CredentialsProvider credentialsProvider ) { string username; string password; if (credentialsProvider != null) { CredentialItem.Username u = new CredentialItem.Username(); CredentialItem.Password p = new CredentialItem.Password(); if (credentialsProvider.Supports(u, p) && credentialsProvider.Get(uri, u, p)) { username = u.GetValue(); password = new string(p.GetValue()); p.Clear(); } else { return false; } } else { username = uri.GetUser(); password = uri.GetPass(); } if (username != null) { Authorize(username, password); return true; } return false; }
/// <exception cref="NGit.Errors.TransportException"></exception> public override RemoteSession GetSession(URIish uri, CredentialsProvider credentialsProvider , FS fs, int tms) { lock (this) { string user = uri.GetUser(); string pass = uri.GetPass(); string host = uri.GetHost(); int port = uri.GetPort(); try { if (config == null) { config = OpenSshConfig.Get(fs); } OpenSshConfig.Host hc = config.Lookup(host); host = hc.GetHostName(); if (port <= 0) { port = hc.GetPort(); } if (user == null) { user = hc.GetUser(); } Session session = CreateSession(hc, user, host, port, fs); if (pass != null) { session.SetPassword(pass); } string strictHostKeyCheckingPolicy = hc.GetStrictHostKeyChecking(); if (strictHostKeyCheckingPolicy != null) { session.SetConfig("StrictHostKeyChecking", strictHostKeyCheckingPolicy); } string pauth = hc.GetPreferredAuthentications(); if (pauth != null) { session.SetConfig("PreferredAuthentications", pauth); } if (credentialsProvider != null && (!hc.IsBatchMode() || !credentialsProvider.IsInteractive ())) { session.SetUserInfo(new CredentialsProviderUserInfo(session, credentialsProvider) ); } Configure(hc, session); if (!session.IsConnected()) { session.Connect(tms); } return(new JschSession(session, uri)); } catch (JSchException je) { Exception c = je.InnerException; if (c is UnknownHostException) { throw new TransportException(uri, JGitText.Get().unknownHost); } if (c is ConnectException) { throw new TransportException(uri, c.Message); } throw new TransportException(uri, je.Message, je); } } }
/// <exception cref="NGit.Errors.TransportException"></exception> public override RemoteSession GetSession(URIish uri, CredentialsProvider credentialsProvider , FS fs, int tms) { lock (this) { string user = uri.GetUser(); string pass = uri.GetPass(); string host = uri.GetHost(); int port = uri.GetPort(); try { if (config == null) { config = OpenSshConfig.Get(fs); } OpenSshConfig.Host hc = config.Lookup(host); host = hc.GetHostName(); if (port <= 0) { port = hc.GetPort(); } if (user == null) { user = hc.GetUser(); } Session session = CreateSession(hc, user, host, port, fs); if (pass != null) { session.SetPassword(pass); } string strictHostKeyCheckingPolicy = hc.GetStrictHostKeyChecking(); if (strictHostKeyCheckingPolicy != null) { session.SetConfig("StrictHostKeyChecking", strictHostKeyCheckingPolicy); } string pauth = hc.GetPreferredAuthentications(); if (pauth != null) { session.SetConfig("PreferredAuthentications", pauth); } if (credentialsProvider != null && (!hc.IsBatchMode() || !credentialsProvider.IsInteractive ())) { session.SetUserInfo(new CredentialsProviderUserInfo(session, credentialsProvider) ); } Configure(hc, session); if (!session.IsConnected()) { session.Connect(tms); } return new JschSession(session, uri); } catch (JSchException je) { Exception c = je.InnerException; if (c is UnknownHostException) { throw new TransportException(uri, JGitText.Get().unknownHost); } if (c is ConnectException) { throw new TransportException(uri, c.Message); } throw new TransportException(uri, je.Message, je); } } }
/// <exception cref="NGit.Errors.TransportException"></exception> public override RemoteSession GetSession(URIish uri2, CredentialsProvider credentialsProvider , FS fs, int tms) { return(new TransportGitSsh.ExtSession(_enclosing)); }
/// <summary>Open (or reuse) a session to a host.</summary> /// <remarks> /// Open (or reuse) a session to a host. /// <p> /// A reasonable UserInfo that can interact with the end-user (if necessary) /// is installed on the returned session by this method. /// <p> /// The caller must connect the session by invoking <code>connect()</code> /// if it has not already been connected. /// </remarks> /// <param name="uri">URI information about the remote host</param> /// <param name="credentialsProvider">provider to support authentication, may be null. /// </param> /// <param name="fs"> /// the file system abstraction which will be necessary to /// perform certain file system operations. /// </param> /// <param name="tms">Timeout value, in milliseconds.</param> /// <returns>a session that can contact the remote host.</returns> /// <exception cref="NGit.Errors.TransportException">the session could not be created. /// </exception> public abstract RemoteSession GetSession(URIish uri, CredentialsProvider credentialsProvider , FS fs, int tms);
/// <summary>Open (or reuse) a session to a host.</summary> /// <remarks> /// Open (or reuse) a session to a host. /// <p> /// A reasonable UserInfo that can interact with the end-user (if necessary) /// is installed on the returned session by this method. /// <p> /// The caller must connect the session by invoking <code>connect()</code> /// if it has not already been connected. /// </remarks> /// <param name="user"> /// username to authenticate as. If null a reasonable default must /// be selected by the implementation. This may be /// <code>System.getProperty("user.name")</code>. /// </param> /// <param name="pass"> /// optional user account password or passphrase. If not null a /// UserInfo that supplies this value to the SSH library will be /// configured. /// </param> /// <param name="host">hostname (or IP address) to connect to. Must not be null.</param> /// <param name="port"> /// port number the server is listening for connections on. May be <= /// 0 to indicate the IANA registered port of 22 should be used. /// </param> /// <param name="credentialsProvider">provider to support authentication, may be null. /// </param> /// <param name="fs"> /// the file system abstraction which will be necessary to /// perform certain file system operations. /// </param> /// <returns>a session that can contact the remote host.</returns> /// <exception cref="NSch.JSchException">the session could not be created.</exception> public abstract Session GetSession(string user, string pass, string host, int port , CredentialsProvider credentialsProvider, FS fs);
/// <exception cref="NSch.JSchException"></exception> private Session CreateSession(CredentialsProvider credentialsProvider, FS fs, string user, string pass, string host, int port, OpenSshConfig.Host hc) { Session session = CreateSession(hc, user, host, port, fs); if (pass != null) { session.SetPassword(pass); } string strictHostKeyCheckingPolicy = hc.GetStrictHostKeyChecking(); if (strictHostKeyCheckingPolicy != null) { session.SetConfig("StrictHostKeyChecking", strictHostKeyCheckingPolicy); } string pauth = hc.GetPreferredAuthentications(); if (pauth != null) { session.SetConfig("PreferredAuthentications", pauth); } if (credentialsProvider != null && (!hc.IsBatchMode() || !credentialsProvider.IsInteractive ())) { session.SetUserInfo(new CredentialsProviderUserInfo(session, credentialsProvider) ); } Configure(hc, session); return session; }
/// <summary>A credentials provider to assist with authentication connections..</summary> /// <remarks>A credentials provider to assist with authentication connections..</remarks> /// <param name="credentialsProvider">the credentials provider, or null if there is none /// </param> public virtual void SetCredentialsProvider(CredentialsProvider credentialsProvider ) { this.credentialsProvider = credentialsProvider; }
/// <exception cref="NGit.Errors.TransportException"></exception> public override RemoteSession GetSession(URIish uri2, CredentialsProvider credentialsProvider , FS fs, int tms) { return new TransportGitSsh.ExtSession(_enclosing); }