17
17
import org .kohsuke .stapler .HttpResponse ;
18
18
import org .kohsuke .stapler .StaplerRequest ;
19
19
import org .kohsuke .stapler .interceptor .RequirePOST ;
20
-
20
+ import hudson .security .csrf .CrumbExclusion ;
21
+ import javax .servlet .FilterChain ;
21
22
import javax .servlet .ServletException ;
22
23
import javax .servlet .http .HttpServletRequest ;
24
+ import javax .servlet .http .HttpServletResponse ;
23
25
import java .io .IOException ;
24
26
import java .io .StringWriter ;
25
27
import java .util .ArrayList ;
28
30
@ Extension
29
31
public class GithubWebhookBuildTriggerAction implements UnprotectedRootAction {
30
32
33
+ private static final String URL_NAME = "github-webhook-build-trigger" ;
34
+
31
35
@ Override
32
36
public String getUrlName () {
33
- return "github-webhook-build-trigger" ;
37
+ return URL_NAME ;
34
38
}
35
39
36
40
@ Override
@@ -40,7 +44,7 @@ public String getIconFileName() {
40
44
41
45
@ Override
42
46
public String getDisplayName () {
43
- return "github-webhook-build-trigger" ;
47
+ return URL_NAME ;
44
48
}
45
49
46
50
/*
@@ -166,4 +170,21 @@ private String getTextEnvelopedInBanner(String text) {
166
170
return banner .toString ();
167
171
}
168
172
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
+ }
169
190
}
0 commit comments