Skip to content
This repository was archived by the owner on Mar 14, 2023. It is now read-only.

Commit d70382b

Browse files
author
Bernhard Grünewaldt
committed
rename plugin
1 parent a250f32 commit d70382b

File tree

9 files changed

+84
-77
lines changed

9 files changed

+84
-77
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# jenkins-github-webhook-notifier-plugin
1+
# jenkins-github-webhook-build-trigger-plugin
2+
23

3-
jenkins-github-webhook-notifier-plugin
44

55
### What it does
66

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Licensed under MIT License
33
* Copyright (c) 2017 Bernhard Grünewaldt
44
*/
5-
package io.codeclou.jenkins.githubwebhooknotifierplugin;
5+
package io.codeclou.jenkins.githubwebhookbuildtriggerplugin;
66

77
import hudson.EnvVars;
88
import hudson.model.AbstractBuild;
@@ -11,34 +11,37 @@
1111
import java.util.HashMap;
1212
import java.util.Map;
1313

14-
public class GithubWebhookEnvironmentContributionAction implements EnvironmentContributingAction {
14+
/*
15+
* Inject Environment Variables into the triggered job
16+
*/
17+
public class EnvironmentContributionAction implements EnvironmentContributingAction {
1518

1619
private transient Map<String, String> environmentVariables = new HashMap<>();
1720
private transient String envVarInfo;
1821

19-
public GithubWebhookEnvironmentContributionAction(GithubWebhookPayload payload) {
22+
public EnvironmentContributionAction(GithubWebhookPayload payload) {
2023
String normalizedBranch = this.normalizeBranchNameOrEmptyString(payload.getRef());
2124
String normalizedTag = this.normalizeTagNameOrEmptyString(payload.getRef());
2225
StringBuilder info = new StringBuilder();
23-
info.append(" ref\n -> $GWNP_REF : ").append(payload.getRef()).append("\n");
24-
info.append(" -> $GWNP_TAG : ").append(normalizedTag).append("\n");
25-
info.append(" -> $GWNP_BRANCH : ").append(normalizedBranch).append("\n\n");
26-
info.append(" before\n -> $GWNP_COMMIT_BEFORE : ").append(payload.getBefore()).append("\n\n");
27-
info.append(" after\n -> $GWNP_COMMIT_AFTER : ").append(payload.getAfter()).append("\n\n");
28-
info.append(" repository.clone_url\n -> $GWNP_REPO_CLONE_URL : ").append(payload.getRepository().getClone_url()).append("\n\n");
29-
info.append(" repository.html_url\n -> $GWNP_REPO_HTML_URL : ").append(payload.getRepository().getHtml_url()).append("\n\n");
30-
info.append(" repository.full_name\n -> $GWNP_REPO_FULL_NAME : ").append(payload.getRepository().getFull_name()).append("\n\n");
31-
info.append(" repository.name\n -> $GWNP_REPO_NAME : ").append(payload.getRepository().getName()).append("\n\n");
26+
info.append(" ref\n -> $GWBT_REF : ").append(payload.getRef()).append("\n");
27+
info.append(" -> $GWBT_TAG : ").append(normalizedTag).append("\n");
28+
info.append(" -> $GWBT_BRANCH : ").append(normalizedBranch).append("\n\n");
29+
info.append(" before\n -> $GWBT_COMMIT_BEFORE : ").append(payload.getBefore()).append("\n\n");
30+
info.append(" after\n -> $GWBT_COMMIT_AFTER : ").append(payload.getAfter()).append("\n\n");
31+
info.append(" repository.clone_url\n -> $GWBT_REPO_CLONE_URL : ").append(payload.getRepository().getClone_url()).append("\n\n");
32+
info.append(" repository.html_url\n -> $GWBT_REPO_HTML_URL : ").append(payload.getRepository().getHtml_url()).append("\n\n");
33+
info.append(" repository.full_name\n -> $GWBT_REPO_FULL_NAME : ").append(payload.getRepository().getFull_name()).append("\n\n");
34+
info.append(" repository.name\n -> $GWBT_REPO_NAME : ").append(payload.getRepository().getName()).append("\n\n");
3235
this.envVarInfo = info.toString();
33-
this.environmentVariables.put("GWNP_REF", payload.getRef());
34-
this.environmentVariables.put("GWNP_TAG", normalizedTag);
35-
this.environmentVariables.put("GWNP_BRANCH", normalizedBranch);
36-
this.environmentVariables.put("GWNP_COMMIT_BEFORE", payload.getBefore());
37-
this.environmentVariables.put("GWNP_COMMIT_AFTER", payload.getAfter());
38-
this.environmentVariables.put("GWNP_REPO_CLONE_URL", payload.getRepository().getClone_url());
39-
this.environmentVariables.put("GWNP_REPO_HTML_URL", payload.getRepository().getHtml_url());
40-
this.environmentVariables.put("GWNP_REPO_FULL_NAME", payload.getRepository().getFull_name());
41-
this.environmentVariables.put("GWNP_REPO_NAME", payload.getRepository().getName());
36+
this.environmentVariables.put("GWBT_REF", payload.getRef());
37+
this.environmentVariables.put("GWBT_TAG", normalizedTag);
38+
this.environmentVariables.put("GWBT_BRANCH", normalizedBranch);
39+
this.environmentVariables.put("GWBT_COMMIT_BEFORE", payload.getBefore());
40+
this.environmentVariables.put("GWBT_COMMIT_AFTER", payload.getAfter());
41+
this.environmentVariables.put("GWBT_REPO_CLONE_URL", payload.getRepository().getClone_url());
42+
this.environmentVariables.put("GWBT_REPO_HTML_URL", payload.getRepository().getHtml_url());
43+
this.environmentVariables.put("GWBT_REPO_FULL_NAME", payload.getRepository().getFull_name());
44+
this.environmentVariables.put("GWBT_REPO_NAME", payload.getRepository().getName());
4245
}
4346

4447
/*
@@ -71,11 +74,11 @@ public String getIconFileName() {
7174
}
7275

7376
public String getDisplayName() {
74-
return "GithubWebhookEnvironmentContributionAction";
77+
return "EnvironmentContributionAction";
7578
}
7679

7780
public String getUrlName() {
78-
return "GithubWebhookEnvironmentContributionAction";
81+
return "EnvironmentContributionAction";
7982
}
8083

8184
@Override

src/main/java/io/codeclou/jenkins/githubwebhooknotifierplugin/GithubWebhookNotifyAction.java renamed to src/main/java/io/codeclou/jenkins/githubwebhookbuildtriggerplugin/GithubWebhookBuildTriggerAction.java

Lines changed: 33 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,48 +2,30 @@
22
* Licensed under MIT License
33
* Copyright (c) 2017 Bernhard Grünewaldt
44
*/
5-
package io.codeclou.jenkins.githubwebhooknotifierplugin;
5+
package io.codeclou.jenkins.githubwebhookbuildtriggerplugin;
66

77
import com.google.gson.Gson;
88
import com.google.gson.JsonSyntaxException;
99
import hudson.Extension;
1010
import hudson.model.*;
11-
import hudson.scm.SCMRevisionState;
12-
import hudson.triggers.SCMTrigger;
13-
import hudson.triggers.Trigger;
1411
import hudson.util.HttpResponses;
15-
import io.codeclou.jenkins.githubwebhooknotifierplugin.config.GithubWebhookNotifierPluginBuilder;
16-
import io.codeclou.jenkins.githubwebhooknotifierplugin.webhooksecret.GitHubWebhookUtility;
12+
import io.codeclou.jenkins.githubwebhookbuildtriggerplugin.config.GithubWebhookBuildTriggerPluginBuilder;
13+
import io.codeclou.jenkins.githubwebhookbuildtriggerplugin.webhooksecret.GitHubWebhookUtility;
1714
import jenkins.model.Jenkins;
1815
import org.apache.commons.io.IOUtils;
19-
import org.apache.http.client.methods.CloseableHttpResponse;
20-
import org.apache.http.client.methods.HttpGet;
21-
import org.apache.http.conn.ssl.NoopHostnameVerifier;
22-
import org.apache.http.impl.client.CloseableHttpClient;
23-
import org.apache.http.impl.client.HttpClients;
24-
import org.apache.http.ssl.SSLContextBuilder;
25-
import org.apache.http.ssl.TrustStrategy;
2616
import org.kohsuke.stapler.HttpResponse;
2717
import org.kohsuke.stapler.StaplerRequest;
2818
import org.kohsuke.stapler.interceptor.RequirePOST;
2919

30-
import javax.net.ssl.SSLContext;
3120
import javax.servlet.ServletException;
3221
import javax.servlet.http.HttpServletRequest;
33-
import java.io.BufferedReader;
3422
import java.io.IOException;
3523
import java.io.StringWriter;
36-
import java.security.KeyManagementException;
37-
import java.security.KeyStoreException;
38-
import java.security.NoSuchAlgorithmException;
39-
import java.security.cert.CertificateException;
40-
import java.security.cert.X509Certificate;
4124
import java.util.ArrayList;
4225
import java.util.Collection;
43-
import java.util.HashMap;
4426

4527
@Extension
46-
public class GithubWebhookNotifyAction implements UnprotectedRootAction {
28+
public class GithubWebhookBuildTriggerAction implements UnprotectedRootAction {
4729

4830
@Override
4931
public String getUrlName() {
@@ -68,35 +50,50 @@ public HttpResponse doReceive(HttpServletRequest request, StaplerRequest stapler
6850
StringWriter writer = new StringWriter();
6951
IOUtils.copy(request.getInputStream(), writer, "UTF-8");
7052
String requestBody = writer.toString();
71-
String githubSignature = request.getHeader("x-hub-signature");
7253
Gson gson = new Gson();
54+
StringBuilder info = new StringBuilder();
7355
try {
74-
String webhookSecretAsConfiguredByUser = GithubWebhookNotifierPluginBuilder.DescriptorImpl.getDescriptor().getWebhookSecret();
56+
//
57+
// WEBHOOK SECRET
58+
//
59+
String githubSignature = request.getHeader("x-hub-signature");
60+
String webhookSecretAsConfiguredByUser = GithubWebhookBuildTriggerPluginBuilder.DescriptorImpl.getDescriptor().getWebhookSecret();
7561
String webhookSecretMessage ="validating webhook payload against wevhook secret.";
62+
info.append(">> webhook secret validation").append("\n");
7663
if (webhookSecretAsConfiguredByUser == null) {
77-
webhookSecretMessage = "no webhook secret in global config specified. skipping validation.";
64+
webhookSecretMessage = " skipping validation since no webhook secret is configured in \n" +
65+
" 'Jenkins' -> 'Configure' tab under 'Github Webhook Build Trigger' section.";
7866
} else {
7967
Boolean isValid = GitHubWebhookUtility.verifySignature(requestBody, githubSignature, webhookSecretAsConfiguredByUser);
8068
if (!isValid) {
81-
return HttpResponses.error(500, this.getTextEnvelopedInBanner("github webhook secret signature check failed. Check your webhook secret."));
69+
info.append(webhookSecretMessage).append("\n");
70+
return HttpResponses.error(500, this.getTextEnvelopedInBanner(info.toString() + " ERROR: github webhook secret signature check failed. Check your webhook secret."));
8271
}
72+
webhookSecretMessage = " ok. Webhook secret validates against " + githubSignature + "\n";
8373
}
74+
info.append(webhookSecretMessage).append("\n");
75+
//
76+
// PAYLOAD TO ENVVARS
77+
//
8478
GithubWebhookPayload githubWebhookPayload = gson.fromJson(requestBody, GithubWebhookPayload.class);
85-
GithubWebhookEnvironmentContributionAction environmentContributionAction = new GithubWebhookEnvironmentContributionAction(githubWebhookPayload);
79+
EnvironmentContributionAction environmentContributionAction = new EnvironmentContributionAction(githubWebhookPayload);
80+
//
81+
// TRIGGER JOBS
82+
//
8683
String jobNamePrefix = this.normalizeRepoFullName(githubWebhookPayload.getRepository().getFull_name());
8784
StringBuilder jobsTriggered = new StringBuilder();
8885
ArrayList<String> jobsAlreadyTriggered = new ArrayList<>();
8986
StringBuilder causeNote = new StringBuilder();
90-
causeNote.append("github-webhook-notifier-plugin:\n");
87+
causeNote.append("github-webhook-build-trigger-plugin:\n");
9188
causeNote.append(githubWebhookPayload.getAfter()).append("\n");
9289
causeNote.append(githubWebhookPayload.getRef()).append("\n");
9390
causeNote.append(githubWebhookPayload.getRepository().getClone_url());
9491
Cause cause = new Cause.RemoteCause("github.com", causeNote.toString());
9592
Collection<Job> jobs = Jenkins.getInstance().getAllItems(Job.class);
9693
if (jobs.isEmpty()) {
97-
jobsTriggered.append("WARNING NO JOBS FOUND!\n");
98-
jobsTriggered.append("If you are using matrix-based security, please give the following rights to 'Anonymous'.\n");
99-
jobsTriggered.append("'Job' -> build, discover, read.\n");
94+
jobsTriggered.append(" WARNING NO JOBS FOUND!\n");
95+
jobsTriggered.append(" If you are using matrix-based security, please give the following rights to 'Anonymous'.\n");
96+
jobsTriggered.append(" 'Job' -> build, discover, read.\n");
10097
}
10198
for (Job job: jobs) {
10299
if (job.getName().startsWith(jobNamePrefix) && ! jobsAlreadyTriggered.contains(job.getName())) {
@@ -106,16 +103,17 @@ public HttpResponse doReceive(HttpServletRequest request, StaplerRequest stapler
106103
projectScheduable.scheduleBuild(0, cause, environmentContributionAction);
107104
}
108105
}
109-
StringBuilder info = new StringBuilder();
106+
//
107+
// WRITE ADDITONAL INFO
108+
//
110109
info.append(">> webhook content to env vars").append("\n");
111-
info.append("webhooksecret: ").append(webhookSecretMessage).append("\n");
112110
info.append(environmentContributionAction.getEnvVarInfo());
113111
info.append("\n");
114112
info.append(">> jobs triggered with name matching '").append(jobNamePrefix).append("*'").append("\n");
115113
info.append(jobsTriggered.toString());
116114
return HttpResponses.plainText(this.getTextEnvelopedInBanner(info.toString()));
117115
} catch (JsonSyntaxException ex) {
118-
return HttpResponses.error(500, this.getTextEnvelopedInBanner("github webhook json invalid"));
116+
return HttpResponses.error(500, this.getTextEnvelopedInBanner(info.toString() + " ERROR: github webhook json invalid"));
119117
}
120118
}
121119

@@ -129,7 +127,7 @@ private String normalizeRepoFullName(String reponame) {
129127
private String getTextEnvelopedInBanner(String text) {
130128
StringBuilder banner = new StringBuilder();
131129
banner.append("----------------------------------------------------------------------------------\n");
132-
banner.append("github-webhook-notifier-plugin").append("\n");
130+
banner.append("github-webhook-build-trigger-plugin").append("\n");
133131
banner.append("----------------------------------------------------------------------------------\n");
134132
banner.append(text);
135133
banner.append("\n----------------------------------------------------------------------------------\n");
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/*
2+
* Licensed under MIT License
3+
* Copyright (c) 2017 Bernhard Grünewaldt
4+
*/
5+
package io.codeclou.jenkins.githubwebhookbuildtriggerplugin;
6+
7+
import hudson.Plugin;
8+
9+
public class GithubWebhookBuildTriggerPlugin extends Plugin {
10+
11+
}

src/main/java/io/codeclou/jenkins/githubwebhooknotifierplugin/GithubWebhookPayload.java renamed to src/main/java/io/codeclou/jenkins/githubwebhookbuildtriggerplugin/GithubWebhookPayload.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Licensed under MIT License
33
* Copyright (c) 2017 Bernhard Grünewaldt
44
*/
5-
package io.codeclou.jenkins.githubwebhooknotifierplugin;
5+
package io.codeclou.jenkins.githubwebhookbuildtriggerplugin;
66

77
/**
88
* GitHub Webhook JSON Pojo with only the parts that are interesting for us.
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Licensed under MIT License
33
* Copyright (c) 2017 Bernhard Grünewaldt
44
*/
5-
package io.codeclou.jenkins.githubwebhooknotifierplugin.config;
5+
package io.codeclou.jenkins.githubwebhookbuildtriggerplugin.config;
66

77
import hudson.Extension;
88
import hudson.model.AbstractProject;
@@ -11,8 +11,10 @@
1111
import net.sf.json.JSONObject;
1212
import org.kohsuke.stapler.StaplerRequest;
1313

14-
15-
public class GithubWebhookNotifierPluginBuilder extends Builder {
14+
/*
15+
* Enable Plugin to store global config under "Jenkins" => "configure" tab.
16+
*/
17+
public class GithubWebhookBuildTriggerPluginBuilder extends Builder {
1618

1719
@Extension
1820
public static final class DescriptorImpl extends BuildStepDescriptor<Builder> {
@@ -40,7 +42,7 @@ public boolean isApplicable(Class<? extends AbstractProject> jobType) {
4042

4143
@Override
4244
public String getDisplayName() {
43-
return "GithubWebhookNotifierPlugin";
45+
return "GithubWebhookBuildTriggerPlugin";
4446
}
4547

4648
@Override
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,17 @@
22
* Licensed under MIT License
33
* Copyright (c) 2017 Bernhard Grünewaldt
44
*/
5-
package io.codeclou.jenkins.githubwebhooknotifierplugin.webhooksecret;
5+
package io.codeclou.jenkins.githubwebhookbuildtriggerplugin.webhooksecret;
66

77
import java.security.InvalidKeyException;
88
import java.security.NoSuchAlgorithmException;
99
import javax.crypto.Mac;
1010
import javax.crypto.spec.SecretKeySpec;
1111

12+
/*
13+
* Verify HMAC sha1 'x-hub-signature' Header against Request Payload
14+
* See: https://developer.github.com/webhooks/securing/
15+
*/
1216
public class GitHubWebhookUtility {
1317

1418
private static final String HMAC_SHA1_ALGORITHM = "HmacSHA1";

src/main/java/io/codeclou/jenkins/githubwebhooknotifierplugin/GithubWebhookNotifierPlugin.java

Lines changed: 0 additions & 11 deletions
This file was deleted.

0 commit comments

Comments
 (0)