From aaecd8f2a36d2c0d780b42425aa57725fe708551 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 10 Apr 2014 18:58:08 -0400
Subject: [PATCH] Move cache to IKeyManager and implement isStale() in FileKeyManager

---
 src/main/java/com/gitblit/transport/ssh/SshPasswordAuthenticator.java |   29 ++++++++++++++++++++---------
 1 files changed, 20 insertions(+), 9 deletions(-)

diff --git a/src/main/java/com/gitblit/transport/ssh/SshPasswordAuthenticator.java b/src/main/java/com/gitblit/transport/ssh/SshPasswordAuthenticator.java
index e39b5f7..5ddc4a3 100644
--- a/src/main/java/com/gitblit/transport/ssh/SshPasswordAuthenticator.java
+++ b/src/main/java/com/gitblit/transport/ssh/SshPasswordAuthenticator.java
@@ -19,8 +19,10 @@
 
 import org.apache.sshd.server.PasswordAuthenticator;
 import org.apache.sshd.server.session.ServerSession;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
-import com.gitblit.manager.IGitblit;
+import com.gitblit.manager.IAuthenticationManager;
 import com.gitblit.models.UserModel;
 
 /**
@@ -30,21 +32,30 @@
  */
 public class SshPasswordAuthenticator implements PasswordAuthenticator {
 
-	protected final IGitblit gitblit;
+	protected final Logger log = LoggerFactory.getLogger(getClass());
 
-	public SshPasswordAuthenticator(IGitblit gitblit) {
-		this.gitblit = gitblit;
+	protected final IAuthenticationManager authManager;
+
+	public SshPasswordAuthenticator(IAuthenticationManager authManager) {
+		this.authManager = authManager;
 	}
 
 	@Override
 	public boolean authenticate(String username, String password, ServerSession session) {
-		username = username.toLowerCase(Locale.US);
-		UserModel user = gitblit.authenticate(username, password.toCharArray());
-		if (user != null) {
-			SshSession sd = session.getAttribute(SshSession.KEY);
-			sd.authenticationSuccess(username);
+		SshDaemonClient client = session.getAttribute(SshDaemonClient.KEY);
+		if (client.getUser() != null) {
+			log.info("{} has already authenticated!", username);
 			return true;
 		}
+
+		username = username.toLowerCase(Locale.US);
+		UserModel user = authManager.authenticate(username, password.toCharArray());
+		if (user != null) {
+			client.setUser(user);
+			return true;
+		}
+
+		log.warn("could not authenticate {} for SSH using the supplied password", username);
 		return false;
 	}
 }

--
Gitblit v1.9.1