From 56e3791ee8f671c8cc63d6da5e4ba015d704cc6e Mon Sep 17 00:00:00 2001 From: Austin Witt Date: Wed, 27 Mar 2019 14:42:47 -0500 Subject: [PATCH] Added getUserPublicOrganizations method to get public organization memberships for any user, not just the authenticated user --- src/main/java/org/kohsuke/github/GitHub.java | 69 +++++++++++++++----- 1 file changed, 53 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/kohsuke/github/GitHub.java b/src/main/java/org/kohsuke/github/GitHub.java index d5d0a2be33..18d697ddc1 100644 --- a/src/main/java/org/kohsuke/github/GitHub.java +++ b/src/main/java/org/kohsuke/github/GitHub.java @@ -23,17 +23,12 @@ */ package org.kohsuke.github; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.MapperFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.introspect.VisibilityChecker.Std; -import com.infradna.tool.bridge_method_injector.WithBridgeMethods; -import org.apache.commons.codec.Charsets; -import org.apache.commons.codec.binary.Base64; -import org.apache.commons.io.IOUtils; +import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.ANY; +import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE; +import static java.net.HttpURLConnection.HTTP_UNAUTHORIZED; +import static java.util.logging.Level.FINE; +import static org.kohsuke.github.Previews.DRAX; -import javax.annotation.CheckForNull; -import javax.annotation.Nonnull; import java.io.ByteArrayInputStream; import java.io.FileNotFoundException; import java.io.IOException; @@ -57,10 +52,18 @@ import java.util.concurrent.ConcurrentMap; import java.util.logging.Logger; -import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.*; -import static java.net.HttpURLConnection.*; -import static java.util.logging.Level.*; -import static org.kohsuke.github.Previews.*; +import javax.annotation.CheckForNull; +import javax.annotation.Nonnull; + +import org.apache.commons.codec.Charsets; +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.io.IOUtils; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.MapperFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.introspect.VisibilityChecker.Std; +import com.infradna.tool.bridge_method_injector.WithBridgeMethods; /** * Root of the GitHub API. @@ -172,6 +175,7 @@ public static GitHub connect() throws IOException { * @deprecated * Use {@link #connectToEnterpriseWithOAuth(String, String, String)} */ + @Deprecated public static GitHub connectToEnterprise(String apiUrl, String oauthAccessToken) throws IOException { return connectToEnterpriseWithOAuth(apiUrl,null,oauthAccessToken); } @@ -194,6 +198,7 @@ public static GitHub connectToEnterpriseWithOAuth(String apiUrl, String login, S * @deprecated * Use with caution. Login with password is not a preferred method. */ + @Deprecated public static GitHub connectToEnterprise(String apiUrl, String login, String password) throws IOException { return new GitHubBuilder().withEndpoint(apiUrl).withPassword(login, password).build(); } @@ -207,6 +212,7 @@ public static GitHub connect(String login, String oauthAccessToken) throws IOExc * Either OAuth token or password is sufficient, so there's no point in passing both. * Use {@link #connectUsingPassword(String, String)} or {@link #connectUsingOAuth(String)}. */ + @Deprecated public static GitHub connect(String login, String oauthAccessToken, String password) throws IOException { return new GitHubBuilder().withOAuthToken(oauthAccessToken, login).withPassword(login, password).build(); } @@ -380,7 +386,7 @@ public GHMyself getMyself() throws IOException { requireCredential(); synchronized (this) { if (this.myself != null) return myself; - + GHMyself u = retrieve().to("/user", GHMyself.class); u.root = this; @@ -402,7 +408,7 @@ public GHUser getUser(String login) throws IOException { return u; } - + /** * clears all cached data in order for external changes (modifications and del */ @@ -486,6 +492,7 @@ public GHRepository getRepository(String name) throws IOException { @Preview @Deprecated public PagedIterable listLicenses() throws IOException { return new PagedIterable() { + @Override public PagedIterator _iterator(int pageSize) { return new PagedIterator(retrieve().withPreview(DRAX).asIterator("/licenses", GHLicense[].class, pageSize)) { @Override @@ -503,6 +510,7 @@ protected void wrapUp(GHLicense[] page) { */ public PagedIterable listUsers() throws IOException { return new PagedIterable() { + @Override public PagedIterator _iterator(int pageSize) { return new PagedIterator(retrieve().asIterator("/users", GHUser[].class, pageSize)) { @Override @@ -556,6 +564,33 @@ public Map getMyOrganizations() throws IOException { return r; } + /** + * Alias for {@link #getUserPublicOrganizations(String)}. + */ + public Map getUserPublicOrganizations(GHUser user) throws IOException { + return getUserPublicOrganizations( user.getLogin() ); + } + + /** + * This method returns a shallowly populated organizations. + * + * To retrieve full organization details, you need to call {@link #getOrganization(String)} + * TODO: make this automatic. + * + * @param user the user to retrieve public Organization membership information for + * + * @return the public Organization memberships for the user + */ + public Map getUserPublicOrganizations(String login) throws IOException { + GHOrganization[] orgs = retrieve().to("/users/" + login + "/orgs", GHOrganization[].class); + Map r = new HashMap(); + for (GHOrganization o : orgs) { + // don't put 'o' into orgs because they are shallow + r.put(o.getLogin(),o.wrapUp(this)); + } + return r; + } + /** * Gets complete map of organizations/teams that current user belongs to. * @@ -620,6 +655,7 @@ public T parseEventPayload(Reader r, Class type) t * @deprecated * Use {@link #createRepository(String)} that uses a builder pattern to let you control every aspect. */ + @Deprecated public GHRepository createRepository(String name, String description, String homepage, boolean isPublic) throws IOException { return createRepository(name).description(description).homepage(homepage).private_(!isPublic).create(); } @@ -855,6 +891,7 @@ public PagedIterable listAllPublicRepositories() { */ public PagedIterable listAllPublicRepositories(final String since) { return new PagedIterable() { + @Override public PagedIterator _iterator(int pageSize) { return new PagedIterator(retrieve().with("since",since).asIterator("/repositories", GHRepository[].class, pageSize)) { @Override