From ea936aa63d7a756ca7d0284f76b830656d1e8918 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Tue, 27 Sep 2011 09:49:57 -0400
Subject: [PATCH] Documentation.

---
 src/com/gitblit/wicket/pages/LoginPage.java |   38 +++++++++++++++++++++++++++++++++++---
 1 files changed, 35 insertions(+), 3 deletions(-)

diff --git a/src/com/gitblit/wicket/pages/LoginPage.java b/src/com/gitblit/wicket/pages/LoginPage.java
index 971ba32..45e1e2d 100644
--- a/src/com/gitblit/wicket/pages/LoginPage.java
+++ b/src/com/gitblit/wicket/pages/LoginPage.java
@@ -15,7 +15,10 @@
  */
 package com.gitblit.wicket.pages;
 
+import javax.servlet.http.Cookie;
+
 import org.apache.wicket.PageParameters;
+import org.apache.wicket.RestartResponseException;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.PasswordTextField;
@@ -24,6 +27,8 @@
 import org.apache.wicket.markup.html.panel.FeedbackPanel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
+import org.apache.wicket.protocol.http.WebRequest;
+import org.apache.wicket.protocol.http.WebResponse;
 
 import com.gitblit.Constants;
 import com.gitblit.GitBlit;
@@ -42,12 +47,15 @@
 		// If we are already logged in because user directly accessed
 		// the login url, redirect to the home page
 		if (GitBlitWebSession.get().isLoggedIn()) {
-			setRedirect(true);
-			setResponsePage(getApplication().getHomePage());
+			throw new RestartResponseException(getApplication().getHomePage());
+		}
+
+		if (GitBlit.getBoolean(Keys.web.allowCookieAuthentication, false)) {
+			loginByCookie();
 		}
 
 		add(new Label("title", GitBlit.getString(Keys.web.siteName, Constants.NAME)));
-		add(new Label("name", Constants.NAME));
+		add(new Label("name", GitBlit.getString(Keys.web.siteName, Constants.NAME)));
 
 		StatelessForm<Void> loginForm = new StatelessForm<Void>("loginForm") {
 
@@ -61,6 +69,11 @@
 				UserModel user = GitBlit.self().authenticate(username, password);
 				if (user == null) {
 					error("Invalid username or password!");
+				} else if (user.username.equals(Constants.FEDERATION_USER)) {
+					// disallow the federation user from logging in via the
+					// web ui
+					error("Invalid username or password!");
+					user = null;
 				} else {
 					loginUser(user);
 				}
@@ -72,11 +85,30 @@
 		add(loginForm);
 	}
 
+	private void loginByCookie() {
+		UserModel user = null;
+
+		// Grab cookie from Browser Session
+		Cookie[] cookies = ((WebRequest) getRequestCycle().getRequest()).getCookies();
+		if (cookies != null && cookies.length > 0) {
+			user = GitBlit.self().authenticate(cookies);
+		}
+
+		// Login the user
+		loginUser(user);
+	}
+
 	private void loginUser(UserModel user) {
 		if (user != null) {
 			// Set the user into the session
 			GitBlitWebSession.get().setUser(user);
 
+			// Set Cookie
+			if (GitBlit.getBoolean(Keys.web.allowCookieAuthentication, false)) {
+				WebResponse response = (WebResponse) getRequestCycle().getResponse();
+				GitBlit.self().setCookie(response, user);
+			}
+
 			if (!continueToOriginalDestination()) {
 				// Redirect to home page
 				setResponsePage(getApplication().getHomePage());

--
Gitblit v1.9.1