code.gitea.io/gitea@v1.21.7/services/webhook/payloader.go (about)

     1  // Copyright 2020 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package webhook
     5  
     6  import (
     7  	api "code.gitea.io/gitea/modules/structs"
     8  	webhook_module "code.gitea.io/gitea/modules/webhook"
     9  )
    10  
    11  // PayloadConvertor defines the interface to convert system webhook payload to external payload
    12  type PayloadConvertor interface {
    13  	api.Payloader
    14  	Create(*api.CreatePayload) (api.Payloader, error)
    15  	Delete(*api.DeletePayload) (api.Payloader, error)
    16  	Fork(*api.ForkPayload) (api.Payloader, error)
    17  	Issue(*api.IssuePayload) (api.Payloader, error)
    18  	IssueComment(*api.IssueCommentPayload) (api.Payloader, error)
    19  	Push(*api.PushPayload) (api.Payloader, error)
    20  	PullRequest(*api.PullRequestPayload) (api.Payloader, error)
    21  	Review(*api.PullRequestPayload, webhook_module.HookEventType) (api.Payloader, error)
    22  	Repository(*api.RepositoryPayload) (api.Payloader, error)
    23  	Release(*api.ReleasePayload) (api.Payloader, error)
    24  	Wiki(*api.WikiPayload) (api.Payloader, error)
    25  	Package(*api.PackagePayload) (api.Payloader, error)
    26  }
    27  
    28  func convertPayloader(s PayloadConvertor, p api.Payloader, event webhook_module.HookEventType) (api.Payloader, error) {
    29  	switch event {
    30  	case webhook_module.HookEventCreate:
    31  		return s.Create(p.(*api.CreatePayload))
    32  	case webhook_module.HookEventDelete:
    33  		return s.Delete(p.(*api.DeletePayload))
    34  	case webhook_module.HookEventFork:
    35  		return s.Fork(p.(*api.ForkPayload))
    36  	case webhook_module.HookEventIssues, webhook_module.HookEventIssueAssign, webhook_module.HookEventIssueLabel, webhook_module.HookEventIssueMilestone:
    37  		return s.Issue(p.(*api.IssuePayload))
    38  	case webhook_module.HookEventIssueComment, webhook_module.HookEventPullRequestComment:
    39  		pl, ok := p.(*api.IssueCommentPayload)
    40  		if ok {
    41  			return s.IssueComment(pl)
    42  		}
    43  		return s.PullRequest(p.(*api.PullRequestPayload))
    44  	case webhook_module.HookEventPush:
    45  		return s.Push(p.(*api.PushPayload))
    46  	case webhook_module.HookEventPullRequest, webhook_module.HookEventPullRequestAssign, webhook_module.HookEventPullRequestLabel,
    47  		webhook_module.HookEventPullRequestMilestone, webhook_module.HookEventPullRequestSync, webhook_module.HookEventPullRequestReviewRequest:
    48  		return s.PullRequest(p.(*api.PullRequestPayload))
    49  	case webhook_module.HookEventPullRequestReviewApproved, webhook_module.HookEventPullRequestReviewRejected, webhook_module.HookEventPullRequestReviewComment:
    50  		return s.Review(p.(*api.PullRequestPayload), event)
    51  	case webhook_module.HookEventRepository:
    52  		return s.Repository(p.(*api.RepositoryPayload))
    53  	case webhook_module.HookEventRelease:
    54  		return s.Release(p.(*api.ReleasePayload))
    55  	case webhook_module.HookEventWiki:
    56  		return s.Wiki(p.(*api.WikiPayload))
    57  	case webhook_module.HookEventPackage:
    58  		return s.Package(p.(*api.PackagePayload))
    59  	}
    60  	return s, nil
    61  }