From c4de972c5373a15a5ece5fe6bfcba282b5109611 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Tue, 16 Apr 2013 12:30:34 -0700 Subject: [PATCH 01/13] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 42b509a4c6..3ffdc40562 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ github-api - 1.40 + 1.41-SNAPSHOT GitHub API for Java http://github-api.kohsuke.org/ GitHub API for Java From e6c82e200335eeb9b8051c288803a8b09be73d53 Mon Sep 17 00:00:00 2001 From: watsonian Date: Fri, 19 Apr 2013 16:27:09 -0700 Subject: [PATCH 02/13] Stop using deprecated API tokens for Enterprise. Authentication by API token is deprecated and doesn't work anymore. Instead, authentication should be done via OAuth token now. --- src/main/java/org/kohsuke/github/GitHub.java | 4 ++-- src/test/java/org/kohsuke/github/GitHubTest.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/kohsuke/github/GitHub.java b/src/main/java/org/kohsuke/github/GitHub.java index 6c7999492b..f43873c56a 100644 --- a/src/main/java/org/kohsuke/github/GitHub.java +++ b/src/main/java/org/kohsuke/github/GitHub.java @@ -132,8 +132,8 @@ public static GitHub connect() throws IOException { * "http://ghe.acme.com/api/v3". Note that GitHub Enterprise has /api/v3 in the URL. * For historical reasons, this parameter still accepts the bare domain name, but that's considered deprecated. */ - public static GitHub connectToEnterprise(String apiUrl, String login, String apiToken) { - return new GitHub(apiUrl,login,apiToken,null); + public static GitHub connectToEnterprise(String apiUrl, String accessToken) { + return connectUsingOAuth(apiUrl, accessToken); } public static GitHub connect(String login, String apiToken){ diff --git a/src/test/java/org/kohsuke/github/GitHubTest.java b/src/test/java/org/kohsuke/github/GitHubTest.java index 8fbca796b3..4b0d9fa29f 100644 --- a/src/test/java/org/kohsuke/github/GitHubTest.java +++ b/src/test/java/org/kohsuke/github/GitHubTest.java @@ -8,12 +8,12 @@ public class GitHubTest extends TestCase { public void testGitHubServerWithHttp() throws Exception { - GitHub hub = GitHub.connectToEnterprise("http://enterprise.kohsuke.org/api/v3", "kohsuke", "token"); + GitHub hub = GitHub.connectToEnterprise("http://enterprise.kohsuke.org/api/v3", "token"); assertEquals("http://enterprise.kohsuke.org/api/v3/test", hub.getApiURL("/test").toString()); } public void testGitHubServerWithHttps() throws Exception { - GitHub hub = GitHub.connectToEnterprise("https://enterprise.kohsuke.org/api/v3", "kohsuke", "token"); + GitHub hub = GitHub.connectToEnterprise("https://enterprise.kohsuke.org/api/v3", "token"); assertEquals("https://enterprise.kohsuke.org/api/v3/test", hub.getApiURL("/test").toString()); } From 8442e7e326a0c57a4611b25687659fd630622a94 Mon Sep 17 00:00:00 2001 From: watsonian Date: Fri, 19 Apr 2013 17:10:29 -0700 Subject: [PATCH 03/13] Declare the exception type. --- src/main/java/org/kohsuke/github/GitHub.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/kohsuke/github/GitHub.java b/src/main/java/org/kohsuke/github/GitHub.java index f43873c56a..c151e790fe 100644 --- a/src/main/java/org/kohsuke/github/GitHub.java +++ b/src/main/java/org/kohsuke/github/GitHub.java @@ -132,7 +132,7 @@ public static GitHub connect() throws IOException { * "http://ghe.acme.com/api/v3". Note that GitHub Enterprise has /api/v3 in the URL. * For historical reasons, this parameter still accepts the bare domain name, but that's considered deprecated. */ - public static GitHub connectToEnterprise(String apiUrl, String accessToken) { + public static GitHub connectToEnterprise(String apiUrl, String accessToken) throws IOException { return connectUsingOAuth(apiUrl, accessToken); } From e38eeae533f627c1a448466819fdfb7ad91082d9 Mon Sep 17 00:00:00 2001 From: watsonian Date: Sat, 20 Apr 2013 11:43:54 -0700 Subject: [PATCH 04/13] Update constructor to use OAuth tokens rather than API tokens. --- src/main/java/org/kohsuke/github/GitHub.java | 28 ++++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/kohsuke/github/GitHub.java b/src/main/java/org/kohsuke/github/GitHub.java index c151e790fe..442037f4ba 100644 --- a/src/main/java/org/kohsuke/github/GitHub.java +++ b/src/main/java/org/kohsuke/github/GitHub.java @@ -66,7 +66,7 @@ public class GitHub { private final Map users = new HashMap(); private final Map orgs = new HashMap(); /*package*/ String oauthAccessToken; - + private final String apiUrl; private GitHub(String login, String apiToken, String password) { @@ -81,14 +81,14 @@ private GitHub(String login, String apiToken, String password) { * For historical reasons, this parameter still accepts the bare domain name, but that's considered deprecated. * Password is also considered deprecated as it is no longer required for api usage. */ - private GitHub(String apiUrl, String login, String apiToken, String password) { + private GitHub(String apiUrl, String login, String oauthAccessToken, String password) { if (apiUrl.endsWith("/")) apiUrl = apiUrl.substring(0, apiUrl.length()-1); // normalize this.apiUrl = apiUrl; - this.login = login; - this.apiToken = apiToken; + this.login = login; + this.oauthAccessToken = oauthAccessToken; - if (apiToken!=null || password!=null) { - String authorization = password==null ? (login + "/token" + ":" + apiToken) : (login + ':'+password); + if (password!=null) { + String authorization = (login + ':' + password); encodedAuthorization = new String(Base64.encodeBase64(authorization.getBytes())); } else encodedAuthorization = null; @@ -97,14 +97,14 @@ private GitHub(String apiUrl, String login, String apiToken, String password) { private GitHub (String apiUrl, String oauthAccessToken) throws IOException { if (apiUrl.endsWith("/")) apiUrl = apiUrl.substring(0, apiUrl.length()-1); // normalize this.apiUrl = apiUrl; - this.encodedAuthorization = null; - - this.oauthAccessToken = oauthAccessToken; + this.encodedAuthorization = null; + + this.oauthAccessToken = oauthAccessToken; this.apiToken = oauthAccessToken; - - this.login = getMyself().getLogin(); + + this.login = getMyself().getLogin(); } - + /** * Obtains the credential from "~/.github" */ @@ -147,7 +147,7 @@ public static GitHub connect(String login, String apiToken, String password){ public static GitHub connectUsingOAuth (String accessToken) throws IOException { return connectUsingOAuth("github.com", accessToken); } - + public static GitHub connectUsingOAuth (String githubServer, String accessToken) throws IOException { return new GitHub(githubServer, accessToken); } @@ -292,7 +292,7 @@ public T parseEventPayload(Reader r, Class type) t t.wrapUp(this); return t; } - + /** * Creates a new repository. * From da1405a060d968ed140a2e551e84bc59c2ec0585 Mon Sep 17 00:00:00 2001 From: watsonian Date: Sat, 20 Apr 2013 11:58:52 -0700 Subject: [PATCH 05/13] Remove apiToken completely. --- src/main/java/org/kohsuke/github/GitHub.java | 40 ++++++++++---------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/src/main/java/org/kohsuke/github/GitHub.java b/src/main/java/org/kohsuke/github/GitHub.java index 442037f4ba..430f998fd5 100644 --- a/src/main/java/org/kohsuke/github/GitHub.java +++ b/src/main/java/org/kohsuke/github/GitHub.java @@ -61,17 +61,16 @@ public class GitHub { /*package*/ final String encodedAuthorization; - /*package*/ final String apiToken; private final Map users = new HashMap(); private final Map orgs = new HashMap(); - /*package*/ String oauthAccessToken; + /*package*/ String oauthAccessToken; - private final String apiUrl; + private final String apiUrl; - private GitHub(String login, String apiToken, String password) { - this (GITHUB_URL, login, apiToken, password); - } + private GitHub(String login, String oauthAccessToken, String password) { + this (GITHUB_URL, login, oauthAccessToken, password); + } /** * @@ -100,7 +99,6 @@ private GitHub (String apiUrl, String oauthAccessToken) throws IOException { this.encodedAuthorization = null; this.oauthAccessToken = oauthAccessToken; - this.apiToken = oauthAccessToken; this.login = getMyself().getLogin(); } @@ -132,24 +130,24 @@ public static GitHub connect() throws IOException { * "http://ghe.acme.com/api/v3". Note that GitHub Enterprise has /api/v3 in the URL. * For historical reasons, this parameter still accepts the bare domain name, but that's considered deprecated. */ - public static GitHub connectToEnterprise(String apiUrl, String accessToken) throws IOException { - return connectUsingOAuth(apiUrl, accessToken); + public static GitHub connectToEnterprise(String apiUrl, String oauthAccessToken) throws IOException { + return connectUsingOAuth(apiUrl, oauthAccessToken); } - public static GitHub connect(String login, String apiToken){ - return new GitHub(login,apiToken,null); + public static GitHub connect(String login, String oauthAccessToken){ + return new GitHub(login,oauthAccessToken,null); } - public static GitHub connect(String login, String apiToken, String password){ - return new GitHub(login,apiToken,password); + public static GitHub connect(String login, String oauthAccessToken, String password){ + return new GitHub(login,oauthAccessToken,password); } - public static GitHub connectUsingOAuth (String accessToken) throws IOException { - return connectUsingOAuth("github.com", accessToken); + public static GitHub connectUsingOAuth (String oauthAccessToken) throws IOException { + return connectUsingOAuth("github.com", oauthAccessToken); } - public static GitHub connectUsingOAuth (String githubServer, String accessToken) throws IOException { - return new GitHub(githubServer, accessToken); + public static GitHub connectUsingOAuth (String githubServer, String oauthAccessToken) throws IOException { + return new GitHub(githubServer, oauthAccessToken); } /** * Connects to GitHub anonymously. @@ -166,10 +164,10 @@ public static GitHub connectAnonymously() { } /*package*/ URL getApiURL(String tailApiUrl) throws IOException { - if (oauthAccessToken != null) { - // append the access token - tailApiUrl = tailApiUrl + (tailApiUrl.indexOf('?')>=0 ?'&':'?') + "access_token=" + oauthAccessToken; - } + if (oauthAccessToken != null) { + // append the access token + tailApiUrl = tailApiUrl + (tailApiUrl.indexOf('?')>=0 ?'&':'?') + "access_token=" + oauthAccessToken; + } if (tailApiUrl.startsWith("/")) { if ("github.com".equals(apiUrl)) {// backward compatibility From beec605e2c7b9722f84554848ae6b3271da42d16 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Tue, 23 Apr 2013 09:28:00 -0700 Subject: [PATCH 06/13] [FIXED issue #34] API route for pull requests uses 'pulls' --- src/main/java/org/kohsuke/github/GHIssue.java | 2 +- src/main/java/org/kohsuke/github/GHPullRequest.java | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/kohsuke/github/GHIssue.java b/src/main/java/org/kohsuke/github/GHIssue.java index 74cb7fedd1..6cf376df19 100644 --- a/src/main/java/org/kohsuke/github/GHIssue.java +++ b/src/main/java/org/kohsuke/github/GHIssue.java @@ -200,7 +200,7 @@ protected void wrapUp(GHIssueComment[] page) { }; } - private String getApiRoute() { + protected String getApiRoute() { return "/repos/"+owner.getOwnerName()+"/"+owner.getName()+"/issues/"+number; } diff --git a/src/main/java/org/kohsuke/github/GHPullRequest.java b/src/main/java/org/kohsuke/github/GHPullRequest.java index 32523005e2..7adaa9342e 100644 --- a/src/main/java/org/kohsuke/github/GHPullRequest.java +++ b/src/main/java/org/kohsuke/github/GHPullRequest.java @@ -63,7 +63,12 @@ GHPullRequest wrapUp(GitHub root) { if (merged_by != null) merged_by.wrapUp(root); return this; } - + + @Override + protected String getApiRoute() { + return "/repos/"+owner.getOwnerName()+"/"+owner.getName()+"/pulls/"+number; + } + /** * The URL of the patch file. * like https://github.com/jenkinsci/jenkins/pull/100.patch From c6fafe453f36206894550ac19e81062ae1c997e2 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Tue, 23 Apr 2013 10:04:20 -0700 Subject: [PATCH 07/13] Cleaned up the authentication part of the code --- src/main/java/org/kohsuke/github/GitHub.java | 81 ++++++++++--------- .../java/org/kohsuke/github/Requester.java | 5 +- .../java/org/kohsuke/github/GitHubTest.java | 6 +- 3 files changed, 49 insertions(+), 43 deletions(-) diff --git a/src/main/java/org/kohsuke/github/GitHub.java b/src/main/java/org/kohsuke/github/GitHub.java index 430f998fd5..a67a7c5567 100644 --- a/src/main/java/org/kohsuke/github/GitHub.java +++ b/src/main/java/org/kohsuke/github/GitHub.java @@ -42,11 +42,9 @@ import java.util.Collection; import java.util.Date; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Properties; -import java.util.Set; import java.util.TimeZone; import static org.codehaus.jackson.annotate.JsonAutoDetect.Visibility.*; @@ -59,16 +57,20 @@ public class GitHub { /*package*/ final String login; - + /** + * Value of the authorization header to be sent with the request. + */ /*package*/ final String encodedAuthorization; private final Map users = new HashMap(); private final Map orgs = new HashMap(); - /*package*/ String oauthAccessToken; private final String apiUrl; - private GitHub(String login, String oauthAccessToken, String password) { + /** + * Connects to GitHub.com + */ + private GitHub(String login, String oauthAccessToken, String password) throws IOException { this (GITHUB_URL, login, oauthAccessToken, password); } @@ -80,27 +82,24 @@ private GitHub(String login, String oauthAccessToken, String password) { * For historical reasons, this parameter still accepts the bare domain name, but that's considered deprecated. * Password is also considered deprecated as it is no longer required for api usage. */ - private GitHub(String apiUrl, String login, String oauthAccessToken, String password) { - if (apiUrl.endsWith("/")) apiUrl = apiUrl.substring(0, apiUrl.length()-1); // normalize - this.apiUrl = apiUrl; - this.login = login; - this.oauthAccessToken = oauthAccessToken; - - if (password!=null) { - String authorization = (login + ':' + password); - encodedAuthorization = new String(Base64.encodeBase64(authorization.getBytes())); - } else - encodedAuthorization = null; - } - - private GitHub (String apiUrl, String oauthAccessToken) throws IOException { + private GitHub(String apiUrl, String login, String oauthAccessToken, String password) throws IOException { if (apiUrl.endsWith("/")) apiUrl = apiUrl.substring(0, apiUrl.length()-1); // normalize this.apiUrl = apiUrl; - this.encodedAuthorization = null; - this.oauthAccessToken = oauthAccessToken; + if (oauthAccessToken!=null) { + encodedAuthorization = "token "+oauthAccessToken; + } else { + if (password!=null) { + String authorization = (login + ':' + password); + encodedAuthorization = "Basic "+new String(Base64.encodeBase64(authorization.getBytes())); + } else {// anonymous access + encodedAuthorization = null; + } + } - this.login = getMyself().getLogin(); + if (login==null) + login = getMyself().getLogin(); + this.login = login; } /** @@ -117,7 +116,7 @@ public static GitHub connect() throws IOException { } String oauth = props.getProperty("oauth"); if (oauth!=null) - return new GitHub(GITHUB_URL,oauth); + return new GitHub(GITHUB_URL,null, oauth,null); else return new GitHub(props.getProperty("login"),props.getProperty("token"),props.getProperty("password")); } @@ -134,41 +133,49 @@ public static GitHub connectToEnterprise(String apiUrl, String oauthAccessToken) return connectUsingOAuth(apiUrl, oauthAccessToken); } - public static GitHub connect(String login, String oauthAccessToken){ + public static GitHub connectToEnterprise(String apiUrl, String login, String password) throws IOException { + return new GitHub(apiUrl, login, null, password); + } + + public static GitHub connect(String login, String oauthAccessToken) throws IOException { return new GitHub(login,oauthAccessToken,null); } - public static GitHub connect(String login, String oauthAccessToken, String password){ + /** + * @deprecated + * Either OAuth token or password is sufficient, so there's no point in passing both. + * Use {@link #connectUsingPassword(String, String)} or {@link #connectUsingOAuth(String)}. + */ + public static GitHub connect(String login, String oauthAccessToken, String password) throws IOException { return new GitHub(login,oauthAccessToken,password); } - public static GitHub connectUsingOAuth (String oauthAccessToken) throws IOException { - return connectUsingOAuth("github.com", oauthAccessToken); + public static GitHub connectUsingPassword(String login, String password) throws IOException { + return new GitHub(login,null,password); } - public static GitHub connectUsingOAuth (String githubServer, String oauthAccessToken) throws IOException { - return new GitHub(githubServer, oauthAccessToken); + public static GitHub connectUsingOAuth(String oauthAccessToken) throws IOException { + return new GitHub(null, oauthAccessToken, null); + } + + public static GitHub connectUsingOAuth(String githubServer, String oauthAccessToken) throws IOException { + return new GitHub(githubServer,null, oauthAccessToken,null); } /** * Connects to GitHub anonymously. * * All operations that requires authentication will fail. */ - public static GitHub connectAnonymously() { + public static GitHub connectAnonymously() throws IOException { return new GitHub(null,null,null); } /*package*/ void requireCredential() { - if ((login==null || encodedAuthorization==null) && oauthAccessToken == null) + if (login==null || encodedAuthorization==null) throw new IllegalStateException("This operation requires a credential but none is given to the GitHub constructor"); } /*package*/ URL getApiURL(String tailApiUrl) throws IOException { - if (oauthAccessToken != null) { - // append the access token - tailApiUrl = tailApiUrl + (tailApiUrl.indexOf('?')>=0 ?'&':'?') + "access_token=" + oauthAccessToken; - } - if (tailApiUrl.startsWith("/")) { if ("github.com".equals(apiUrl)) {// backward compatibility return new URL(GITHUB_URL + tailApiUrl); @@ -309,7 +316,7 @@ public GHRepository createRepository(String name, String description, String hom * * The token created can be then used for {@link GitHub#connectUsingOAuth(String)} in the future. * - * @see http://developer.github.com/v3/oauth/#create-a-new-authorization + * @see Documentation */ public GHAuthorization createToken(Collection scope, String note, String noteUrl) throws IOException{ Requester requester = new Requester(this) diff --git a/src/main/java/org/kohsuke/github/Requester.java b/src/main/java/org/kohsuke/github/Requester.java index feaa25e23a..a117609dfa 100644 --- a/src/main/java/org/kohsuke/github/Requester.java +++ b/src/main/java/org/kohsuke/github/Requester.java @@ -271,9 +271,8 @@ private HttpURLConnection setupConnection(URL url) throws IOException { // if the authentication is needed but no credential is given, try it anyway (so that some calls // that do work with anonymous access in the reduced form should still work.) - // if OAuth token is present, it'll be set in the URL, so need to set the Authorization header - if (root.encodedAuthorization!=null && root.oauthAccessToken == null) - uc.setRequestProperty("Authorization", "Basic " + root.encodedAuthorization); + if (root.encodedAuthorization!=null) + uc.setRequestProperty("Authorization", root.encodedAuthorization); try { uc.setRequestMethod(method); diff --git a/src/test/java/org/kohsuke/github/GitHubTest.java b/src/test/java/org/kohsuke/github/GitHubTest.java index 4b0d9fa29f..6ff39feec9 100644 --- a/src/test/java/org/kohsuke/github/GitHubTest.java +++ b/src/test/java/org/kohsuke/github/GitHubTest.java @@ -8,17 +8,17 @@ public class GitHubTest extends TestCase { public void testGitHubServerWithHttp() throws Exception { - GitHub hub = GitHub.connectToEnterprise("http://enterprise.kohsuke.org/api/v3", "token"); + GitHub hub = GitHub.connectToEnterprise("http://enterprise.kohsuke.org/api/v3", "bogus","bogus"); assertEquals("http://enterprise.kohsuke.org/api/v3/test", hub.getApiURL("/test").toString()); } public void testGitHubServerWithHttps() throws Exception { - GitHub hub = GitHub.connectToEnterprise("https://enterprise.kohsuke.org/api/v3", "token"); + GitHub hub = GitHub.connectToEnterprise("https://enterprise.kohsuke.org/api/v3", "bogus","bogus"); assertEquals("https://enterprise.kohsuke.org/api/v3/test", hub.getApiURL("/test").toString()); } public void testGitHubServerWithoutServer() throws Exception { - GitHub hub = GitHub.connect("kohsuke", "token", "password"); + GitHub hub = GitHub.connectUsingPassword("kohsuke", "bogus"); assertEquals("https://api.github.com/test", hub.getApiURL("/test").toString()); } } From 60175ebfade23f7d361751324185cfa1b4ecf795 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Tue, 23 Apr 2013 10:05:06 -0700 Subject: [PATCH 08/13] if the user name is available, pass that in and save a lookup --- src/main/java/org/kohsuke/github/GitHub.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/kohsuke/github/GitHub.java b/src/main/java/org/kohsuke/github/GitHub.java index a67a7c5567..97f59bcc66 100644 --- a/src/main/java/org/kohsuke/github/GitHub.java +++ b/src/main/java/org/kohsuke/github/GitHub.java @@ -116,7 +116,7 @@ public static GitHub connect() throws IOException { } String oauth = props.getProperty("oauth"); if (oauth!=null) - return new GitHub(GITHUB_URL,null, oauth,null); + return new GitHub(GITHUB_URL,props.getProperty("login"), oauth,null); else return new GitHub(props.getProperty("login"),props.getProperty("token"),props.getProperty("password")); } From 5e3d3dd023eef7e09c7876adc19106663210466e Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Tue, 23 Apr 2013 10:05:45 -0700 Subject: [PATCH 09/13] In fact there's no point in looking up the 'token' property since API token is no longer supported by GitHub --- src/main/java/org/kohsuke/github/GitHub.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/org/kohsuke/github/GitHub.java b/src/main/java/org/kohsuke/github/GitHub.java index 97f59bcc66..a402e10c6e 100644 --- a/src/main/java/org/kohsuke/github/GitHub.java +++ b/src/main/java/org/kohsuke/github/GitHub.java @@ -114,11 +114,7 @@ public static GitHub connect() throws IOException { } finally { IOUtils.closeQuietly(in); } - String oauth = props.getProperty("oauth"); - if (oauth!=null) - return new GitHub(GITHUB_URL,props.getProperty("login"), oauth,null); - else - return new GitHub(props.getProperty("login"),props.getProperty("token"),props.getProperty("password")); + return new GitHub(GITHUB_URL,props.getProperty("login"), props.getProperty("oauth"),props.getProperty("password")); } /** From eeebfd5f04972aa38c619c8e0fa1123b66fea81e Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Tue, 23 Apr 2013 10:19:50 -0700 Subject: [PATCH 10/13] added a little helper code that generates an OAuth token for ~/.github --- src/test/java/Foo.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/test/java/Foo.java diff --git a/src/test/java/Foo.java b/src/test/java/Foo.java new file mode 100644 index 0000000000..95e13f8182 --- /dev/null +++ b/src/test/java/Foo.java @@ -0,0 +1,13 @@ +import org.kohsuke.github.GitHub; + +import java.util.Arrays; + +/** + * @author Kohsuke Kawaguchi + */ +public class Foo { + public static void main(String[] args) throws Exception { + System.out.println(GitHub.connect().createToken( + Arrays.asList("user", "repo", "delete_repo", "notifications", "gist"), "GitHub API", null).getToken()); + } +} From abe78cf0bbbd86732b28ec24333f70166ef2c3c6 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Tue, 23 Apr 2013 10:20:07 -0700 Subject: [PATCH 11/13] Formatting only changes --- src/main/java/org/kohsuke/github/GitHub.java | 3 +++ src/main/java/org/kohsuke/github/Requester.java | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/src/main/java/org/kohsuke/github/GitHub.java b/src/main/java/org/kohsuke/github/GitHub.java index a402e10c6e..c8b204df09 100644 --- a/src/main/java/org/kohsuke/github/GitHub.java +++ b/src/main/java/org/kohsuke/github/GitHub.java @@ -81,6 +81,9 @@ private GitHub(String login, String oauthAccessToken, String password) throws IO * "http://ghe.acme.com/api/v3". Note that GitHub Enterprise has /api/v3 in the URL. * For historical reasons, this parameter still accepts the bare domain name, but that's considered deprecated. * Password is also considered deprecated as it is no longer required for api usage. + * @param login + * The use ID on GitHub. Can be omitted if the OAuth token is provided, but specifying this would + * save one API call. */ private GitHub(String apiUrl, String login, String oauthAccessToken, String password) throws IOException { if (apiUrl.endsWith("/")) apiUrl = apiUrl.substring(0, apiUrl.length()-1); // normalize diff --git a/src/main/java/org/kohsuke/github/Requester.java b/src/main/java/org/kohsuke/github/Requester.java index a117609dfa..795c2e2a1e 100644 --- a/src/main/java/org/kohsuke/github/Requester.java +++ b/src/main/java/org/kohsuke/github/Requester.java @@ -39,10 +39,12 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.NoSuchElementException; +import java.util.Set; import java.util.zip.GZIPInputStream; import static org.kohsuke.github.GitHub.*; @@ -344,4 +346,11 @@ private InputStream wrapStream(HttpURLConnection uc, InputStream in) throws IOEx IOUtils.closeQuietly(es); } } + + private Set toSet(String s) { + Set r = new HashSet(); + for (String t : s.split(",")) + r.add(t.trim()); + return r; + } } From 8c78d20e6ee49f419e16ae2aa0c29e5d682c9608 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Tue, 23 Apr 2013 10:25:57 -0700 Subject: [PATCH 12/13] doc improvement --- src/main/java/org/kohsuke/github/GitHub.java | 27 ++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/kohsuke/github/GitHub.java b/src/main/java/org/kohsuke/github/GitHub.java index c8b204df09..d71fce0b39 100644 --- a/src/main/java/org/kohsuke/github/GitHub.java +++ b/src/main/java/org/kohsuke/github/GitHub.java @@ -75,6 +75,25 @@ private GitHub(String login, String oauthAccessToken, String password) throws IO } /** + * Creates a client API root object. + * + *

