From 0d3e3ca5b85d7e81066030a5081ea3a9cbe76607 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 21 Jul 2011 14:48:15 -0400
Subject: [PATCH] Rollback to Jetty 7.4.3 for now.
---
src/com/gitblit/wicket/pages/BasePage.java | 90 +++++++++++++++++++++++++++++++++++++++-----
1 files changed, 79 insertions(+), 11 deletions(-)
diff --git a/src/com/gitblit/wicket/pages/BasePage.java b/src/com/gitblit/wicket/pages/BasePage.java
index 5a0eb90..e95aee3 100644
--- a/src/com/gitblit/wicket/pages/BasePage.java
+++ b/src/com/gitblit/wicket/pages/BasePage.java
@@ -19,13 +19,20 @@
import java.util.Map;
import java.util.TimeZone;
+import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
+import org.apache.wicket.MarkupContainer;
import org.apache.wicket.PageParameters;
import org.apache.wicket.RestartResponseAtInterceptPageException;
+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.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
+import org.apache.wicket.markup.html.panel.Fragment;
+import org.apache.wicket.protocol.http.WebRequest;
+import org.apache.wicket.protocol.http.WebResponse;
import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -34,6 +41,7 @@
import com.gitblit.Constants.AccessRestrictionType;
import com.gitblit.GitBlit;
import com.gitblit.Keys;
+import com.gitblit.models.UserModel;
import com.gitblit.wicket.GitBlitWebSession;
import com.gitblit.wicket.WicketUtils;
import com.gitblit.wicket.panels.LinkPanel;
@@ -45,14 +53,40 @@
public BasePage() {
super();
logger = LoggerFactory.getLogger(getClass());
+ loginByCookie();
}
public BasePage(PageParameters params) {
super(params);
logger = LoggerFactory.getLogger(getClass());
+ loginByCookie();
+ }
+
+ private void loginByCookie() {
+ if (!GitBlit.getBoolean(Keys.web.allowCookieAuthentication, false)) {
+ return;
+ }
+ 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
+ if (user != null) {
+ // Set the user into the session
+ GitBlitWebSession.get().setUser(user);
+
+ // Set Cookie
+ WebResponse response = (WebResponse) getRequestCycle().getResponse();
+ GitBlit.self().setCookie(response, user);
+ }
}
protected void setupPage(String repositoryName, String pageName) {
+
if (repositoryName != null && repositoryName.trim().length() > 0) {
add(new Label("title", getServerName() + " - " + repositoryName));
} else {
@@ -74,17 +108,12 @@
// footer
if (GitBlit.getBoolean(Keys.web.authenticateViewPages, true)
|| GitBlit.getBoolean(Keys.web.authenticateAdminPages, true)) {
- if (GitBlitWebSession.get().isLoggedIn()) {
- // logout
- add(new LinkPanel("userPanel", null, getString("gb.logout") + " "
- + GitBlitWebSession.get().getUser().toString(), LogoutPage.class));
- } else {
- // login
- add(new LinkPanel("userPanel", null, getString("gb.login"), LoginPage.class));
- }
+ UserFragment userFragment = new UserFragment("userPanel", "userFragment", BasePage.this);
+ add(userFragment);
} else {
add(new Label("userPanel", ""));
}
+
add(new Label("gbVersion", "v" + Constants.VERSION));
if (GitBlit.getBoolean(Keys.web.aggressiveHeapManagement, false)) {
System.gc();
@@ -122,7 +151,7 @@
HttpServletRequest req = servletWebRequest.getHttpServletRequest();
return req.getServerName();
}
-
+
public void warn(String message, Throwable t) {
logger.warn(message, t);
}
@@ -131,7 +160,7 @@
logger.error(message);
if (redirect) {
GitBlitWebSession.get().cacheErrorMessage(message);
- throw new RestartResponseAtInterceptPageException(getApplication().getHomePage());
+ throw new RestartResponseException(getApplication().getHomePage());
} else {
super.error(message);
}
@@ -141,9 +170,48 @@
logger.error(message, t);
if (redirect) {
GitBlitWebSession.get().cacheErrorMessage(message);
- throw new RestartResponseAtInterceptPageException(getApplication().getHomePage());
+ throw new RestartResponseException(getApplication().getHomePage());
} else {
super.error(message);
}
}
+
+ public void authenticationError(String message) {
+ logger.error(message);
+ if (GitBlitWebSession.get().isLoggedIn()) {
+ error(message, true);
+ } else {
+ throw new RestartResponseAtInterceptPageException(LoginPage.class);
+ }
+ }
+
+ /**
+ * Panel fragment for displaying login or logout/change_password links.
+ *
+ */
+ class UserFragment extends Fragment {
+
+ private static final long serialVersionUID = 1L;
+
+ public UserFragment(String id, String markupId, MarkupContainer markupProvider) {
+ super(id, markupId, markupProvider);
+
+ if (GitBlitWebSession.get().isLoggedIn()) {
+ // username, logout, and change password
+ add(new Label("username", GitBlitWebSession.get().getUser().toString() + ":"));
+ add(new LinkPanel("loginLink", null, markupProvider.getString("gb.logout"),
+ LogoutPage.class));
+ // quick and dirty hack for showing a separator
+ add(new Label("separator", "|"));
+ add(new BookmarkablePageLink<Void>("changePasswordLink", ChangePasswordPage.class));
+ } else {
+ // login
+ add(new Label("username").setVisible(false));
+ add(new LinkPanel("loginLink", null, markupProvider.getString("gb.login"),
+ LoginPage.class));
+ add(new Label("separator").setVisible(false));
+ add(new Label("changePasswordLink").setVisible(false));
+ }
+ }
+ }
}
--
Gitblit v1.9.1