From f7ae2a8425edfa56dd2927b8eb1fdc8ead94e79f Mon Sep 17 00:00:00 2001 From: Stardrad Yin <yin8086@gmail.com> Date: Wed, 05 Mar 2014 10:16:53 -0500 Subject: [PATCH] Fix Chinese translate strings --- src/main/java/com/gitblit/manager/AuthenticationManager.java | 130 +++++++++++++++++++++++-------------------- 1 files changed, 70 insertions(+), 60 deletions(-) diff --git a/src/main/java/com/gitblit/manager/AuthenticationManager.java b/src/main/java/com/gitblit/manager/AuthenticationManager.java index 6e541c4..ad4a985 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; @@ -108,10 +109,10 @@ String realm = settings.getString(Keys.realm.userService, "${baseFolder}/users.conf"); if (legacyRedirects.containsKey(realm)) { logger.warn(""); - logger.warn("#################################################################"); + logger.warn(Constants.BORDER2); logger.warn(" IUserService '{}' is obsolete!", realm); logger.warn(" Please set '{}={}'", "realm.authenticationProviders", legacyRedirects.get(realm)); - logger.warn("#################################################################"); + logger.warn(Constants.BORDER2); logger.warn(""); // conditionally override specified authentication providers @@ -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; } @@ -183,14 +191,14 @@ if (principal != null) { String username = principal.getName(); if (!StringUtils.isEmpty(username)) { - boolean internalAccount = isInternalAccount(username); + boolean internalAccount = userManager.isInternalAccount(username); UserModel user = userManager.getUserModel(username); if (user != null) { // existing user flagWicketSession(AuthenticationType.CONTAINER); logger.debug(MessageFormat.format("{0} authenticated by servlet container principal from {1}", user.username, httpRequest.getRemoteAddr())); - return user; + return validateAuthentication(user, AuthenticationType.CONTAINER); } else if (settings.getBoolean(Keys.realm.container.autoCreateAccounts, false) && !internalAccount) { // auto-create user from an authenticated container principal @@ -202,7 +210,7 @@ flagWicketSession(AuthenticationType.CONTAINER); logger.debug(MessageFormat.format("{0} authenticated and created by servlet container principal from {1}", user.username, httpRequest.getRemoteAddr())); - return user; + return validateAuthentication(user, AuthenticationType.CONTAINER); } else if (!internalAccount) { logger.warn(MessageFormat.format("Failed to find UserModel for {0}, attempted servlet container authentication from {1}", principal.getName(), httpRequest.getRemoteAddr())); @@ -223,7 +231,7 @@ flagWicketSession(AuthenticationType.CERTIFICATE); logger.debug(MessageFormat.format("{0} authenticated by client certificate {1} from {2}", user.username, metadata.serialNumber, httpRequest.getRemoteAddr())); - return user; + return validateAuthentication(user, AuthenticationType.CERTIFICATE); } else { logger.warn(MessageFormat.format("Failed to find UserModel for {0}, attempted client certificate ({1}) authentication from {2}", model.username, metadata.serialNumber, httpRequest.getRemoteAddr())); @@ -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 validateAuthentication(user, AuthenticationType.COOKIE); + } } // try to authenticate by BASIC @@ -262,7 +275,7 @@ flagWicketSession(AuthenticationType.CREDENTIALS); logger.debug(MessageFormat.format("{0} authenticated by BASIC request header from {1}", user.username, httpRequest.getRemoteAddr())); - return user; + return validateAuthentication(user, AuthenticationType.CREDENTIALS); } else { logger.warn(MessageFormat.format("Failed login attempt for {0}, invalid credentials from {1}", username, httpRequest.getRemoteAddr())); @@ -273,23 +286,24 @@ } /** - * Authenticate a user based on their cookie. + * This method allows the authentication manager to reject authentication + * attempts. It is called after the username/secret have been verified to + * ensure that the authentication technique has been logged. * - * @param cookies - * @return a user object or null + * @param user + * @return */ - 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()); - } - } - } + protected UserModel validateAuthentication(UserModel user, AuthenticationType type) { + if (user == null) { + return null; } - return null; + if (user.disabled) { + // user has been disabled + logger.warn("Rejected {} authentication attempt by disabled account \"{}\"", + type, user.username); + return null; + } + return user; } protected void flagWicketSession(AuthenticationType authenticationType) { @@ -322,19 +336,11 @@ // can not authenticate empty password return null; } - // check to see if this is the federation user -// if (canFederate()) { -// if (usernameDecoded.equalsIgnoreCase(Constants.FEDERATION_USER)) { -// List<String> tokens = getFederationTokens(); -// if (tokens.contains(pw)) { -// return getFederationUser(); -// } -// } -// } + + UserModel user = userManager.getUserModel(usernameDecoded); // try local authentication - UserModel user = userManager.getUserModel(usernameDecoded); - if (user != null) { + if (user != null && user.isLocalAccount()) { UserModel returnedUser = null; if (user.password.startsWith(StringUtils.MD5_TYPE)) { // password digest @@ -353,7 +359,7 @@ // plain-text password returnedUser = user; } - return returnedUser; + return validateAuthentication(returnedUser, AuthenticationType.CREDENTIALS); } // try registered external authentication providers @@ -364,12 +370,34 @@ if (user != null) { // user authenticated user.accountType = provider.getAccountType(); - return user; + return validateAuthentication(user, AuthenticationType.CREDENTIALS); } } } } - return user; + return validateAuthentication(user, AuthenticationType.CREDENTIALS); + } + + /** + * 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; } /** @@ -398,7 +426,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("/"); @@ -489,23 +518,4 @@ } return AuthenticationProvider.NULL_PROVIDER; } - - /** - * Returns true if the username represents an internal account - * - * @param username - * @return true if the specified username represents an internal account - */ - protected boolean isInternalAccount(String username) { - return !StringUtils.isEmpty(username) - && (username.equalsIgnoreCase(Constants.FEDERATION_USER) - || username.equalsIgnoreCase(UserModel.ANONYMOUS.username)); - } - -// protected UserModel getFederationUser() { -// // the federation user is an administrator -// UserModel federationUser = new UserModel(Constants.FEDERATION_USER); -// federationUser.canAdmin = true; -// return federationUser; -// } } -- Gitblit v1.9.1