mirror of
https://github.com/jlengrand/github-api.git
synced 2026-03-11 00:11:25 +00:00
Compare commits
36 Commits
github-api
...
github-api
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
31d5cf6129 | ||
|
|
8c78d20e6e | ||
|
|
abe78cf0bb | ||
|
|
eeebfd5f04 | ||
|
|
5e3d3dd023 | ||
|
|
60175ebfad | ||
|
|
c6fafe453f | ||
|
|
838ecd0dd8 | ||
|
|
beec605e2c | ||
|
|
da1405a060 | ||
|
|
e38eeae533 | ||
|
|
8442e7e326 | ||
|
|
e6c82e2003 | ||
|
|
c4de972c53 | ||
|
|
d2adbaec89 | ||
|
|
72736588c9 | ||
|
|
46e726363a | ||
|
|
f7e5292b8c | ||
|
|
f67954fa3e | ||
|
|
ba6c6a17ae | ||
|
|
c21d61a70d | ||
|
|
df857d3a84 | ||
|
|
e9564f101b | ||
|
|
e8a2a69649 | ||
|
|
ba416b1294 | ||
|
|
3024b598ad | ||
|
|
5ac7a34a13 | ||
|
|
b63181d9b5 | ||
|
|
a3119e2cc7 | ||
|
|
e8b8971b72 | ||
|
|
d5f5fa0e0a | ||
|
|
c284f90a1a | ||
|
|
349df60ce8 | ||
|
|
5ccc3f4ccd | ||
|
|
8ba61bb3a6 | ||
|
|
cb3d413e5e |
6
pom.xml
6
pom.xml
@@ -7,7 +7,7 @@
|
||||
</parent>
|
||||
|
||||
<artifactId>github-api</artifactId>
|
||||
<version>1.36</version>
|
||||
<version>1.41</version>
|
||||
<name>GitHub API for Java</name>
|
||||
<url>http://github-api.kohsuke.org/</url>
|
||||
<description>GitHub API for Java</description>
|
||||
@@ -25,6 +25,10 @@
|
||||
</site>
|
||||
</distributionManagement>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
|
||||
94
src/main/java/org/kohsuke/github/GHAuthorization.java
Normal file
94
src/main/java/org/kohsuke/github/GHAuthorization.java
Normal file
@@ -0,0 +1,94 @@
|
||||
package org.kohsuke.github;
|
||||
|
||||
import java.net.URL;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Generated OAuth token
|
||||
*
|
||||
* @author janinko
|
||||
* @see GitHub#createToken(Collection, String, String)
|
||||
* @see http://developer.github.com/v3/oauth/#create-a-new-authorization
|
||||
*/
|
||||
public class GHAuthorization {
|
||||
public static final String USER = "user";
|
||||
public static final String USER_EMAIL = "user:email";
|
||||
public static final String USER_FOLLOW = "user:follow";
|
||||
public static final String PUBLIC_REPO = "public_repo";
|
||||
public static final String REPO = "repo";
|
||||
public static final String REPO_STATUS = "repo:status";
|
||||
public static final String DELETE_REPO = "delete_repo";
|
||||
public static final String NOTIFICATIONS = "notifications";
|
||||
public static final String GIST = "gist";
|
||||
|
||||
private GitHub root;
|
||||
private int id;
|
||||
private String url;
|
||||
private List<String> scopes;
|
||||
private String token;
|
||||
private App app;
|
||||
private String note;
|
||||
private String note_url;
|
||||
private String updated_at;
|
||||
private String created_at;
|
||||
|
||||
public GitHub getRoot() {
|
||||
return root;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public List<String> getScopes() {
|
||||
return scopes;
|
||||
}
|
||||
|
||||
public String getToken(){
|
||||
return token;
|
||||
}
|
||||
|
||||
public URL getAppUrl(){
|
||||
return GitHub.parseURL(app.url);
|
||||
}
|
||||
|
||||
public String getAppName() {
|
||||
return app.name;
|
||||
}
|
||||
|
||||
public URL getApiURL(){
|
||||
return GitHub.parseURL(url);
|
||||
}
|
||||
|
||||
public String getNote() {
|
||||
return note;
|
||||
}
|
||||
|
||||
public URL getNoteUrl(){
|
||||
return GitHub.parseURL(note_url);
|
||||
}
|
||||
|
||||
public Date getCreatedAt() {
|
||||
return GitHub.parseDate(created_at);
|
||||
}
|
||||
|
||||
public Date getUpdatedAt() {
|
||||
return GitHub.parseDate(updated_at);
|
||||
}
|
||||
|
||||
/*package*/ GHAuthorization wrap(GitHub root) {
|
||||
this.root = root;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private static class App{
|
||||
private String url;
|
||||
private String name;
|
||||
}
|
||||
}
|
||||
156
src/main/java/org/kohsuke/github/GHCompare.java
Normal file
156
src/main/java/org/kohsuke/github/GHCompare.java
Normal file
@@ -0,0 +1,156 @@
|
||||
package org.kohsuke.github;
|
||||
|
||||
import java.net.URL;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* The model user for comparing 2 commits in the GitHub API.
|
||||
*
|
||||
* @author Michael Clarke
|
||||
*/
|
||||
public class GHCompare {
|
||||
|
||||
private String url, html_url, permalink_url, diff_url, patch_url;
|
||||
public Status status;
|
||||
private int ahead_by, behind_by, total_commits;
|
||||
private Commit base_commit, merge_base_commit;
|
||||
private Commit[] commits;
|
||||
private GHCommit.File[] files;
|
||||
|
||||
private GHRepository owner;
|
||||
|
||||
public URL getUrl() {
|
||||
return GitHub.parseURL(url);
|
||||
}
|
||||
|
||||
public URL getHtmlUrl() {
|
||||
return GitHub.parseURL(html_url);
|
||||
}
|
||||
|
||||
public URL getPermalinkUrl() {
|
||||
return GitHub.parseURL(permalink_url);
|
||||
}
|
||||
|
||||
public URL getDiffUrl() {
|
||||
return GitHub.parseURL(diff_url);
|
||||
}
|
||||
|
||||
public URL getPatchUrl() {
|
||||
return GitHub.parseURL(patch_url);
|
||||
}
|
||||
|
||||
public Status getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public int getAheadBy() {
|
||||
return ahead_by;
|
||||
}
|
||||
|
||||
public int getBehindBy() {
|
||||
return behind_by;
|
||||
}
|
||||
|
||||
public int getTotalCommits() {
|
||||
return total_commits;
|
||||
}
|
||||
|
||||
public Commit getBaseCommit() {
|
||||
return base_commit;
|
||||
}
|
||||
|
||||
public Commit getMergeBaseCommit() {
|
||||
return merge_base_commit;
|
||||
}
|
||||
|
||||
public Commit[] getCommits() {
|
||||
return commits;
|
||||
}
|
||||
|
||||
|
||||
public GHCompare wrap(GHRepository owner) {
|
||||
this.owner = owner;
|
||||
for (Commit commit : commits) {
|
||||
commit.wrapUp(owner);
|
||||
}
|
||||
merge_base_commit.wrapUp(owner);
|
||||
base_commit.wrapUp(owner);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compare commits had a child commit element with additional details we want to capture.
|
||||
* This extenstion of GHCommit provides that.
|
||||
*/
|
||||
public static class Commit extends GHCommit {
|
||||
|
||||
private InnerCommit commit;
|
||||
|
||||
public InnerCommit getCommit() {
|
||||
return commit;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static class InnerCommit {
|
||||
private String url, sha, message;
|
||||
private User author, committer;
|
||||
private Tree tree;
|
||||
|
||||
public String getUrl() {
|
||||
return url;
|
||||
}
|
||||
|
||||
public String getSha() {
|
||||
return sha;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public User getAuthor() {
|
||||
return author;
|
||||
}
|
||||
|
||||
public User getCommitter() {
|
||||
return committer;
|
||||
}
|
||||
|
||||
public Tree getTree() {
|
||||
return tree;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Tree {
|
||||
private String url, sha;
|
||||
|
||||
public String getUrl() {
|
||||
return url;
|
||||
}
|
||||
|
||||
public String getSha() {
|
||||
return sha;
|
||||
}
|
||||
}
|
||||
|
||||
public static class User {
|
||||
private String name, email, date;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getEmail() {
|
||||
return email;
|
||||
}
|
||||
|
||||
public Date getDate() {
|
||||
return GitHub.parseDate(date);
|
||||
}
|
||||
}
|
||||
|
||||
public static enum Status {
|
||||
behind, ahead, identical;
|
||||
}
|
||||
}
|
||||
@@ -18,10 +18,15 @@ public abstract class GHEventPayload {
|
||||
this.root = root;
|
||||
}
|
||||
|
||||
/**
|
||||
* A pull request status has changed.
|
||||
*
|
||||
* @see http://developer.github.com/v3/activity/events/types/#pullrequestevent
|
||||
*/
|
||||
public static class PullRequest extends GHEventPayload {
|
||||
private String action;
|
||||
private int number;
|
||||
GHPullRequest pull_request;
|
||||
private GHPullRequest pull_request;
|
||||
|
||||
public String getAction() {
|
||||
return action;
|
||||
@@ -43,4 +48,51 @@ public abstract class GHEventPayload {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A comment was added to an issue
|
||||
*
|
||||
* @see http://developer.github.com/v3/activity/events/types/#issuecommentevent
|
||||
*/
|
||||
public static class IssueComment extends GHEventPayload {
|
||||
private String action;
|
||||
private GHIssueComment comment;
|
||||
private GHIssue issue;
|
||||
private GHRepository repository;
|
||||
|
||||
public String getAction() {
|
||||
return action;
|
||||
}
|
||||
|
||||
public GHIssueComment getComment() {
|
||||
return comment;
|
||||
}
|
||||
|
||||
public void setComment(GHIssueComment comment) {
|
||||
this.comment = comment;
|
||||
}
|
||||
|
||||
public GHIssue getIssue() {
|
||||
return issue;
|
||||
}
|
||||
|
||||
public void setIssue(GHIssue issue) {
|
||||
this.issue = issue;
|
||||
}
|
||||
|
||||
public GHRepository getRepository() {
|
||||
return repository;
|
||||
}
|
||||
|
||||
public void setRepository(GHRepository repository) {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
@Override
|
||||
void wrapUp(GitHub root) {
|
||||
super.wrapUp(root);
|
||||
repository.wrap(root);
|
||||
issue.wrap(repository);
|
||||
comment.wrapUp(issue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -200,7 +200,7 @@ public class GHIssue {
|
||||
};
|
||||
}
|
||||
|
||||
private String getApiRoute() {
|
||||
protected String getApiRoute() {
|
||||
return "/repos/"+owner.getOwnerName()+"/"+owner.getName()+"/issues/"+number;
|
||||
}
|
||||
|
||||
|
||||
@@ -134,6 +134,7 @@ public class GHOrganization extends GHPerson {
|
||||
public List<GHRepository> getRepositoriesWithOpenPullRequests() throws IOException {
|
||||
List<GHRepository> r = new ArrayList<GHRepository>();
|
||||
for (GHRepository repository : root.retrieve().to("/orgs/" + login + "/repos", GHRepository[].class)) {
|
||||
repository.wrap(root);
|
||||
List<GHPullRequest> pullRequests = repository.getPullRequests(GHIssueState.OPEN);
|
||||
if (pullRequests.size() > 0) {
|
||||
r.add(repository);
|
||||
|
||||
@@ -63,7 +63,12 @@ public class GHPullRequest extends GHIssue {
|
||||
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
|
||||
|
||||
61
src/main/java/org/kohsuke/github/GHRef.java
Normal file
61
src/main/java/org/kohsuke/github/GHRef.java
Normal file
@@ -0,0 +1,61 @@
|
||||
package org.kohsuke.github;
|
||||
|
||||
import java.net.URL;
|
||||
|
||||
/**
|
||||
* Provides information on a Git ref from GitHub.
|
||||
*
|
||||
* @author Michael Clarke
|
||||
*/
|
||||
public class GHRef {
|
||||
|
||||
private String ref, url;
|
||||
private GHObject object;
|
||||
|
||||
/**
|
||||
* Name of the ref, such as "refs/tags/abc"
|
||||
*/
|
||||
public String getRef() {
|
||||
return ref;
|
||||
}
|
||||
|
||||
/**
|
||||
* The API URL of this tag, such as https://api.github.com/repos/jenkinsci/jenkins/git/refs/tags/1.312
|
||||
*/
|
||||
public URL getUrl() {
|
||||
return GitHub.parseURL(url);
|
||||
}
|
||||
|
||||
/**
|
||||
* The object that this ref points to.
|
||||
*/
|
||||
public GHObject getObject() {
|
||||
return object;
|
||||
}
|
||||
|
||||
|
||||
public static class GHObject {
|
||||
private String type, sha, url;
|
||||
|
||||
/**
|
||||
* Type of the object, such as "commit"
|
||||
*/
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* SHA1 of this object.
|
||||
*/
|
||||
public String getSha() {
|
||||
return sha;
|
||||
}
|
||||
|
||||
/**
|
||||
* API URL to this Git data, such as https://api.github.com/repos/jenkinsci/jenkins/git/commits/b72322675eb0114363a9a86e9ad5a170d1d07ac0
|
||||
*/
|
||||
public URL getUrl() {
|
||||
return GitHub.parseURL(url);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -393,6 +393,46 @@ public class GHRepository {
|
||||
return root.retrieve().to(String.format("/repos/%s/%s/hooks/%d", owner.login, name, id), GHHook.class).wrap(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a comparison between 2 points in the repository. This would be similar
|
||||
* to calling <tt>git log id1...id2</tt> against a local repository.
|
||||
* @param id1 an identifier for the first point to compare from, this can be a sha1 ID (for a commit, tag etc) or a direct tag name
|
||||
* @param id2 an identifier for the second point to compare to. Can be the same as the first point.
|
||||
* @return the comparison output
|
||||
* @throws IOException on failure communicating with GitHub
|
||||
*/
|
||||
public GHCompare getCompare(String id1, String id2) throws IOException {
|
||||
GHCompare compare = root.retrieve().to(String.format("/repos/%s/%s/compare/%s...%s", owner.login, name, id1, id2), GHCompare.class);
|
||||
return compare.wrap(this);
|
||||
}
|
||||
|
||||
public GHCompare getCompare(GHCommit id1, GHCommit id2) throws IOException {
|
||||
return getCompare(id1.getSHA1(),id2.getSHA1());
|
||||
}
|
||||
|
||||
public GHCompare getCompare(GHBranch id1, GHBranch id2) throws IOException {
|
||||
return getCompare(id1.getName(),id2.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves all refs for the github repository.
|
||||
* @return an array of GHRef elements coresponding with the refs in the remote repository.
|
||||
* @throws IOException on failure communicating with GitHub
|
||||
*/
|
||||
public GHRef[] getRefs() throws IOException {
|
||||
return root.retrieve().to(String.format("/repos/%s/%s/git/refs", owner.login, name), GHRef[].class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrienved all refs of the given type for the current GitHub repository.
|
||||
* @param refType the type of reg to search for e.g. <tt>tags</tt> or <tt>commits</tt>
|
||||
* @return an array of all refs matching the request type
|
||||
* @throws IOException on failure communicating with GitHub, potentially due to an invalid ref type being requested
|
||||
*/
|
||||
public GHRef[] getRefs(String refType) throws IOException {
|
||||
return root.retrieve().to(String.format("/repos/%s/%s/git/refs/%s", owner.login, name, refType), GHRef[].class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a commit object in this repository.
|
||||
*/
|
||||
|
||||
@@ -39,6 +39,7 @@ import java.net.URL;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@@ -56,52 +57,77 @@ import static org.codehaus.jackson.annotate.JsonAutoDetect.Visibility.*;
|
||||
public class GitHub {
|
||||
/*package*/ final String login;
|
||||
|
||||
|
||||
/**
|
||||
* Value of the authorization header to be sent with the request.
|
||||
*/
|
||||
/*package*/ final String encodedAuthorization;
|
||||
/*package*/ final String apiToken;
|
||||
|
||||
private final Map<String,GHUser> users = new HashMap<String, GHUser>();
|
||||
private final Map<String,GHOrganization> orgs = new HashMap<String, GHOrganization>();
|
||||
/*package*/ String oauthAccessToken;
|
||||
|
||||
private final String apiUrl;
|
||||
|
||||
private GitHub(String login, String apiToken, String password) {
|
||||
this (GITHUB_URL, login, apiToken, password);
|
||||
}
|
||||
private final String apiUrl;
|
||||
|
||||
/**
|
||||
* Connects to GitHub.com
|
||||
*/
|
||||
private GitHub(String login, String oauthAccessToken, String password) throws IOException {
|
||||
this (GITHUB_URL, login, oauthAccessToken, password);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a client API root object.
|
||||
*
|
||||
* <p>
|
||||
* Several different combinations of the login/oauthAccessToken/password parameters are allowed
|
||||
* to represent different ways of authentication.
|
||||
*
|
||||
* <dl>
|
||||
* <dt>Loging anonymously
|
||||
* <dd>Leave all three parameters null and you will be making HTTP requests without any authentication.
|
||||
*
|
||||
* <dt>Log in with password
|
||||
* <dd>Specify the login and password, then leave oauthAccessToken null.
|
||||
* This will use the HTTP BASIC auth with the GitHub API.
|
||||
*
|
||||
* <dt>Log in with OAuth token
|
||||
* <dd>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.
|
||||
* </dl>
|
||||
*
|
||||
* @param apiUrl
|
||||
* The URL of GitHub (or GitHub enterprise) API endpoint, such as "https://api.github.com" or
|
||||
* "http://ghe.acme.com/api/v3". Note that GitHub Enterprise has <tt>/api/v3</tt> 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 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 apiToken, String password) {
|
||||
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.login = login;
|
||||
this.apiToken = apiToken;
|
||||
|
||||
if (apiToken!=null || password!=null) {
|
||||
String authorization = password==null ? (login + "/token" + ":" + apiToken) : (login + ':'+password);
|
||||
encodedAuthorization = new String(Base64.encodeBase64(authorization.getBytes()));
|
||||
} else
|
||||
encodedAuthorization = null;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
if (login==null)
|
||||
login = getMyself().getLogin();
|
||||
this.login = login;
|
||||
}
|
||||
|
||||
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.apiToken = oauthAccessToken;
|
||||
|
||||
this.login = getMyself().getLogin();
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtains the credential from "~/.github"
|
||||
*/
|
||||
@@ -114,11 +140,7 @@ public class GitHub {
|
||||
} finally {
|
||||
IOUtils.closeQuietly(in);
|
||||
}
|
||||
String oauth = props.getProperty("oauth");
|
||||
if (oauth!=null)
|
||||
return new GitHub(GITHUB_URL,oauth);
|
||||
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"));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -129,45 +151,53 @@ public class GitHub {
|
||||
* "http://ghe.acme.com/api/v3". Note that GitHub Enterprise has <tt>/api/v3</tt> 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 oauthAccessToken) throws IOException {
|
||||
return connectUsingOAuth(apiUrl, oauthAccessToken);
|
||||
}
|
||||
|
||||
public static GitHub connect(String login, String apiToken){
|
||||
return new GitHub(login,apiToken,null);
|
||||
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 apiToken, String password){
|
||||
return new GitHub(login,apiToken,password);
|
||||
public static GitHub connect(String login, String oauthAccessToken) throws IOException {
|
||||
return new GitHub(login,oauthAccessToken,null);
|
||||
}
|
||||
|
||||
public static GitHub connectUsingOAuth (String accessToken) throws IOException {
|
||||
return connectUsingOAuth("github.com", accessToken);
|
||||
/**
|
||||
* @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 githubServer, String accessToken) throws IOException {
|
||||
return new GitHub(githubServer, accessToken);
|
||||
|
||||
public static GitHub connectUsingPassword(String login, String password) throws IOException {
|
||||
return new GitHub(login,null,password);
|
||||
}
|
||||
|
||||
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);
|
||||
@@ -289,7 +319,7 @@ public class GitHub {
|
||||
t.wrapUp(this);
|
||||
return t;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new repository.
|
||||
*
|
||||
@@ -303,6 +333,22 @@ public class GitHub {
|
||||
return requester.method("POST").to("/user/repos", GHRepository.class).wrap(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new authorization.
|
||||
*
|
||||
* The token created can be then used for {@link GitHub#connectUsingOAuth(String)} in the future.
|
||||
*
|
||||
* @see <a href="http://developer.github.com/v3/oauth/#create-a-new-authorization">Documentation</a>
|
||||
*/
|
||||
public GHAuthorization createToken(Collection<String> scope, String note, String noteUrl) throws IOException{
|
||||
Requester requester = new Requester(this)
|
||||
.with("scopes", scope)
|
||||
.with("note", note)
|
||||
.with("note_url", noteUrl);
|
||||
|
||||
return requester.method("POST").to("/authorizations", GHAuthorization.class).wrap(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures that the credential is valid.
|
||||
*/
|
||||
|
||||
@@ -39,10 +39,12 @@ import java.net.URL;
|
||||
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.*;
|
||||
@@ -271,9 +273,8 @@ class Requester {
|
||||
|
||||
// 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);
|
||||
@@ -345,4 +346,11 @@ class Requester {
|
||||
IOUtils.closeQuietly(es);
|
||||
}
|
||||
}
|
||||
|
||||
private Set<String> toSet(String s) {
|
||||
Set<String> r = new HashSet<String>();
|
||||
for (String t : s.split(","))
|
||||
r.add(t.trim());
|
||||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
13
src/test/java/Foo.java
Normal file
13
src/test/java/Foo.java
Normal file
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -188,7 +188,7 @@ public class AppTest extends TestCase {
|
||||
}
|
||||
|
||||
public void testCreateCommitComment() throws Exception {
|
||||
GHCommit commit = gitHub.getUser("johnou").getRepository("sandbox-ant").getCommit("8ae38db0ea5837313ab5f39d43a6f73de3bd9000");
|
||||
GHCommit commit = gitHub.getUser("kohsuke").getRepository("sandbox-ant").getCommit("8ae38db0ea5837313ab5f39d43a6f73de3bd9000");
|
||||
GHCommitComment c = commit.createComment("[testing](http://kohsuse.org/)");
|
||||
System.out.println(c);
|
||||
c.update("updated text");
|
||||
|
||||
@@ -8,17 +8,17 @@ import junit.framework.TestCase;
|
||||
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", "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", "kohsuke", "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());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user