diff --git a/pom.xml b/pom.xml
index 4accc66e9..6d3164ed4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -93,7 +93,7 @@
org.jenkins-ci.plugins
github-api
- 1.69
+ 1.80
diff --git a/src/main/java/org/jenkinsci/plugins/github/webhook/subscriber/DefaultPushGHEventSubscriber.java b/src/main/java/org/jenkinsci/plugins/github/webhook/subscriber/DefaultPushGHEventSubscriber.java
index 10499f815..3bd419092 100644
--- a/src/main/java/org/jenkinsci/plugins/github/webhook/subscriber/DefaultPushGHEventSubscriber.java
+++ b/src/main/java/org/jenkinsci/plugins/github/webhook/subscriber/DefaultPushGHEventSubscriber.java
@@ -8,10 +8,14 @@
import hudson.Extension;
import hudson.model.Item;
import hudson.security.ACL;
+import java.io.IOException;
+import java.io.StringReader;
+import java.net.URL;
import jenkins.model.Jenkins;
-import net.sf.json.JSONObject;
import org.jenkinsci.plugins.github.extension.GHEventsSubscriber;
import org.kohsuke.github.GHEvent;
+import org.kohsuke.github.GHEventPayload;
+import org.kohsuke.github.GitHub;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -61,12 +65,17 @@ protected Set events() {
*/
@Override
protected void onEvent(GHEvent event, String payload) {
- JSONObject json = JSONObject.fromObject(payload);
- String repoUrl = json.getJSONObject("repository").getString("url");
- final String pusherName = json.getJSONObject("pusher").getString("name");
-
- LOGGER.info("Received POST for {}", repoUrl);
- final GitHubRepositoryName changedRepository = GitHubRepositoryName.create(repoUrl);
+ GHEventPayload.Push push;
+ try {
+ push = GitHub.offline().parseEventPayload(new StringReader(payload), GHEventPayload.Push.class);
+ } catch (IOException e) {
+ LOGGER.warn("Received malformed PushEvent: " + payload, e);
+ return;
+ }
+ URL repoUrl = push.getRepository().getUrl();
+ final String pusherName = push.getPusher().getName();
+ LOGGER.info("Received PushEvent for {}", repoUrl);
+ final GitHubRepositoryName changedRepository = GitHubRepositoryName.create(repoUrl.toExternalForm());
if (changedRepository != null) {
// run in high privilege to see all the projects anonymous users don't see.
@@ -78,13 +87,15 @@ public void run() {
for (Item job : Jenkins.getInstance().getAllItems(Item.class)) {
GitHubTrigger trigger = triggerFrom(job, GitHubPushTrigger.class);
if (trigger != null) {
- LOGGER.debug("Considering to poke {}", job.getFullDisplayName());
- if (GitHubRepositoryNameContributor.parseAssociatedNames(job).contains(changedRepository)) {
- LOGGER.info("Poked {}", job.getFullDisplayName());
+ String fullDisplayName = job.getFullDisplayName();
+ LOGGER.debug("Considering to poke {}", fullDisplayName);
+ if (GitHubRepositoryNameContributor.parseAssociatedNames(job)
+ .contains(changedRepository)) {
+ LOGGER.info("Poked {}", fullDisplayName);
trigger.onPost(pusherName);
} else {
LOGGER.debug("Skipped {} because it doesn't have a matching repository.",
- job.getFullDisplayName());
+ fullDisplayName);
}
}
}
diff --git a/src/main/java/org/jenkinsci/plugins/github/webhook/subscriber/PingGHEventSubscriber.java b/src/main/java/org/jenkinsci/plugins/github/webhook/subscriber/PingGHEventSubscriber.java
index 1c9487e66..0d2cbe359 100644
--- a/src/main/java/org/jenkinsci/plugins/github/webhook/subscriber/PingGHEventSubscriber.java
+++ b/src/main/java/org/jenkinsci/plugins/github/webhook/subscriber/PingGHEventSubscriber.java
@@ -3,18 +3,21 @@
import com.cloudbees.jenkins.GitHubRepositoryName;
import hudson.Extension;
import hudson.model.Item;
-import net.sf.json.JSONObject;
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.Set;
+import javax.inject.Inject;
import org.jenkinsci.plugins.github.admin.GitHubHookRegisterProblemMonitor;
import org.jenkinsci.plugins.github.extension.GHEventsSubscriber;
import org.kohsuke.github.GHEvent;
+import org.kohsuke.github.GHEventPayload;
+import org.kohsuke.github.GHOrganization;
+import org.kohsuke.github.GHRepository;
+import org.kohsuke.github.GitHub;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.inject.Inject;
-import java.util.Set;
-
import static com.google.common.collect.Sets.immutableEnumSet;
-import static net.sf.json.JSONObject.fromObject;
import static org.kohsuke.github.GHEvent.PING;
/**
@@ -35,7 +38,6 @@ public class PingGHEventSubscriber extends GHEventsSubscriber {
* This subscriber is not applicable to any item
*
* @param project ignored
- *
* @return always false
*/
@Override
@@ -59,15 +61,21 @@ protected Set events() {
*/
@Override
protected void onEvent(GHEvent event, String payload) {
- JSONObject parsedPayload = fromObject(payload);
- JSONObject repository = parsedPayload.optJSONObject("repository");
+ GHEventPayload.Ping ping;
+ try {
+ ping = GitHub.offline().parseEventPayload(new StringReader(payload), GHEventPayload.Ping.class);
+ } catch (IOException e) {
+ LOGGER.warn("Received malformed PingEvent: " + payload, e);
+ return;
+ }
+ GHRepository repository = ping.getRepository();
if (repository != null) {
- LOGGER.info("{} webhook received from repo <{}>!", event, repository.getString("html_url"));
- monitor.resolveProblem(GitHubRepositoryName.create(repository.getString("html_url")));
+ LOGGER.info("{} webhook received from repo <{}>!", event, repository.getHtmlUrl());
+ monitor.resolveProblem(GitHubRepositoryName.create(repository.getHtmlUrl().toExternalForm()));
} else {
- JSONObject organization = parsedPayload.optJSONObject("organization");
+ GHOrganization organization = ping.getOrganization();
if (organization != null) {
- LOGGER.info("{} webhook received from org <{}>!", event, organization.getString("url"));
+ LOGGER.info("{} webhook received from org <{}>!", event, organization.getUrl());
} else {
LOGGER.warn("{} webhook received with unexpected payload", event);
}