mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
130 lines
3.6 KiB
Go
130 lines
3.6 KiB
Go
// Copyright © 2016 Aaron Longwell
|
|
//
|
|
// Use of this source code is governed by an MIT licese.
|
|
// Details in the LICENSE file.
|
|
|
|
package trello
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
// Webhook is the Go representation of a webhook registered in Trello's systems.
|
|
// Used when creating, modifying or deleting webhooks.
|
|
// https://developers.trello.com/reference/#webhook-object
|
|
//
|
|
type Webhook struct {
|
|
client *Client
|
|
ID string `json:"id,omitempty"`
|
|
IDModel string `json:"idModel"`
|
|
Description string `json:"description"`
|
|
CallbackURL string `json:"callbackURL"`
|
|
Active bool `json:"active"`
|
|
}
|
|
|
|
// BoardWebhookRequest is the object sent by Trello to a Webhook for Board-triggered
|
|
// webhooks.
|
|
//
|
|
type BoardWebhookRequest struct {
|
|
Model *Board
|
|
Action *Action
|
|
}
|
|
|
|
// ListWebhookRequest is the object sent by Trello to a Webhook for List-triggered
|
|
// webhooks.
|
|
//
|
|
type ListWebhookRequest struct {
|
|
Model *List
|
|
Action *Action
|
|
}
|
|
|
|
// CardWebhookRequest is the object sent by Trello to a Webhook for Card-triggered
|
|
// webhooks.
|
|
//
|
|
type CardWebhookRequest struct {
|
|
Model *Card
|
|
Action *Action
|
|
}
|
|
|
|
// CreateWebhook takes a Webhook, POSTs it and returns an error object.
|
|
func (c *Client) CreateWebhook(webhook *Webhook) error {
|
|
path := "webhooks"
|
|
args := Arguments{"idModel": webhook.IDModel, "description": webhook.Description, "callbackURL": webhook.CallbackURL}
|
|
err := c.Post(path, args, webhook)
|
|
if err == nil {
|
|
webhook.client = c
|
|
}
|
|
return err
|
|
}
|
|
|
|
// DeleteWebhook takes a webhook and deletes it
|
|
func (w *Webhook) Delete(args Arguments) error {
|
|
path := fmt.Sprintf("webhooks/%s", w.ID)
|
|
return w.client.Delete(path, Arguments{}, w)
|
|
}
|
|
|
|
// GetWebhook takes a webhook id and Arguments, GETs the matching Webhook and returns it or an error.
|
|
func (c *Client) GetWebhook(webhookID string, args Arguments) (webhook *Webhook, err error) {
|
|
path := fmt.Sprintf("webhooks/%s", webhookID)
|
|
err = c.Get(path, args, &webhook)
|
|
if webhook != nil {
|
|
webhook.client = c
|
|
}
|
|
return
|
|
}
|
|
|
|
// GetWebhooks takes Arguments and returns a list of all Webhooks for the receiver Token or an error.
|
|
func (t *Token) GetWebhooks(args Arguments) (webhooks []*Webhook, err error) {
|
|
path := fmt.Sprintf("tokens/%s/webhooks", t.client.Token)
|
|
err = t.client.Get(path, args, &webhooks)
|
|
if err == nil {
|
|
for _, webhook := range webhooks {
|
|
webhook.client = t.client
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// GetBoardWebhookRequest takes a http.Request and returns the decoded body as BoardWebhookRequest or an error.
|
|
func GetBoardWebhookRequest(r *http.Request) (whr *BoardWebhookRequest, err error) {
|
|
if r.Method == "HEAD" {
|
|
return &BoardWebhookRequest{}, nil
|
|
}
|
|
decoder := json.NewDecoder(r.Body)
|
|
err = decoder.Decode(&whr)
|
|
if err != nil {
|
|
err = errors.Wrapf(err, "GetBoardWebhookRequest() failed to decode '%s'.", r.URL)
|
|
}
|
|
return
|
|
}
|
|
|
|
// GetListWebhookRequest takes a http.Request and returns the decoded Body as ListWebhookRequest or an error.
|
|
func GetListWebhookRequest(r *http.Request) (whr *ListWebhookRequest, err error) {
|
|
if r.Method == "HEAD" {
|
|
return &ListWebhookRequest{}, nil
|
|
}
|
|
decoder := json.NewDecoder(r.Body)
|
|
err = decoder.Decode(&whr)
|
|
if err != nil {
|
|
err = errors.Wrapf(err, "GetListWebhookRequest() failed to decode '%s'.", r.URL)
|
|
}
|
|
return
|
|
}
|
|
|
|
// GetCardWebhookRequest takes a http.Request and returns the decoded Body as CardWebhookRequest or an error.
|
|
func GetCardWebhookRequest(r *http.Request) (whr *CardWebhookRequest, err error) {
|
|
if r.Method == "HEAD" {
|
|
return &CardWebhookRequest{}, nil
|
|
}
|
|
decoder := json.NewDecoder(r.Body)
|
|
err = decoder.Decode(&whr)
|
|
if err != nil {
|
|
err = errors.Wrapf(err, "GetCardWebhookRequest() failed to decode '%s'.", r.URL)
|
|
}
|
|
return
|
|
}
|