+ * Several different combinations of the login/oauthAccessToken/password parameters are allowed + * to represent different ways of authentication. + * + *

+ *
Loging anonymously + *
Leave all three parameters null and you will be making HTTP requests without any authentication. + * + *
Log in with password + *
Specify the login and password, then leave oauthAccessToken null. + * This will use the HTTP BASIC auth with the GitHub API. + * + *
Log in with OAuth token + *
Specify oauthAccessToken, and optionally specify the login. Leave password null. + * This will send OAuth token to the GitHub API. If the login parameter is null, + * The constructor makes an API call to figure out the user name that owns the token. + *
* * @param apiUrl * The URL of GitHub (or GitHub enterprise) API endpoint, such as "https://api.github.com" or @@ -82,8 +101,12 @@ private GitHub(String login, String oauthAccessToken, String password) throws IO * For historical reasons, this parameter still accepts the bare domain name, but that's considered deprecated. * Password is also considered deprecated as it is no longer required for api usage. * @param login - * The use ID on GitHub. Can be omitted if the OAuth token is provided, but specifying this would - * save one API call. + * The use ID on GitHub that you are logging in as. Can be omitted if the OAuth token is + * provided or if logging in anonymously. Specifying this would save one API call. + * @param oauthAccessToken + * Secret OAuth token. + * @param password + * User's password. Always used in conjunction with the {@code login} parameter */ private GitHub(String apiUrl, String login, String oauthAccessToken, String password) throws IOException { if (apiUrl.endsWith("/")) apiUrl = apiUrl.substring(0, apiUrl.length()-1); // normalize From 31d5cf6129b20b8ae5e92fa8ae87f95567105299 Mon Sep 17 00:00:00 2001 From: Kohsuke Kawaguchi Date: Tue, 23 Apr 2013 10:30:48 -0700 Subject: [PATCH 13/13] [maven-release-plugin] prepare release github-api-1.41 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3ffdc40562..b3cebb8139 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ github-api - 1.41-SNAPSHOT + 1.41 GitHub API for Java http://github-api.kohsuke.org/ GitHub API for Java