11/**
2- * Yobi, Project Hosting SW
3- *
4- * Copyright 2015 NAVER Corp.
5- * http://yobi.io
6- *
7- * @author Jihwan Chun
8- *
9- * Licensed under the Apache License, Version 2.0 (the "License");
10- * you may not use this file except in compliance with the License.
11- * You may obtain a copy of the License at
12- *
13- * http://www.apache.org/licenses/LICENSE-2.0
14- *
15- * Unless required by applicable law or agreed to in writing, software
16- * distributed under the License is distributed on an "AS IS" BASIS,
17- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18- * See the License for the specific language governing permissions and
19- * limitations under the License.
20- */
2+ * Yona, 21st Century Project Hosting SW
3+ * <p>
4+ * Copyright Yona & Yobi Authors & NAVER Corp. & NAVER LABS Corp.
5+ * https://yona.io
6+ **/
7+
218package models ;
229
2310import com .fasterxml .jackson .databind .ObjectMapper ;
2613import models .enumeration .EventType ;
2714import models .enumeration .PullRequestReviewAction ;
2815import models .enumeration .ResourceType ;
16+ import models .enumeration .WebhookType ;
2917import models .resource .GlobalResource ;
3018import models .resource .Resource ;
3119import models .resource .ResourceConvertible ;
@@ -86,10 +74,12 @@ public class Webhook extends Model implements ResourceConvertible {
8674 public String secret ;
8775
8876 /**
89- * Type of webhook (true = git only push, false = all cases)
77+ * Condition of sending webhook (true: git only push, false: all cases)
9078 */
9179 public Boolean gitPushOnly ;
9280
81+ public WebhookType webhookType = WebhookType .SIMPLE ;
82+
9383 /**
9484 * Payload URL of webhook.
9585 */
@@ -260,11 +250,18 @@ private String buildRequestBody(EventType eventType, User sender, PullRequest ev
260250 }
261251 requestMessage += " <" + utils .Config .getScheme () + "://" + utils .Config .getHostport ("localhost:9000" ) + RouteUtil .getUrl (eventPullRequest ) + "|#" + eventPullRequest .number + ": " + eventPullRequest .title + ">" ;
262252
253+ if (this .webhookType == WebhookType .DETAIL_SLACK ) {
254+ return buildJsonWithPullReqtuestDetails (eventPullRequest , detailFields , attachments , requestMessage );
255+ } else {
256+ return buildTextPropertyOnlyJSON (requestMessage );
257+ }
258+ }
259+
260+ private String buildJsonWithPullReqtuestDetails (PullRequest eventPullRequest , ArrayNode detailFields , ArrayNode attachments , String requestMessage ) {
263261 detailFields .add (buildTitleValueJSON (Messages .get (Lang .defaultLang (), "pullRequest.sender" ), eventPullRequest .contributor .name , false ));
264262 detailFields .add (buildTitleValueJSON (Messages .get (Lang .defaultLang (), "pullRequest.from" ), eventPullRequest .fromBranch , true ));
265- detailFields .add (buildTitleValueJSON (Messages .get (Lang .defaultLang (), "pullRequest.to" ), eventPullRequest .toBranch ,true ));
263+ detailFields .add (buildTitleValueJSON (Messages .get (Lang .defaultLang (), "pullRequest.to" ), eventPullRequest .toBranch , true ));
266264 attachments .add (buildAttachmentJSON (eventPullRequest .body , detailFields ));
267-
268265 return Json .stringify (buildRequestJSON (requestMessage , attachments ));
269266 }
270267
@@ -285,12 +282,11 @@ private String buildRequestBody(EventType eventType, User sender, PullRequest ev
285282 }
286283 requestMessage += " <" + utils .Config .getScheme () + "://" + utils .Config .getHostport ("localhost:9000" ) + RouteUtil .getUrl (eventPullRequest ) + "|#" + eventPullRequest .number + ": " + eventPullRequest .title + ">" ;
287284
288- detailFields .add (buildTitleValueJSON (Messages .get (Lang .defaultLang (), "pullRequest.sender" ), eventPullRequest .contributor .name , false ));
289- detailFields .add (buildTitleValueJSON (Messages .get (Lang .defaultLang (), "pullRequest.from" ), eventPullRequest .fromBranch , true ));
290- detailFields .add (buildTitleValueJSON (Messages .get (Lang .defaultLang (), "pullRequest.to" ), eventPullRequest .toBranch , true ));
291- attachments .add (buildAttachmentJSON (eventPullRequest .body , detailFields ));
292-
293- return Json .stringify (buildRequestJSON (requestMessage , attachments ));
285+ if (this .webhookType == WebhookType .SIMPLE ) {
286+ return buildTextPropertyOnlyJSON (requestMessage );
287+ } else {
288+ return buildJsonWithPullReqtuestDetails (eventPullRequest , detailFields , attachments , requestMessage );
289+ }
294290 }
295291
296292 private String buildRequestBody (EventType eventType , User sender , Issue eventIssue ) {
@@ -324,11 +320,18 @@ private String buildRequestBody(EventType eventType, User sender, Issue eventIss
324320
325321 requestMessage += " <" + utils .Config .getScheme () + "://" + utils .Config .getHostport ("localhost:9000" ) + RouteUtil .getUrl (eventIssue ) + "|#" + eventIssue .number + ": " + eventIssue .title + ">" ;
326322
323+ if (this .webhookType == WebhookType .SIMPLE ) {
324+ return buildTextPropertyOnlyJSON (requestMessage );
325+ } else {
326+ return buildJsonWithIssueEventDetails (eventIssue , detailFields , attachments , requestMessage );
327+ }
328+ }
329+
330+ private String buildJsonWithIssueEventDetails (Issue eventIssue , ArrayNode detailFields , ArrayNode attachments , String requestMessage ) {
327331 detailFields .add (buildTitleValueJSON (Messages .get (Lang .defaultLang (), "notification.type.milestone.changed" ), eventIssue .milestoneId ().toString (), true ));
328332 detailFields .add (buildTitleValueJSON (Messages .get (Lang .defaultLang (), "" ), eventIssue .assigneeName (), true ));
329333 detailFields .add (buildTitleValueJSON (Messages .get (Lang .defaultLang (), "issue.state" ), eventIssue .state .toString (), true ));
330334 attachments .add (buildAttachmentJSON (eventIssue .body , detailFields ));
331-
332335 return Json .stringify (buildRequestJSON (requestMessage , attachments ));
333336 }
334337
@@ -354,9 +357,12 @@ private String buildRequestBody(EventType eventType, User sender, Comment eventC
354357 break ;
355358 }
356359
357- attachments .add (buildAttachmentJSON (eventComment .contents , null ));
358-
359- return Json .stringify (buildRequestJSON (requestMessage , attachments ));
360+ if (this .webhookType == WebhookType .SIMPLE ) {
361+ return buildTextPropertyOnlyJSON (requestMessage );
362+ } else {
363+ attachments .add (buildAttachmentJSON (eventComment .contents , null ));
364+ return Json .stringify (buildRequestJSON (requestMessage , attachments ));
365+ }
360366 }
361367
362368 private ObjectNode buildJSONFromCommit (Project project , RevCommit commit ) {
@@ -409,6 +415,12 @@ private ObjectNode buildRequestJSON(String requestMessage, ArrayNode attachments
409415 return requestBody ;
410416 }
411417
418+ private String buildTextPropertyOnlyJSON (String requestMessage ) {
419+ ObjectNode requestBody = Json .newObject ();
420+ requestBody .put ("text" , requestMessage );
421+ return Json .stringify (requestBody );
422+ }
423+
412424 private ObjectNode buildSenderJSON (User sender ) {
413425 ObjectNode senderJSON = Json .newObject ();
414426 senderJSON .put ("login" , sender .loginId );
@@ -457,6 +469,7 @@ public String toString() {
457469 ", payloadUrl='" + payloadUrl + '\'' +
458470 ", secret='" + secret + '\'' +
459471 ", gitPushOnly=" + gitPushOnly +
472+ ", webhookType=" + webhookType +
460473 ", createdAt=" + createdAt +
461474 '}' ;
462475 }
0 commit comments