From eb0f7ea03074bb45c67d2ad877af3c5c85e6b3fc Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Mon, 03 Mar 2014 11:33:24 -0500 Subject: [PATCH] Fix compare page exception when a submodule changes (issue-375) --- src/main/java/com/gitblit/manager/AuthenticationManager.java | 73 ++++++++++++++++++++++-------------- 1 files changed, 45 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/gitblit/manager/AuthenticationManager.java b/src/main/java/com/gitblit/manager/AuthenticationManager.java index 60687d4..4897514 100644 --- a/src/main/java/com/gitblit/manager/AuthenticationManager.java +++ b/src/main/java/com/gitblit/manager/AuthenticationManager.java @@ -22,6 +22,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; @@ -149,6 +150,13 @@ @Override public AuthenticationManager stop() { + for (AuthenticationProvider provider : authenticationProviders) { + try { + provider.stop(); + } catch (Exception e) { + logger.error("Failed to stop " + provider.getClass().getSimpleName(), e); + } + } return this; } @@ -235,13 +243,18 @@ return null; } + UserModel user = null; + // try to authenticate by cookie - UserModel user = authenticate(httpRequest.getCookies()); - if (user != null) { - flagWicketSession(AuthenticationType.COOKIE); - logger.debug(MessageFormat.format("{0} authenticated by cookie from {1}", + String cookie = getCookie(httpRequest); + if (!StringUtils.isEmpty(cookie)) { + user = userManager.getUserModel(cookie.toCharArray()); + if (user != null) { + flagWicketSession(AuthenticationType.COOKIE); + logger.debug(MessageFormat.format("{0} authenticated by cookie from {1}", user.username, httpRequest.getRemoteAddr())); - return user; + return user; + } } // try to authenticate by BASIC @@ -266,26 +279,6 @@ } else { logger.warn(MessageFormat.format("Failed login attempt for {0}, invalid credentials from {1}", username, httpRequest.getRemoteAddr())); - } - } - } - return null; - } - - /** - * Authenticate a user based on their cookie. - * - * @param cookies - * @return a user object or null - */ - protected UserModel authenticate(Cookie[] cookies) { - if (settings.getBoolean(Keys.web.allowCookieAuthentication, true)) { - if (cookies != null && cookies.length > 0) { - for (Cookie cookie : cookies) { - if (cookie.getName().equals(Constants.NAME)) { - String value = cookie.getValue(); - return userManager.getUserModel(value.toCharArray()); - } } } } @@ -323,9 +316,10 @@ return null; } - // try local authentication UserModel user = userManager.getUserModel(usernameDecoded); - if (user != null) { + + // try local authentication + if (user != null && user.isLocalAccount()) { UserModel returnedUser = null; if (user.password.startsWith(StringUtils.MD5_TYPE)) { // password digest @@ -364,6 +358,28 @@ } /** + * Returns the Gitlbit cookie in the request. + * + * @param request + * @return the Gitblit cookie for the request or null if not found + */ + @Override + public String getCookie(HttpServletRequest request) { + if (settings.getBoolean(Keys.web.allowCookieAuthentication, true)) { + Cookie[] cookies = request.getCookies(); + if (cookies != null && cookies.length > 0) { + for (Cookie cookie : cookies) { + if (cookie.getName().equals(Constants.NAME)) { + String value = cookie.getValue(); + return value; + } + } + } + } + return null; + } + + /** * Sets a cookie for the specified user. * * @param response @@ -389,7 +405,8 @@ } else { // create real cookie userCookie = new Cookie(Constants.NAME, cookie); - userCookie.setMaxAge(Integer.MAX_VALUE); + // expire the cookie in 7 days + userCookie.setMaxAge((int) TimeUnit.DAYS.toSeconds(7)); } } userCookie.setPath("/"); -- Gitblit v1.9.1