diff --git a/src/main/java/org/gitlab4j/api/utils/AccessTokenUtils.java b/src/main/java/org/gitlab4j/api/utils/AccessTokenUtils.java index 5fbd05ffd1b3c32ec58e7e36ff1da78bc01704cd..58007f2c796f11657b2e9db955182468aee29313 100644 --- a/src/main/java/org/gitlab4j/api/utils/AccessTokenUtils.java +++ b/src/main/java/org/gitlab4j/api/utils/AccessTokenUtils.java @@ -36,7 +36,8 @@ public final class AccessTokenUtils { protected static final String PERSONAL_ACCESS_TOKEN_REGEX = "name=\\\"created-personal-access-token\\\".*data-clipboard-text=\\\"([^\\\"]*)\\\".*\\/>"; protected static final Pattern PERSONAL_ACCESS_TOKEN_PATTERN = Pattern.compile(PERSONAL_ACCESS_TOKEN_REGEX); - protected static final String REVOKE_PERSONAL_ACCESS_TOKEN_REGEX = "%s<\\/td>.*%s<\\/td>.*href=\\\"([^\\\"]*)\\\">Revoke"; + protected static final String REVOKE_PERSONAL_ACCESS_TOKEN_REGEX = "href=\\\"([^\\\"]*)\\\""; + protected static final Pattern REVOKE_PERSONAL_ACCESS_TOKEN_PATTERN = Pattern.compile(REVOKE_PERSONAL_ACCESS_TOKEN_REGEX); protected static final String FEED_TOKEN_REGEX = "name=\\\"feed_token\\\".*value=\\\"([^\\\"]*)\\\".*\\/>"; protected static final Pattern FEED_TOKEN_PATTERN = Pattern.compile(FEED_TOKEN_REGEX); @@ -230,6 +231,18 @@ public final class AccessTokenUtils { * Step 3: Submit the /profile/personal_access_tokens page with the info to * * revoke the first matching personal access token. * *******************************************************************************/ + int indexOfTokenName = content.indexOf("" + tokenName + ""); + if (indexOfTokenName == -1) { + throw new GitLabApiException("personal access token not found, aborting!"); + } + + content = content.substring(indexOfTokenName); + int indexOfLinkEnd = content.indexOf(""); + if (indexOfTokenName == -1) { + throw new GitLabApiException("personal access token not found, aborting!"); + } + + content = content.substring(0, indexOfLinkEnd); String scopesText = ""; if (scopes != null && scopes.size() > 0) { final StringJoiner joiner = new StringJoiner(", "); @@ -237,9 +250,11 @@ public final class AccessTokenUtils { scopesText = joiner.toString(); } - String regex = String.format(REVOKE_PERSONAL_ACCESS_TOKEN_REGEX, tokenName, scopesText); - Pattern pattern = Pattern.compile(regex); - matcher = pattern.matcher(content); + if (content.indexOf(scopesText) == -1) { + throw new GitLabApiException("personal access token not found, aborting!"); + } + + matcher = REVOKE_PERSONAL_ACCESS_TOKEN_PATTERN.matcher(content); if (!matcher.find()) { throw new GitLabApiException("personal access token not found, aborting!"); } diff --git a/src/test/java/org/gitlab4j/api/TestAccessTokenUtils.java b/src/test/java/org/gitlab4j/api/TestAccessTokenUtils.java index 91a5d49eb2801deb42a94b9f4839c00f558f87dc..3da577596c7bf4fc069a69a880fabfe1dae67e56 100644 --- a/src/test/java/org/gitlab4j/api/TestAccessTokenUtils.java +++ b/src/test/java/org/gitlab4j/api/TestAccessTokenUtils.java @@ -72,7 +72,7 @@ public class TestAccessTokenUtils { String accessToken = AccessTokenUtils.createPersonalAccessToken( TEST_HOST_URL, TEST_LOGIN_USERNAME, TEST_LOGIN_PASSWORD, tokenName, Arrays.asList("api", "sudo")); - System.out.println("Created personal access token: " + accessToken); + System.out.format("Created '%s' personal access token: %s%n", tokenName, accessToken); assertNotNull(accessToken); assertFalse(accessToken.trim().isEmpty()); @@ -82,7 +82,7 @@ public class TestAccessTokenUtils { AccessTokenUtils.revokePersonalAccessToken( TEST_HOST_URL, TEST_LOGIN_USERNAME, TEST_LOGIN_PASSWORD, tokenName, Arrays.asList("api", "sudo")); - System.out.println("Revoked personal access token: " + accessToken); + System.out.format("Revoked '%s' personal access token: %s%n", tokenName, accessToken); } catch (Exception ignore) {} } @@ -107,14 +107,14 @@ public class TestAccessTokenUtils { String accessToken = AccessTokenUtils.createPersonalAccessToken( TEST_HOST_URL, TEST_LOGIN_USERNAME, TEST_LOGIN_PASSWORD, tokenName, Arrays.asList("api", "sudo")); - System.out.println("Created personal access token: " + accessToken); + System.out.format("Created '%s' personal access token: %s%n", tokenName, accessToken); assertNotNull(accessToken); assertFalse(accessToken.trim().isEmpty()); AccessTokenUtils.revokePersonalAccessToken( TEST_HOST_URL, TEST_LOGIN_USERNAME, TEST_LOGIN_PASSWORD, tokenName, Arrays.asList("api", "sudo")); - System.out.println("Revoked personal access token: " + accessToken); + System.out.format("Revoked '%s' personal access token: %s%n", tokenName, accessToken); } @Test