| | |
| | | import javax.servlet.http.Cookie; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import javax.servlet.http.HttpSession; |
| | | |
| | | import org.apache.wicket.RequestCycle; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | |
| | | import com.gitblit.Constants; |
| | | import com.gitblit.Constants.AccountType; |
| | | import com.gitblit.Constants.AuthenticationType; |
| | | import com.gitblit.Constants.Role; |
| | | import com.gitblit.IStoredSettings; |
| | | import com.gitblit.Keys; |
| | | import com.gitblit.auth.AuthenticationProvider; |
| | |
| | | import com.gitblit.utils.HttpUtils; |
| | | import com.gitblit.utils.StringUtils; |
| | | import com.gitblit.utils.X509Utils.X509Metadata; |
| | | import com.gitblit.wicket.GitBlitWebSession; |
| | | import com.google.inject.Inject; |
| | | import com.google.inject.Singleton; |
| | | |
| | |
| | | UserModel user = userManager.getUserModel(username); |
| | | if (user != null) { |
| | | // existing user |
| | | flagWicketSession(AuthenticationType.CONTAINER); |
| | | flagSession(httpRequest, AuthenticationType.CONTAINER); |
| | | logger.debug(MessageFormat.format("{0} authenticated by servlet container principal from {1}", |
| | | user.username, httpRequest.getRemoteAddr())); |
| | | return validateAuthentication(user, AuthenticationType.CONTAINER); |
| | |
| | | user.password = Constants.EXTERNAL_ACCOUNT; |
| | | user.accountType = AccountType.CONTAINER; |
| | | userManager.updateUserModel(user); |
| | | flagWicketSession(AuthenticationType.CONTAINER); |
| | | flagSession(httpRequest, AuthenticationType.CONTAINER); |
| | | logger.debug(MessageFormat.format("{0} authenticated and created by servlet container principal from {1}", |
| | | user.username, httpRequest.getRemoteAddr())); |
| | | return validateAuthentication(user, AuthenticationType.CONTAINER); |
| | |
| | | UserModel user = userManager.getUserModel(model.username); |
| | | X509Metadata metadata = HttpUtils.getCertificateMetadata(httpRequest); |
| | | if (user != null) { |
| | | flagWicketSession(AuthenticationType.CERTIFICATE); |
| | | flagSession(httpRequest, AuthenticationType.CERTIFICATE); |
| | | logger.debug(MessageFormat.format("{0} authenticated by client certificate {1} from {2}", |
| | | user.username, metadata.serialNumber, httpRequest.getRemoteAddr())); |
| | | return validateAuthentication(user, AuthenticationType.CERTIFICATE); |
| | |
| | | if (!StringUtils.isEmpty(cookie)) { |
| | | user = userManager.getUserModel(cookie.toCharArray()); |
| | | if (user != null) { |
| | | flagWicketSession(AuthenticationType.COOKIE); |
| | | flagSession(httpRequest, AuthenticationType.COOKIE); |
| | | logger.debug(MessageFormat.format("{0} authenticated by cookie from {1}", |
| | | user.username, httpRequest.getRemoteAddr())); |
| | | return validateAuthentication(user, AuthenticationType.COOKIE); |
| | |
| | | char[] password = values[1].toCharArray(); |
| | | user = authenticate(username, password); |
| | | if (user != null) { |
| | | flagWicketSession(AuthenticationType.CREDENTIALS); |
| | | flagSession(httpRequest, AuthenticationType.CREDENTIALS); |
| | | logger.debug(MessageFormat.format("{0} authenticated by BASIC request header from {1}", |
| | | user.username, httpRequest.getRemoteAddr())); |
| | | return validateAuthentication(user, AuthenticationType.CREDENTIALS); |
| | |
| | | return user; |
| | | } |
| | | |
| | | protected void flagWicketSession(AuthenticationType authenticationType) { |
| | | RequestCycle requestCycle = RequestCycle.get(); |
| | | if (requestCycle != null) { |
| | | // flag the Wicket session, if this is a Wicket request |
| | | GitBlitWebSession session = GitBlitWebSession.get(); |
| | | session.authenticationType = authenticationType; |
| | | } |
| | | protected void flagSession(HttpServletRequest httpRequest, AuthenticationType authenticationType) { |
| | | httpRequest.getSession().setAttribute(Constants.AUTHENTICATION_TYPE, authenticationType); |
| | | } |
| | | |
| | | /** |
| | |
| | | * @param user |
| | | */ |
| | | @Override |
| | | @Deprecated |
| | | public void setCookie(HttpServletResponse response, UserModel user) { |
| | | setCookie(null, response, user); |
| | | } |
| | | |
| | | /** |
| | | * Sets a cookie for the specified user. |
| | | * |
| | | * @param request |
| | | * @param response |
| | | * @param user |
| | | */ |
| | | @Override |
| | | public void setCookie(HttpServletRequest request, HttpServletResponse response, UserModel user) { |
| | | if (settings.getBoolean(Keys.web.allowCookieAuthentication, true)) { |
| | | GitBlitWebSession session = GitBlitWebSession.get(); |
| | | boolean standardLogin = session.authenticationType.isStandard(); |
| | | HttpSession session = request.getSession(); |
| | | AuthenticationType authenticationType = (AuthenticationType) session.getAttribute(Constants.AUTHENTICATION_TYPE); |
| | | boolean standardLogin = authenticationType.isStandard(); |
| | | |
| | | if (standardLogin) { |
| | | Cookie userCookie; |
| | |
| | | userCookie.setMaxAge((int) TimeUnit.DAYS.toSeconds(7)); |
| | | } |
| | | } |
| | | userCookie.setPath("/"); |
| | | String path = "/"; |
| | | if (request != null) { |
| | | if (!StringUtils.isEmpty(request.getContextPath())) { |
| | | path = request.getContextPath(); |
| | | } |
| | | } |
| | | userCookie.setPath(path); |
| | | response.addCookie(userCookie); |
| | | } |
| | | } |
| | |
| | | /** |
| | | * Logout a user. |
| | | * |
| | | * @param response |
| | | * @param user |
| | | */ |
| | | @Override |
| | | @Deprecated |
| | | public void logout(HttpServletResponse response, UserModel user) { |
| | | setCookie(response, null); |
| | | setCookie(null, response, null); |
| | | } |
| | | |
| | | /** |
| | | * Logout a user. |
| | | * |
| | | * @param request |
| | | * @param response |
| | | * @param user |
| | | */ |
| | | @Override |
| | | public void logout(HttpServletRequest request, HttpServletResponse response, UserModel user) { |
| | | setCookie(request, response, null); |
| | | } |
| | | |
| | | /** |
| | |
| | | return (team != null && team.isLocalTeam()) || findProvider(team).supportsTeamMembershipChanges(); |
| | | } |
| | | |
| | | /** |
| | | * Returns true if the user's role can be changed. |
| | | * |
| | | * @param user |
| | | * @return true if the user's role can be changed |
| | | */ |
| | | @Override |
| | | public boolean supportsRoleChanges(UserModel user, Role role) { |
| | | return (user != null && user.isLocalAccount()) || findProvider(user).supportsRoleChanges(user, role); |
| | | } |
| | | |
| | | /** |
| | | * Returns true if the team's role can be changed. |
| | | * |
| | | * @param user |
| | | * @return true if the team's role can be changed |
| | | */ |
| | | @Override |
| | | public boolean supportsRoleChanges(TeamModel team, Role role) { |
| | | return (team != null && team.isLocalTeam()) || findProvider(team).supportsRoleChanges(team, role); |
| | | } |
| | | |
| | | protected AuthenticationProvider findProvider(UserModel user) { |
| | | for (AuthenticationProvider provider : authenticationProviders) { |
| | | if (provider.getAccountType().equals(user.accountType)) { |