From a9d02e89f706f6ed9a61355433a46bb6927c298d Mon Sep 17 00:00:00 2001 From: Jeremie Bresson Date: Fri, 7 Mar 2025 15:18:06 +0100 Subject: [PATCH 1/5] ApplicationsApi improvements --- .../org/gitlab4j/api/ApplicationsApi.java | 25 +++++++++- .../org/gitlab4j/api/models/Application.java | 18 +++++++ .../java/org/gitlab4j/models/Constants.java | 47 +++++++++++++++---- .../org/gitlab4j/models/applications.json | 5 +- 4 files changed, 84 insertions(+), 11 deletions(-) diff --git a/gitlab4j-api/src/main/java/org/gitlab4j/api/ApplicationsApi.java b/gitlab4j-api/src/main/java/org/gitlab4j/api/ApplicationsApi.java index fc4e58c3e..557047e18 100644 --- a/gitlab4j-api/src/main/java/org/gitlab4j/api/ApplicationsApi.java +++ b/gitlab4j-api/src/main/java/org/gitlab4j/api/ApplicationsApi.java @@ -83,7 +83,9 @@ public Stream getApplicationsStream() throws GitLabApiException { * @param scopes the scopes of the application (api, read_user, sudo, read_repository, openid, profile, email) * @return the created Application instance * @throws GitLabApiException if any exception occurs + * @deprecated use {@link #createApplication(String, String, List, Boolean)} instead */ + @Deprecated public Application createApplication(String name, String redirectUri, ApplicationScope[] scopes) throws GitLabApiException { @@ -104,9 +106,29 @@ public Application createApplication(String name, String redirectUri, Applicatio * @param scopes the scopes of the application (api, read_user, sudo, read_repository, openid, profile, email) * @return the created Application instance * @throws GitLabApiException if any exception occurs + * @deprecated use {@link #createApplication(String, String, List, Boolean)} instead */ + @Deprecated public Application createApplication(String name, String redirectUri, List scopes) throws GitLabApiException { + return createApplication(name, redirectUri, scopes, null); + } + + /** + * Create an OAUTH Application. + * + *
GitLab Endpoint: POST /api/v4/applications
+ * + * @param name the name for the OAUTH Application + * @param redirectUri the redirect URI for the OAUTH Application + * @param scopes the scopes of the application (api, read_user, sudo, read_repository, openid, profile, email) + * @param confidential The application is used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential + * @return the created Application instance + * @throws GitLabApiException if any exception occurs + */ + public Application createApplication( + String name, String redirectUri, List scopes, Boolean confidential) + throws GitLabApiException { if (scopes == null || scopes.isEmpty()) { throw new GitLabApiException("scopes cannot be null or empty"); @@ -116,7 +138,8 @@ public Application createApplication(String name, String redirectUri, List enumHelper = diff --git a/gitlab4j-models/src/test/resources/org/gitlab4j/models/applications.json b/gitlab4j-models/src/test/resources/org/gitlab4j/models/applications.json index fd48cbdea..47a1e6498 100644 --- a/gitlab4j-models/src/test/resources/org/gitlab4j/models/applications.json +++ b/gitlab4j-models/src/test/resources/org/gitlab4j/models/applications.json @@ -3,6 +3,9 @@ "id": 1, "application_id": "5832fc6e14300a0d962240a8144466eef4ee93ef0d218477e55f11cf12fc3737", "application_name": "MyApplication", - "callback_url": "http://redirect.uri" + "secret": "ee1dd64b6adc89cf7e2c23099301ccc2c61b441064e9324d963c46902a85ec34" + "callback_url": "http://redirect.uri", + "confidential": true, + "secret": "gloas-0f5cf43dab1a677cd9071743947e54468403c53056c15ba5e3724cf2b7ca17a0" } ] \ No newline at end of file From e53951b6914e0b81dd71908ffeb55ac83dd81a99 Mon Sep 17 00:00:00 2001 From: Jeremie Bresson Date: Fri, 7 Mar 2025 15:21:00 +0100 Subject: [PATCH 2/5] Fix test case --- .../src/test/resources/org/gitlab4j/models/applications.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/gitlab4j-models/src/test/resources/org/gitlab4j/models/applications.json b/gitlab4j-models/src/test/resources/org/gitlab4j/models/applications.json index 47a1e6498..9ecf58d0c 100644 --- a/gitlab4j-models/src/test/resources/org/gitlab4j/models/applications.json +++ b/gitlab4j-models/src/test/resources/org/gitlab4j/models/applications.json @@ -3,9 +3,8 @@ "id": 1, "application_id": "5832fc6e14300a0d962240a8144466eef4ee93ef0d218477e55f11cf12fc3737", "application_name": "MyApplication", - "secret": "ee1dd64b6adc89cf7e2c23099301ccc2c61b441064e9324d963c46902a85ec34" + "secret": "ee1dd64b6adc89cf7e2c23099301ccc2c61b441064e9324d963c46902a85ec34", "callback_url": "http://redirect.uri", - "confidential": true, - "secret": "gloas-0f5cf43dab1a677cd9071743947e54468403c53056c15ba5e3724cf2b7ca17a0" + "confidential": true } ] \ No newline at end of file From 4a84a165ba0553f1993ae2cd1330b61c11d70bf4 Mon Sep 17 00:00:00 2001 From: Jeremie Bresson Date: Fri, 7 Mar 2025 15:55:55 +0100 Subject: [PATCH 3/5] Add renewSecret --- .../java/org/gitlab4j/api/ApplicationsApi.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/gitlab4j-api/src/main/java/org/gitlab4j/api/ApplicationsApi.java b/gitlab4j-api/src/main/java/org/gitlab4j/api/ApplicationsApi.java index 557047e18..99ea90d23 100644 --- a/gitlab4j-api/src/main/java/org/gitlab4j/api/ApplicationsApi.java +++ b/gitlab4j-api/src/main/java/org/gitlab4j/api/ApplicationsApi.java @@ -5,6 +5,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +import jakarta.ws.rs.core.Form; import jakarta.ws.rs.core.GenericType; import jakarta.ws.rs.core.Response; @@ -155,4 +156,18 @@ public Application createApplication( public void deleteApplication(Long applicationId) throws GitLabApiException { delete(Response.Status.NO_CONTENT, null, "applications", applicationId); } + + /** + * Renews an application secret. + * + *
GitLab Endpoint: POST /applications/:id/renew-secret
+ * + * @param applicationId the ID of the OUAUTH Application to renew + * @return the updated Application instance + * @throws GitLabApiException if any exception occurs + */ + public Application renewSecret(Long applicationId) throws GitLabApiException { + Response response = post(Response.Status.CREATED, (Form) null, "applications", applicationId, "renew-secret"); + return (response.readEntity(Application.class)); + } } From dc67190a19c48d7fffce2cb0f7d7ff4a48911088 Mon Sep 17 00:00:00 2001 From: Jeremie Bresson Date: Fri, 7 Mar 2025 16:05:00 +0100 Subject: [PATCH 4/5] Add missing toString() --- .../src/main/java/org/gitlab4j/api/models/Application.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/gitlab4j-models/src/main/java/org/gitlab4j/api/models/Application.java b/gitlab4j-models/src/main/java/org/gitlab4j/api/models/Application.java index 738c62d90..580710add 100644 --- a/gitlab4j-models/src/main/java/org/gitlab4j/api/models/Application.java +++ b/gitlab4j-models/src/main/java/org/gitlab4j/api/models/Application.java @@ -2,6 +2,8 @@ import java.io.Serializable; +import org.gitlab4j.models.utils.JacksonJson; + public class Application implements Serializable { private static final long serialVersionUID = 1L; @@ -59,4 +61,9 @@ public String getSecret() { public void setSecret(String secret) { this.secret = secret; } + + @Override + public String toString() { + return (JacksonJson.toJsonString(this)); + } } From aac48f1764671d64dd6917d2baaaea41e5750e2d Mon Sep 17 00:00:00 2001 From: Jeremie Bresson Date: Fri, 7 Mar 2025 16:36:39 +0100 Subject: [PATCH 5/5] Fix the way scopes are joined --- .../src/main/java/org/gitlab4j/api/ApplicationsApi.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gitlab4j-api/src/main/java/org/gitlab4j/api/ApplicationsApi.java b/gitlab4j-api/src/main/java/org/gitlab4j/api/ApplicationsApi.java index 99ea90d23..873152494 100644 --- a/gitlab4j-api/src/main/java/org/gitlab4j/api/ApplicationsApi.java +++ b/gitlab4j-api/src/main/java/org/gitlab4j/api/ApplicationsApi.java @@ -135,7 +135,7 @@ public Application createApplication( throw new GitLabApiException("scopes cannot be null or empty"); } - String scopesString = scopes.stream().map(ApplicationScope::toString).collect(Collectors.joining(",")); + String scopesString = scopes.stream().map(ApplicationScope::toString).collect(Collectors.joining(" ")); GitLabApiForm formData = new GitLabApiForm() .withParam("name", name, true) .withParam("redirect_uri", redirectUri, true)