diff --git a/src/main/java/org/gitlab4j/api/GitLabApi.java b/src/main/java/org/gitlab4j/api/GitLabApi.java index 772759f066fa598a4492ba41bc16a5544ad5650c..d2f9274a24da6dad0a6b9a8262f0bf21701bfd9d 100644 --- a/src/main/java/org/gitlab4j/api/GitLabApi.java +++ b/src/main/java/org/gitlab4j/api/GitLabApi.java @@ -96,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. @@ -1683,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 0000000000000000000000000000000000000000..29265ff811c158eff04a4ce2164bc42e75d609be --- /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); + } +}