1717import org .kohsuke .stapler .HttpResponse ;
1818import org .kohsuke .stapler .StaplerRequest ;
1919import org .kohsuke .stapler .interceptor .RequirePOST ;
20-
20+ import hudson .security .csrf .CrumbExclusion ;
21+ import javax .servlet .FilterChain ;
2122import javax .servlet .ServletException ;
2223import javax .servlet .http .HttpServletRequest ;
24+ import javax .servlet .http .HttpServletResponse ;
2325import java .io .IOException ;
2426import java .io .StringWriter ;
2527import java .util .ArrayList ;
2830@ Extension
2931public class GithubWebhookBuildTriggerAction implements UnprotectedRootAction {
3032
33+ private static final String URL_NAME = "github-webhook-build-trigger" ;
34+
3135 @ Override
3236 public String getUrlName () {
33- return "github-webhook-build-trigger" ;
37+ return URL_NAME ;
3438 }
3539
3640 @ Override
@@ -40,7 +44,7 @@ public String getIconFileName() {
4044
4145 @ Override
4246 public String getDisplayName () {
43- return "github-webhook-build-trigger" ;
47+ return URL_NAME ;
4448 }
4549
4650 /*
@@ -166,4 +170,21 @@ private String getTextEnvelopedInBanner(String text) {
166170 return banner .toString ();
167171 }
168172
173+ @ Extension
174+ public static class TriggerActionCrumbExclusion extends CrumbExclusion {
175+
176+ @ Override
177+ public boolean process (HttpServletRequest req , HttpServletResponse resp , FilterChain chain ) throws IOException , ServletException {
178+ String pathInfo = req .getPathInfo ();
179+ if (pathInfo != null && pathInfo .contains (getExclusionPath ())) {
180+ chain .doFilter (req , resp );
181+ return true ;
182+ }
183+ return false ;
184+ }
185+
186+ public String getExclusionPath () {
187+ return "/" + URL_NAME + "/" ;
188+ }
189+ }
169190}
0 commit comments