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); }