From 57889a34953792ea002f4c0cd0e1c2e71afc128b Mon Sep 17 00:00:00 2001 From: Flemming Frandsen Date: Wed, 9 Mar 2022 08:44:11 +0100 Subject: [PATCH] Implemented the keys api --- src/main/java/org/gitlab4j/api/GitLabApi.java | 25 ++++++++++++++++ src/main/java/org/gitlab4j/api/KeysApi.java | 30 +++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 src/main/java/org/gitlab4j/api/KeysApi.java diff --git a/src/main/java/org/gitlab4j/api/GitLabApi.java b/src/main/java/org/gitlab4j/api/GitLabApi.java index aa19398f..d2f9274a 100644 --- a/src/main/java/org/gitlab4j/api/GitLabApi.java +++ b/src/main/java/org/gitlab4j/api/GitLabApi.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.WeakHashMap; +import java.util.function.Supplier; import java.util.logging.Level; import java.util.logging.Logger; @@ -95,6 +96,7 @@ public class GitLabApi implements AutoCloseable { private TodosApi todosApi; private UserApi userApi; private WikisApi wikisApi; + private KeysApi keysApi; /** * Get the GitLab4J shared Logger instance. @@ -711,6 +713,14 @@ public class GitLabApi implements AutoCloseable { return (apiClient.getAuthToken()); } + /** + * Set auth token supplier for gitlab api client. + * @param authTokenSupplier - supplier which provide actual auth token + */ + public void setAuthTokenSupplier(Supplier authTokenSupplier) { + apiClient.setAuthTokenSupplier(authTokenSupplier); + } + /** * Get the secret token. * @@ -1674,6 +1684,21 @@ public class GitLabApi implements AutoCloseable { return wikisApi; } + /** + * Gets the KeysApi instance owned by this GitLabApi instance. The KeysApi is used to look up users by their ssh key signatures + * + * @return the KeysApi instance owned by this GitLabApi instance + */ + public KeysApi getKeysAPI() { + synchronized (this) { + if (keysApi == null) { + keysApi = new KeysApi(this); + } + } + return keysApi; + } + + /** * Create and return an Optional instance associated with a GitLabApiException. * diff --git a/src/main/java/org/gitlab4j/api/KeysApi.java b/src/main/java/org/gitlab4j/api/KeysApi.java new file mode 100644 index 00000000..29265ff8 --- /dev/null +++ b/src/main/java/org/gitlab4j/api/KeysApi.java @@ -0,0 +1,30 @@ +package org.gitlab4j.api; + +import org.gitlab4j.api.models.Key; + +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.core.Response; +import java.util.Collections; + +/** + * See: + * https://docs.gitlab.com/ee/api/keys.html#get-user-by-fingerprint-of-ssh-key + */ +public class KeysApi extends AbstractApi { + public KeysApi(GitLabApi gitLabApi) { + super(gitLabApi); + } + + /** + * @param fingerprint The md5 hash of a ssh public key with : separating the bytes Or SHA256:$base64hash + * @return The Key which includes the user who owns the key + * @throws GitLabApiException If anything goes wrong + */ + public Key getUserBySSHKeyFingerprint(String fingerprint) throws GitLabApiException { + MultivaluedMap queryParams = new MultivaluedHashMap<>(); + queryParams.put("fingerprint", Collections.singletonList(fingerprint)); + Response response = get(Response.Status.OK, queryParams, "keys"); + return response.readEntity(Key.class); + } +} -- GitLab