BugFix: Git over HTTP/OAuth new WebSession injection After the refactoring of Gerrit's WebSession pluggability [1] the GitHub over HTTP/OAuth authentication stopped working because of a different injection mechanism. The regression caused Gerrit startup failure as the GitHub OAuth filter was throwing a non recoverable exception during init. With this change, the injection works again correctly and Git over HTTP/OAuth is fully functional again. References: [1] https://gerrit-review.googlesource.com/#/c/48697 Change-Id: I9ff2b651bd63393a465a54e64cc5dc19c07cc9e4
diff --git a/github-oauth/src/main/java/com/google/gerrit/httpd/XGerritAuth.java b/github-oauth/src/main/java/com/google/gerrit/httpd/XGerritAuth.java index 25a308e..69a40ca 100644 --- a/github-oauth/src/main/java/com/google/gerrit/httpd/XGerritAuth.java +++ b/github-oauth/src/main/java/com/google/gerrit/httpd/XGerritAuth.java
@@ -15,9 +15,11 @@ import javax.servlet.http.Cookie; +import com.google.common.cache.Cache; import com.google.gerrit.httpd.WebSessionManager.Val; import com.google.inject.Inject; import com.google.inject.Singleton; +import com.google.inject.name.Named; @Singleton public class XGerritAuth { @@ -25,12 +27,14 @@ private WebSessionManager manager; @Inject - public XGerritAuth(WebSessionManager manager) { - this.manager = manager; + public XGerritAuth(WebSessionManagerFactory managerFactory, + @Named(WebSessionManager.CACHE_NAME) Cache<String, Val> cache) { + this.manager = managerFactory.create(cache); } - + public String getAuthValue(Cookie gerritCookie) { - Val session = manager.get(new WebSessionManager.Key(gerritCookie.getValue())); + Val session = + manager.get(new WebSessionManager.Key(gerritCookie.getValue())); return session.getAuth(); } }
diff --git a/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/OAuthGitFilter.java b/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/OAuthGitFilter.java index 326ad23..cd8b32e 100644 --- a/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/OAuthGitFilter.java +++ b/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/OAuthGitFilter.java
@@ -115,17 +115,17 @@ @Inject public OAuthGitFilter(OAuthCache oauthCache, AccountCache accountCache, GitHubHttpProvider httpClientProvider, GitHubOAuthConfig config, - XGerritAuth xGerritAuth) { + XGerritAuth xGerritAuth, GitHubLogin.Provider ghLoginProvider) { this.oauthCache = oauthCache; this.accountCache = accountCache; this.httpClientProvider = httpClientProvider; this.config = config; this.xGerritAuth = xGerritAuth; + this.ghLoginProvider = ghLoginProvider; } @Override public void init(FilterConfig filterConfig) throws ServletException { - this.ghLoginProvider = new GitHubLogin.Provider(); } @Override @@ -142,22 +142,21 @@ String username = getAuthenticatedUserFromGitRequestUsingOAuthToken(httpRequest, httpResponse); - if (username == null) { - return; - } - String gerritPassword = - accountCache.getByUsername(username).getPassword(username); + if (username != null) { + String gerritPassword = + accountCache.getByUsername(username).getPassword(username); - if (gerritPassword == null) { - gerritPassword = - generateRandomGerritPassword(username, httpRequest, httpResponse, - chain); - httpResponse.sendRedirect(getRequestPathWithQueryString(httpRequest)); - return; - } + if (gerritPassword == null) { + gerritPassword = + generateRandomGerritPassword(username, httpRequest, httpResponse, + chain); + httpResponse.sendRedirect(getRequestPathWithQueryString(httpRequest)); + return; + } - httpRequest = - new BasicAuthHttpRequest(httpRequest, username, gerritPassword); + httpRequest = + new BasicAuthHttpRequest(httpRequest, username, gerritPassword); + } chain.doFilter(httpRequest, httpResponse); }