]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-17150 fix SSF-39
authorPierre <pierre.guillot@sonarsource.com>
Tue, 9 Aug 2022 15:11:04 +0000 (17:11 +0200)
committersonartech <sonartech@sonarsource.com>
Mon, 15 Aug 2022 20:03:06 +0000 (20:03 +0000)
server/sonar-auth-common/src/main/java/org/sonar/auth/OAuthRestClient.java

index 4e3d6eeb9943ca0a4daafeb36638f269e4afb1eb..13eca84d68460ec6e4d1c1130ade9320fa0f2a36 100644 (file)
@@ -31,13 +31,15 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.ExecutionException;
 import java.util.function.Function;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import static java.lang.String.format;
 
 public class OAuthRestClient {
 
-  public static final String REL_NEXT = "rel=\"next\"";
   private static final int DEFAULT_PAGE_SIZE = 100;
+  private static final Pattern NEXT_LINK_PATTERN = Pattern.compile("<([^<]+)>; rel=\"next\"");
 
   private OAuthRestClient() {
     // Only static method
@@ -85,24 +87,16 @@ public class OAuthRestClient {
   }
 
   private static Optional<String> readNextEndPoint(Response response) {
-    Optional<String> linksHeader = response.getHeaders().entrySet().stream()
+    String link = response.getHeaders().entrySet().stream()
       .filter(e -> "Link".equalsIgnoreCase(e.getKey()))
       .map(Map.Entry::getValue)
-      .findAny();
+      .findAny().orElse("");
 
-    if (linksHeader.isEmpty()) {
+    Matcher nextLinkMatcher = NEXT_LINK_PATTERN.matcher(link);
+    if (!nextLinkMatcher.find()) {
       return Optional.empty();
     }
-
-    String[] links = linksHeader.get().split(",");
-    for (String link : links) {
-      String trimmedLink = link.trim();
-      if (trimmedLink.contains(REL_NEXT) && trimmedLink.contains("<") && trimmedLink.contains(">")) {
-        String nextUrl = trimmedLink.substring(trimmedLink.indexOf("<") + 1, trimmedLink.indexOf(">"));
-        return Optional.of(nextUrl);
-      }
-    }
-    return Optional.empty();
+    return Optional.of(nextLinkMatcher.group(1));
   }
 
   private static IllegalStateException unexpectedResponseCode(String requestUrl, Response response) throws IOException {