From d97e52ef501a72fcf16aee02d7e79c91d123dfe6 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Fri, 24 Aug 2012 13:32:44 -0400 Subject: [PATCH] Implemented custom request handling for (un)authenticated sessions to workaround Wicket bugs --- src/com/gitblit/wicket/pages/BasePage.java | 27 +++++++++++++++++---------- 1 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/com/gitblit/wicket/pages/BasePage.java b/src/com/gitblit/wicket/pages/BasePage.java index 82862ae..234c2a9 100644 --- a/src/com/gitblit/wicket/pages/BasePage.java +++ b/src/com/gitblit/wicket/pages/BasePage.java @@ -26,7 +26,7 @@ import org.apache.wicket.Application; import org.apache.wicket.MarkupContainer; import org.apache.wicket.PageParameters; -import org.apache.wicket.RestartResponseAtInterceptPageException; +import org.apache.wicket.RedirectToUrlException; import org.apache.wicket.RestartResponseException; import org.apache.wicket.markup.html.CSSPackageResource; import org.apache.wicket.markup.html.WebPage; @@ -35,9 +35,11 @@ import org.apache.wicket.markup.html.link.ExternalLink; import org.apache.wicket.markup.html.panel.FeedbackPanel; import org.apache.wicket.markup.html.panel.Fragment; +import org.apache.wicket.protocol.http.RequestUtils; import org.apache.wicket.protocol.http.WebRequest; import org.apache.wicket.protocol.http.WebResponse; import org.apache.wicket.protocol.http.servlet.ServletWebRequest; +import org.apache.wicket.request.RequestParameters; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -137,7 +139,8 @@ // Set Cookie WebResponse response = (WebResponse) getRequestCycle().getResponse(); GitBlit.self().setCookie(response, user); - continueToOriginalDestination(); + + session.continueRequest(); } } @@ -229,7 +232,7 @@ // inject username into repository url if authentication is required if (repository.accessRestriction.exceeds(AccessRestrictionType.NONE) && GitBlitWebSession.get().isLoggedIn()) { - String username = GitBlitWebSession.get().getUser().username; + String username = GitBlitWebSession.get().getUsername(); sb.insert(sb.indexOf("://") + 3, username + "@"); } return sb.toString(); @@ -240,10 +243,13 @@ } public void error(String message, boolean redirect) { - logger.error(message); + logger.error(message + " for " + GitBlitWebSession.get().getUsername()); if (redirect) { GitBlitWebSession.get().cacheErrorMessage(message); - throw new RestartResponseException(getApplication().getHomePage()); + RequestParameters params = getRequest().getRequestParameters(); + String relativeUrl = urlFor(RepositoriesPage.class, null).toString(); + String absoluteUrl = RequestUtils.toAbsolutePath(relativeUrl); + throw new RedirectToUrlException(absoluteUrl); } else { super.error(message); } @@ -260,12 +266,13 @@ } public void authenticationError(String message) { - logger.error(message); - if (GitBlitWebSession.get().isLoggedIn()) { - error(message, true); - } else { - throw new RestartResponseAtInterceptPageException(RepositoriesPage.class); + logger.error(getRequest().getURL() + " for " + GitBlitWebSession.get().getUsername()); + if (!GitBlitWebSession.get().isLoggedIn()) { + // cache the request if we have not authenticated. + // the request will continue after authentication. + GitBlitWebSession.get().cacheRequest(getClass()); } + error(message, true); } /** -- Gitblit v1.9.1