Commit 318b3611 authored by Greg Messner's avatar Greg Messner
Browse files

Fixed AccessTokenUtils.revokePersonalAccessToken() (#336).

parent 91fd03a7
...@@ -36,7 +36,8 @@ public final class AccessTokenUtils { ...@@ -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 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 Pattern PERSONAL_ACCESS_TOKEN_PATTERN = Pattern.compile(PERSONAL_ACCESS_TOKEN_REGEX);
protected static final String REVOKE_PERSONAL_ACCESS_TOKEN_REGEX = "<td>%s<\\/td>.*<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 String FEED_TOKEN_REGEX = "name=\\\"feed_token\\\".*value=\\\"([^\\\"]*)\\\".*\\/>";
protected static final Pattern FEED_TOKEN_PATTERN = Pattern.compile(FEED_TOKEN_REGEX); protected static final Pattern FEED_TOKEN_PATTERN = Pattern.compile(FEED_TOKEN_REGEX);
...@@ -230,6 +231,18 @@ public final class AccessTokenUtils { ...@@ -230,6 +231,18 @@ public final class AccessTokenUtils {
* Step 3: Submit the /profile/personal_access_tokens page with the info to * * Step 3: Submit the /profile/personal_access_tokens page with the info to *
* revoke the first matching personal access token. * * revoke the first matching personal access token. *
*******************************************************************************/ *******************************************************************************/
int indexOfTokenName = content.indexOf("<td>" + tokenName + "</td>");
if (indexOfTokenName == -1) {
throw new GitLabApiException("personal access token not found, aborting!");
}
content = content.substring(indexOfTokenName);
int indexOfLinkEnd = content.indexOf("</a>");
if (indexOfTokenName == -1) {
throw new GitLabApiException("personal access token not found, aborting!");
}
content = content.substring(0, indexOfLinkEnd);
String scopesText = ""; String scopesText = "";
if (scopes != null && scopes.size() > 0) { if (scopes != null && scopes.size() > 0) {
final StringJoiner joiner = new StringJoiner(", "); final StringJoiner joiner = new StringJoiner(", ");
...@@ -237,9 +250,11 @@ public final class AccessTokenUtils { ...@@ -237,9 +250,11 @@ public final class AccessTokenUtils {
scopesText = joiner.toString(); scopesText = joiner.toString();
} }
String regex = String.format(REVOKE_PERSONAL_ACCESS_TOKEN_REGEX, tokenName, scopesText); if (content.indexOf(scopesText) == -1) {
Pattern pattern = Pattern.compile(regex); throw new GitLabApiException("personal access token not found, aborting!");
matcher = pattern.matcher(content); }
matcher = REVOKE_PERSONAL_ACCESS_TOKEN_PATTERN.matcher(content);
if (!matcher.find()) { if (!matcher.find()) {
throw new GitLabApiException("personal access token not found, aborting!"); throw new GitLabApiException("personal access token not found, aborting!");
} }
......
...@@ -72,7 +72,7 @@ public class TestAccessTokenUtils { ...@@ -72,7 +72,7 @@ public class TestAccessTokenUtils {
String accessToken = AccessTokenUtils.createPersonalAccessToken( String accessToken = AccessTokenUtils.createPersonalAccessToken(
TEST_HOST_URL, TEST_LOGIN_USERNAME, TEST_LOGIN_PASSWORD, TEST_HOST_URL, TEST_LOGIN_USERNAME, TEST_LOGIN_PASSWORD,
tokenName, Arrays.asList("api", "sudo")); 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); assertNotNull(accessToken);
assertFalse(accessToken.trim().isEmpty()); assertFalse(accessToken.trim().isEmpty());
...@@ -82,7 +82,7 @@ public class TestAccessTokenUtils { ...@@ -82,7 +82,7 @@ public class TestAccessTokenUtils {
AccessTokenUtils.revokePersonalAccessToken( AccessTokenUtils.revokePersonalAccessToken(
TEST_HOST_URL, TEST_LOGIN_USERNAME, TEST_LOGIN_PASSWORD, TEST_HOST_URL, TEST_LOGIN_USERNAME, TEST_LOGIN_PASSWORD,
tokenName, Arrays.asList("api", "sudo")); 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) {} } catch (Exception ignore) {}
} }
...@@ -107,14 +107,14 @@ public class TestAccessTokenUtils { ...@@ -107,14 +107,14 @@ public class TestAccessTokenUtils {
String accessToken = AccessTokenUtils.createPersonalAccessToken( String accessToken = AccessTokenUtils.createPersonalAccessToken(
TEST_HOST_URL, TEST_LOGIN_USERNAME, TEST_LOGIN_PASSWORD, TEST_HOST_URL, TEST_LOGIN_USERNAME, TEST_LOGIN_PASSWORD,
tokenName, Arrays.asList("api", "sudo")); 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); assertNotNull(accessToken);
assertFalse(accessToken.trim().isEmpty()); assertFalse(accessToken.trim().isEmpty());
AccessTokenUtils.revokePersonalAccessToken( AccessTokenUtils.revokePersonalAccessToken(
TEST_HOST_URL, TEST_LOGIN_USERNAME, TEST_LOGIN_PASSWORD, TEST_HOST_URL, TEST_LOGIN_USERNAME, TEST_LOGIN_PASSWORD,
tokenName, Arrays.asList("api", "sudo")); 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 @Test
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment