|
15 | 15 | import org.gitlab4j.api.utils.HttpRequestUtils;
|
16 | 16 | import org.gitlab4j.api.utils.JacksonJson;
|
17 | 17 |
|
| 18 | +import com.fasterxml.jackson.databind.JsonNode; |
| 19 | + |
18 | 20 | /**
|
19 | 21 | * This class provides a handler for processing GitLab System Hook callouts.
|
20 | 22 | */
|
@@ -77,15 +79,36 @@ public void handleEvent(HttpServletRequest request) throws GitLabApiException {
|
77 | 79 | try {
|
78 | 80 |
|
79 | 81 | SystemHookEvent event;
|
| 82 | + JsonNode tree; |
80 | 83 | if (LOGGER.isLoggable(Level.FINE)) {
|
81 | 84 | LOGGER.fine(HttpRequestUtils.getShortRequestDump("System Hook", true, request));
|
82 | 85 | String postData = HttpRequestUtils.getPostDataAsString(request);
|
83 | 86 | LOGGER.fine("Raw POST data:\n" + postData);
|
84 |
| - event = jacksonJson.unmarshal(SystemHookEvent.class, postData); |
85 |
| - LOGGER.fine(event.getEventName() + "\n" + jacksonJson.marshal(event) + "\n"); |
| 87 | + tree = jacksonJson.readTree(postData); |
86 | 88 | } else {
|
87 | 89 | InputStreamReader reader = new InputStreamReader(request.getInputStream());
|
88 |
| - event = jacksonJson.unmarshal(SystemHookEvent.class, reader); |
| 90 | + tree = jacksonJson.readTree(reader); |
| 91 | + } |
| 92 | + |
| 93 | + if (tree.has("object_kind")) { |
| 94 | + String objectKind = tree.asText("object_kind"); |
| 95 | + switch (objectKind) { |
| 96 | + case MergeRequestSystemHookEvent.OBJECT_KIND: |
| 97 | + event = jacksonJson.unmarshal(MergeRequestSystemHookEvent.class, tree); |
| 98 | + break; |
| 99 | + |
| 100 | + default: |
| 101 | + String message = "Unsupported object_kind, object_kind=" + objectKind; |
| 102 | + LOGGER.warning(message); |
| 103 | + throw new GitLabApiException(message); |
| 104 | + } |
| 105 | + |
| 106 | + } else { |
| 107 | + event = jacksonJson.unmarshal(SystemHookEvent.class, tree); |
| 108 | + } |
| 109 | + |
| 110 | + if (LOGGER.isLoggable(Level.FINE)) { |
| 111 | + LOGGER.fine(event.getEventName() + "\n" + jacksonJson.marshal(event) + "\n"); |
89 | 112 | }
|
90 | 113 |
|
91 | 114 | event.setRequestUrl(request.getRequestURL().toString());
|
@@ -161,6 +184,8 @@ public void fireEvent(SystemHookEvent event) throws GitLabApiException {
|
161 | 184 | fireTagPushEvent((TagPushSystemHookEvent) event);
|
162 | 185 | } else if (event instanceof RepositorySystemHookEvent) {
|
163 | 186 | fireRepositoryEvent((RepositorySystemHookEvent) event);
|
| 187 | + } else if (event instanceof MergeRequestSystemHookEvent) { |
| 188 | + fireMergeRequestEvent((MergeRequestSystemHookEvent) event); |
164 | 189 | } else {
|
165 | 190 | String message = "Unsupported event, event_named=" + event.getEventName();
|
166 | 191 | LOGGER.warning(message);
|
@@ -221,4 +246,10 @@ protected void fireRepositoryEvent(RepositorySystemHookEvent event) {
|
221 | 246 | listener.onRepositoryEvent(event);
|
222 | 247 | }
|
223 | 248 | }
|
| 249 | + |
| 250 | + protected void fireMergeRequestEvent(MergeRequestSystemHookEvent event) { |
| 251 | + for (SystemHookListener listener : systemHookListeners) { |
| 252 | + listener.onMergeRequestEvent(event); |
| 253 | + } |
| 254 | + } |
224 | 255 | }
|
0 commit comments