From ea094a45b9a31076919ca23ba17e8ad27e90ebce Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 25 Apr 2012 17:01:00 -0400
Subject: [PATCH] Added a logout hook to IUserService

---
 src/com/gitblit/GitBlit.java                 |   12 ++++++++++++
 src/com/gitblit/ConfigUserService.java       |    9 +++++++++
 src/com/gitblit/IUserService.java            |    7 +++++++
 src/com/gitblit/GitblitUserService.java      |    5 +++++
 src/com/gitblit/wicket/pages/LogoutPage.java |    6 +++++-
 src/com/gitblit/FileUserService.java         |    9 +++++++++
 6 files changed, 47 insertions(+), 1 deletions(-)

diff --git a/src/com/gitblit/ConfigUserService.java b/src/com/gitblit/ConfigUserService.java
index 828ba76..f8eff9f 100644
--- a/src/com/gitblit/ConfigUserService.java
+++ b/src/com/gitblit/ConfigUserService.java
@@ -200,6 +200,15 @@
 	}
 
 	/**
+	 * Logout a user.
+	 * 
+	 * @param user
+	 */
+	@Override
+	public void logout(UserModel user) {	
+	}
+	
+	/**
 	 * Retrieve the user object for the specified username.
 	 * 
 	 * @param username
diff --git a/src/com/gitblit/FileUserService.java b/src/com/gitblit/FileUserService.java
index b8d4a40..02cf2b0 100644
--- a/src/com/gitblit/FileUserService.java
+++ b/src/com/gitblit/FileUserService.java
@@ -178,6 +178,15 @@
 	}
 
 	/**
+	 * Logout a user.
+	 * 
+	 * @param user
+	 */
+	@Override
+	public void logout(UserModel user) {	
+	}
+
+	/**
 	 * Retrieve the user object for the specified username.
 	 * 
 	 * @param username
diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java
index 2b7ba3c..a616bef 100644
--- a/src/com/gitblit/GitBlit.java
+++ b/src/com/gitblit/GitBlit.java
@@ -481,6 +481,18 @@
 			response.addCookie(userCookie);
 		}
 	}
+	
+	/**
+	 * Logout a user.
+	 * 
+	 * @param user
+	 */
+	public void logout(UserModel user) {
+		if (userService == null) {
+			return;
+		}
+		userService.logout(user);
+	}
 
 	/**
 	 * Returns the list of all users available to the login service.
diff --git a/src/com/gitblit/GitblitUserService.java b/src/com/gitblit/GitblitUserService.java
index ddb3ca7..7ad3db7 100644
--- a/src/com/gitblit/GitblitUserService.java
+++ b/src/com/gitblit/GitblitUserService.java
@@ -141,6 +141,11 @@
 	public UserModel authenticate(String username, char[] password) {
 		return serviceImpl.authenticate(username, password);
 	}
+	
+	@Override
+	public void logout(UserModel user) {
+		serviceImpl.logout(user);
+	}
 
 	@Override
 	public UserModel getUserModel(String username) {
diff --git a/src/com/gitblit/IUserService.java b/src/com/gitblit/IUserService.java
index 334bbed..c3573db 100644
--- a/src/com/gitblit/IUserService.java
+++ b/src/com/gitblit/IUserService.java
@@ -88,6 +88,13 @@
 	UserModel authenticate(String username, char[] password);
 
 	/**
+	 * Logout a user.
+	 * 
+	 * @param user
+	 */
+	void logout(UserModel user);
+	
+	/**
 	 * Retrieve the user object for the specified username.
 	 * 
 	 * @param username
diff --git a/src/com/gitblit/wicket/pages/LogoutPage.java b/src/com/gitblit/wicket/pages/LogoutPage.java
index 15ef0e6..4690ad1 100644
--- a/src/com/gitblit/wicket/pages/LogoutPage.java
+++ b/src/com/gitblit/wicket/pages/LogoutPage.java
@@ -19,13 +19,17 @@
 import org.apache.wicket.protocol.http.WebResponse;
 
 import com.gitblit.GitBlit;
+import com.gitblit.models.UserModel;
 import com.gitblit.wicket.GitBlitWebSession;
 
 public class LogoutPage extends WebPage {
 
 	public LogoutPage() {
-		GitBlitWebSession.get().invalidate();
+		GitBlitWebSession session = GitBlitWebSession.get();
+		UserModel user = session.getUser();
 		GitBlit.self().setCookie((WebResponse) getResponse(), null);
+		GitBlit.self().logout(user);
+		session.invalidate();		
 		setRedirect(true);
 		setResponsePage(getApplication().getHomePage());
 	}

--
Gitblit v1.9.1