diff options
author | Julien Lancelot <julien.lancelot@sonarsource.com> | 2019-04-03 15:18:44 +0200 |
---|---|---|
committer | SonarTech <sonartech@sonarsource.com> | 2019-04-03 20:21:06 +0200 |
commit | af1424c2022ccdcae3e54df1698d9bf59855bc08 (patch) | |
tree | a04a97af1ee22366168707a4b09c52d747b363ea | |
parent | 91f37bb55b79523a00ab02f5b180c9a3b12a5b9a (diff) | |
download | sonarqube-af1424c2022ccdcae3e54df1698d9bf59855bc08.tar.gz sonarqube-af1424c2022ccdcae3e54df1698d9bf59855bc08.zip |
Revert "SONAR-11883 Remove redirection that was kept for old scanners"
This reverts commit 91e2ea646539462d22d5064adf47af8b3fbd5705.
3 files changed, 79 insertions, 12 deletions
diff --git a/server/sonar-docs/src/pages/setup/upgrade-notes.md b/server/sonar-docs/src/pages/setup/upgrade-notes.md index 92f75ff514f..1f3e1c62ad4 100644 --- a/server/sonar-docs/src/pages/setup/upgrade-notes.md +++ b/server/sonar-docs/src/pages/setup/upgrade-notes.md @@ -3,13 +3,6 @@ title: Release Upgrade Notes url: /setup/upgrade-notes/ --- -## Release 7.8 Upgrade Notes -**Scanner version compatibility** -Only the following scanner versions are compatible with SonarQube 7.8: -* SonarQube Scanner CLI 2.9+ -* SonarQube Scanner Maven 3.3.0.603+ -* SonarQube Scanner Gradle 2.3+ - ## Release 7.7 Upgrade Notes **Deprecated parameters dropped** `sonar.language`, and `sonar.profile`, both deprecated since 4.5, are dropped in this version as is `sonar.analysis.mode`, which as been deprecated since 6.6. These now-unrecognized parameters will simply be ignored, rather than failing analysis. diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/web/RedirectFilter.java b/server/sonar-server/src/main/java/org/sonar/server/platform/web/RedirectFilter.java index 64a17466641..1567b242a89 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/web/RedirectFilter.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/web/RedirectFilter.java @@ -41,7 +41,10 @@ public class RedirectFilter implements Filter { private static final String EMPTY = ""; private static final List<Redirect> REDIRECTS = ImmutableList.of( - newSimpleRedirect("/api", "/api/webservices/list")); + newSimpleRedirect("/api", "/api/webservices/list"), + new BatchRedirect(), + new BatchBootstrapRedirect(), + new ProfilesExportRedirect()); @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException { @@ -97,6 +100,60 @@ public class RedirectFilter implements Filter { String apply(HttpServletRequest request); } + /** + * Old scanners were using /batch/file.jar url (see SCANNERAPI-167) + */ + private static class BatchRedirect implements Redirect { + + private static final String BATCH_WS = "/batch"; + + @Override + public boolean test(String path) { + return path.startsWith(BATCH_WS + "/") && path.endsWith(".jar"); + } + + @Override + public String apply(HttpServletRequest request) { + String path = extractPath(request); + return format("%s%s/file?name=%s", request.getContextPath(), BATCH_WS, path.replace(BATCH_WS + "/", EMPTY)); + } + } + + /** + * Old scanners were using /batch_bootstrap url (see SCANNERAPI-167) + */ + private static class BatchBootstrapRedirect implements Redirect { + + @Override + public boolean test(String path) { + return "/batch_bootstrap/index".equals(path); + } + + @Override + public String apply(HttpServletRequest request) { + return format("%s%s/index", request.getContextPath(), "/batch"); + } + } + + /** + * Old scanners were using /profiles/export url (see SVS-130) + */ + private static class ProfilesExportRedirect implements Redirect { + + private static final String PROFILES_EXPORT = "/profiles/export"; + private static final String API_QUALITY_PROFILE_EXPORT = "/api/qualityprofiles/export"; + + @Override + public boolean test(String path) { + return PROFILES_EXPORT.equals(path); + } + + @Override + public String apply(HttpServletRequest request) { + return format("%s%s?%s", request.getContextPath(), API_QUALITY_PROFILE_EXPORT, request.getQueryString()); + } + } + private static String extractPath(HttpServletRequest request) { return sanitizePath(request.getRequestURI().replaceFirst(request.getContextPath(), EMPTY)); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/platform/web/RedirectFilterTest.java b/server/sonar-server/src/test/java/org/sonar/server/platform/web/RedirectFilterTest.java index 255e97509cc..4396df7dad3 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/platform/web/RedirectFilterTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/platform/web/RedirectFilterTest.java @@ -37,11 +37,11 @@ import static org.mockito.Mockito.when; public class RedirectFilterTest { - private HttpServletRequest request = mock(HttpServletRequest.class); - private HttpServletResponse response = mock(HttpServletResponse.class); - private FilterChain chain = mock(FilterChain.class); + HttpServletRequest request = mock(HttpServletRequest.class); + HttpServletResponse response = mock(HttpServletResponse.class); + FilterChain chain = mock(FilterChain.class); - private RedirectFilter underTest = new RedirectFilter(); + RedirectFilter underTest = new RedirectFilter(); @Before public void setUp() throws Exception { @@ -55,6 +55,23 @@ public class RedirectFilterTest { } @Test + public void send_redirect_when_url_contains_batch_with_jar() throws Exception { + verifyRedirection("/batch/file.jar", null, "/sonarqube/batch/file?name=file.jar"); + } + + @Test + public void send_redirect_when_url_contains_batch_bootstrap() throws Exception { + verifyRedirection("/batch_bootstrap/index", null, "/sonarqube/batch/index"); + verifyRedirection("/batch_bootstrap/index/", null, "/sonarqube/batch/index"); + } + + @Test + public void send_redirect_when_url_contains_profiles_export() throws Exception { + verifyRedirection("/profiles/export", "format=pmd", "/sonarqube/api/qualityprofiles/export?format=pmd"); + verifyRedirection("/profiles/export/", "format=pmd", "/sonarqube/api/qualityprofiles/export?format=pmd"); + } + + @Test public void does_not_redirect_and_execute_remaining_filter_on_unknown_path() throws Exception { verifyNoRedirection("/api/issues/search", null); } |