From 61e6411502f75b71704040dfd17eb39d072c63bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Bresson?= Date: Thu, 16 May 2024 15:14:31 +0200 Subject: [PATCH] Add "expires_at" to the rotate access token methods (#1124) --- src/main/java/org/gitlab4j/api/GroupApi.java | 24 +++++++++++++++++-- .../java/org/gitlab4j/api/ProjectApi.java | 20 +++++++++++++++- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/gitlab4j/api/GroupApi.java b/src/main/java/org/gitlab4j/api/GroupApi.java index 2494e18f..57d87aad 100644 --- a/src/main/java/org/gitlab4j/api/GroupApi.java +++ b/src/main/java/org/gitlab4j/api/GroupApi.java @@ -2121,7 +2121,7 @@ public class GroupApi extends AbstractApi { GitLabApiForm formData = new GitLabApiForm() .withParam("name", name, true) .withParam("scopes", Arrays.asList(scopes)) - .withParam("expires_at", expiresAt) + .withParam("expires_at", ISO8601.dateOnly(expiresAt)) .withParam("access_level", accessLevel); Response response = post(Response.Status.CREATED, formData, "groups", getGroupIdOrPath(groupIdOrPath), "access_tokens"); @@ -2139,10 +2139,30 @@ public class GroupApi extends AbstractApi { * @throws GitLabApiException if any exception occurs */ public GroupAccessToken rotateGroupAccessToken(Object groupIdOrPath, Long tokenId) throws GitLabApiException { - Response response = post(Response.Status.OK, (Form)null, "groups", getGroupIdOrPath(groupIdOrPath), "access_tokens", tokenId, "rotate"); + return rotateGroupAccessToken(groupIdOrPath, tokenId, null); + } + + + /** + * Rotate a group access token. Revokes the previous token and creates a new token that expires in one week. + * + *
GitLab Endpoint: POST /groups/:id/access_tokens/:token_id/rotate
+ * + * @param groupIdOrPath the group in the form of an Long(ID), String(path), or Group instance + * @param tokenId ID of the group access token + * @param expiresAt Expiration date of the access token + * @return the updated GroupAccessToken instance + * @throws GitLabApiException if any exception occurs + */ + public GroupAccessToken rotateGroupAccessToken(Object groupIdOrPath, Long tokenId, Date expiresAt) throws GitLabApiException { + GitLabApiForm formData = new GitLabApiForm() + .withParam("expires_at", ISO8601.dateOnly(expiresAt)); + + Response response = post(Response.Status.OK, formData, "groups", getGroupIdOrPath(groupIdOrPath), "access_tokens", tokenId, "rotate"); return (response.readEntity(GroupAccessToken.class)); } + /** * Revoke a group access token. * diff --git a/src/main/java/org/gitlab4j/api/ProjectApi.java b/src/main/java/org/gitlab4j/api/ProjectApi.java index 6fc7a24d..bf27db63 100644 --- a/src/main/java/org/gitlab4j/api/ProjectApi.java +++ b/src/main/java/org/gitlab4j/api/ProjectApi.java @@ -4024,7 +4024,25 @@ public class ProjectApi extends AbstractApi implements Constants { * @throws GitLabApiException if any exception occurs */ public ProjectAccessToken rotateProjectAccessToken(Object projectIdOrPath, Long tokenId) throws GitLabApiException { - Response response = post(Response.Status.OK, (Object) null, "projects", getProjectIdOrPath(projectIdOrPath), "access_tokens", tokenId, "rotate"); + return rotateProjectAccessToken(projectIdOrPath, tokenId, null); + } + + /** + * Rotates the given project access token. + * The token is revoked and a new one which will expire in one week is created to replace it. + * Only working with GitLab 16.0 and above. + * + * @param projectIdOrPath the project in the form of a Long(ID), String(path), or Project instance + * @param tokenId the id + * @param expiresAt Expiration date of the access token + * @return the newly created ProjectAccessToken. + * @throws GitLabApiException if any exception occurs + */ + public ProjectAccessToken rotateProjectAccessToken(Object projectIdOrPath, Long tokenId, Date expiresAt) throws GitLabApiException { + GitLabApiForm formData = new GitLabApiForm() + .withParam("expires_at", ISO8601.dateOnly(expiresAt)); + + Response response = post(Response.Status.OK, formData, "projects", getProjectIdOrPath(projectIdOrPath), "access_tokens", tokenId, "rotate"); return (response.readEntity(ProjectAccessToken.class)); } -- GitLab