ghorg/vendor/github.com/ktrysmt/go-bitbucket/webhooks.go
dependabot[bot] c83f1ddbd6
Bump github.com/ktrysmt/go-bitbucket from 0.9.79 to 0.9.80 (#421)
Bumps [github.com/ktrysmt/go-bitbucket](https://github.com/ktrysmt/go-bitbucket) from 0.9.79 to 0.9.80.
- [Release notes](https://github.com/ktrysmt/go-bitbucket/releases)
- [Commits](https://github.com/ktrysmt/go-bitbucket/compare/v0.9.79...v0.9.80)

---
updated-dependencies:
- dependency-name: github.com/ktrysmt/go-bitbucket
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-01 09:06:21 -07:00

136 lines
3.3 KiB
Go

package bitbucket
import (
"encoding/json"
"github.com/mitchellh/mapstructure"
)
type Webhooks struct {
c *Client
}
type Webhook struct {
Owner string `json:"owner"`
RepoSlug string `json:"repo_slug"`
Uuid string `json:"uuid"`
Secret string `json:"secret"`
Description string `json:"description"`
Url string `json:"url"`
Active bool `json:"active"`
Events []string `json:"events"` // EX: {'repo:push','issue:created',..} REF: https://bit.ly/3FjRHHu
}
func decodeWebhook(response interface{}) (*Webhook, error) {
respMap := response.(map[string]interface{})
if respMap["type"] == "error" {
return nil, DecodeError(respMap)
}
var webhook = new(Webhook)
err := mapstructure.Decode(respMap, webhook)
if err != nil {
return nil, err
}
return webhook, nil
}
func decodeWebhooks(response interface{}) ([]Webhook, error) {
webhooks := make([]Webhook, 0)
resMap := response.(map[string]interface{})
for _, v := range resMap["values"].([]interface{}) {
wh, err := decodeWebhook(v)
if err != nil {
return nil, err
}
webhooks = append(webhooks, *wh)
}
return webhooks, nil
}
func (r *Webhooks) buildWebhooksBody(ro *WebhooksOptions) (string, error) {
body := map[string]interface{}{}
if ro.Description != "" {
body["description"] = ro.Description
}
if ro.Url != "" {
body["url"] = ro.Url
}
if ro.Active == true || ro.Active == false {
body["active"] = ro.Active
}
if ro.Secret != "" {
body["secret"] = ro.Secret
}
body["events"] = ro.Events
data, err := json.Marshal(body)
if err != nil {
return "", err
}
return string(data), nil
}
func (r *Webhooks) List(ro *WebhooksOptions) ([]Webhook, error) {
urlStr := r.c.requestUrl("/repositories/%s/%s/hooks/", ro.Owner, ro.RepoSlug)
res, err := r.c.executePaginated("GET", urlStr, "", nil)
if err != nil {
return nil, err
}
return decodeWebhooks(res)
}
// Deprecate Gets for List call
func (r *Webhooks) Gets(ro *WebhooksOptions) (interface{}, error) {
urlStr := r.c.requestUrl("/repositories/%s/%s/hooks/", ro.Owner, ro.RepoSlug)
return r.c.executePaginated("GET", urlStr, "", nil)
}
func (r *Webhooks) Create(ro *WebhooksOptions) (*Webhook, error) {
data, err := r.buildWebhooksBody(ro)
if err != nil {
return nil, err
}
urlStr := r.c.requestUrl("/repositories/%s/%s/hooks", ro.Owner, ro.RepoSlug)
response, err := r.c.executeWithContext("POST", urlStr, data, ro.ctx)
if err != nil {
return nil, err
}
return decodeWebhook(response)
}
func (r *Webhooks) Get(ro *WebhooksOptions) (*Webhook, error) {
urlStr := r.c.requestUrl("/repositories/%s/%s/hooks/%s", ro.Owner, ro.RepoSlug, ro.Uuid)
response, err := r.c.execute("GET", urlStr, "")
if err != nil {
return nil, err
}
return decodeWebhook(response)
}
func (r *Webhooks) Update(ro *WebhooksOptions) (*Webhook, error) {
data, err := r.buildWebhooksBody(ro)
if err != nil {
return nil, err
}
urlStr := r.c.requestUrl("/repositories/%s/%s/hooks/%s", ro.Owner, ro.RepoSlug, ro.Uuid)
response, err := r.c.execute("PUT", urlStr, data)
if err != nil {
return nil, err
}
return decodeWebhook(response)
}
func (r *Webhooks) Delete(ro *WebhooksOptions) (interface{}, error) {
urlStr := r.c.requestUrl("/repositories/%s/%s/hooks/%s", ro.Owner, ro.RepoSlug, ro.Uuid)
return r.c.execute("DELETE", urlStr, "")
}