Merge branch 'stable-3.4' into stable-3.5 * stable-3.4: Fix update HEAD action detection from BearerAuthenticationFilter Change-Id: I138734fae309b1f1a0af66bb165abacc1905ce2b
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/BearerAuthenticationFilter.java b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/BearerAuthenticationFilter.java index be71946..68dac6a 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/BearerAuthenticationFilter.java +++ b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/api/BearerAuthenticationFilter.java
@@ -85,7 +85,7 @@ if (isBasicAuthenticationRequest(requestURI)) { filterChain.doFilter(servletRequest, servletResponse); - } else if (isPullReplicationApiRequest(requestURI) + } else if (isPullReplicationApiRequest(httpRequest.getMethod(), requestURI) || (isGitUploadPackRequest(httpRequest) && isAuthenticationHeaderWithBearerToken(authorizationHeader))) { if (isBearerTokenAuthenticated(authorizationHeader, bearerToken)) @@ -121,14 +121,15 @@ return requestURI.startsWith("/a/"); } - private boolean isPullReplicationApiRequest(String requestURI) { + private boolean isPullReplicationApiRequest(String requestMethod, String requestURI) { return (requestURI.contains(pluginName) && (requestURI.endsWith(String.format("/%s~apply-object", pluginName)) || requestURI.endsWith(String.format("/%s~apply-objects", pluginName)) || requestURI.endsWith(String.format("/%s~fetch", pluginName)) || requestURI.endsWith(String.format("/%s~delete-project", pluginName)) || requestURI.contains(String.format("/%s/init-project/", pluginName)))) - || requestURI.matches(".*/projects/[^/]+/HEAD"); + || (requestURI.matches(String.format(".*/projects/[^/]+/%s~HEAD", pluginName)) + && "PUT".equals(requestMethod)); } private Optional<String> extractBearerToken(String authorizationHeader) {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/replication/pull/api/BearerAuthenticationFilterTest.java b/src/test/java/com/googlesource/gerrit/plugins/replication/pull/api/BearerAuthenticationFilterTest.java index ca69f06..72aee76 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/replication/pull/api/BearerAuthenticationFilterTest.java +++ b/src/test/java/com/googlesource/gerrit/plugins/replication/pull/api/BearerAuthenticationFilterTest.java
@@ -52,6 +52,12 @@ @Mock private FilterChain filterChain; private final String pluginName = "pull-replication"; + private void authenticateAndFilter(String method, String uri, Optional<String> queryStringMaybe) + throws ServletException, IOException { + when(httpServletRequest.getMethod()).thenReturn(method); + authenticateAndFilter(uri, queryStringMaybe); + } + private void authenticateAndFilter(String uri, Optional<String> queryStringMaybe) throws ServletException, IOException { final String bearerToken = "some-bearer-token"; @@ -97,7 +103,8 @@ @Test public void shouldAuthenticateWhenUpdateHead() throws ServletException, IOException { - authenticateAndFilter("any-prefix/projects/my-project/HEAD", NO_QUERY_PARAMETERS); + authenticateAndFilter( + "PUT", "any-prefix/projects/my-project/pull-replication~HEAD", NO_QUERY_PARAMETERS); } @Test