Add feed information into webhook event

This commit is contained in:
Frédéric Guillot 2023-09-10 12:50:58 -07:00
parent cb228e73ad
commit ca6af9684a
3 changed files with 32 additions and 5 deletions

View file

@ -181,10 +181,10 @@ func PushEntries(feed *model.Feed, entries model.Entries, userIntegrations *mode
} }
if userIntegrations.WebhookEnabled { if userIntegrations.WebhookEnabled {
logger.Debug("[Integration] Sending %d entries for User #%d to Webhook URL: %s", len(entries), userIntegrations.UserID, userIntegrations.WebhookURL) logger.Debug("[Integration] Sending %d entries for user #%d to Webhook URL: %s", len(entries), userIntegrations.UserID, userIntegrations.WebhookURL)
webhookClient := webhook.NewClient(userIntegrations.WebhookURL, userIntegrations.WebhookSecret) webhookClient := webhook.NewClient(userIntegrations.WebhookURL, userIntegrations.WebhookSecret)
if err := webhookClient.SendWebhook(entries); err != nil { if err := webhookClient.SendWebhook(feed, entries); err != nil {
logger.Error("[Integration] sending entries to webhook failed: %v", err) logger.Error("[Integration] sending entries to webhook failed: %v", err)
} }
} }

View file

@ -26,7 +26,7 @@ func NewClient(webhookURL, webhookSecret string) *Client {
return &Client{webhookURL, webhookSecret} return &Client{webhookURL, webhookSecret}
} }
func (c *Client) SendWebhook(entries model.Entries) error { func (c *Client) SendWebhook(feed *model.Feed, entries model.Entries) error {
if c.webhookURL == "" { if c.webhookURL == "" {
return fmt.Errorf(`webhook: missing webhook URL`) return fmt.Errorf(`webhook: missing webhook URL`)
} }
@ -35,7 +35,20 @@ func (c *Client) SendWebhook(entries model.Entries) error {
return nil return nil
} }
requestBody, err := json.Marshal(entries) webhookEvent := &WebhookEvent{
// Send only a subset of the fields to avoid leaking sensitive data.
Feed: &WebhookFeed{
ID: feed.ID,
UserID: feed.UserID,
FeedURL: feed.FeedURL,
SiteURL: feed.SiteURL,
Title: feed.Title,
CheckedAt: feed.CheckedAt,
},
Entries: entries,
}
requestBody, err := json.Marshal(webhookEvent)
if err != nil { if err != nil {
return fmt.Errorf("webhook: unable to encode request body: %v", err) return fmt.Errorf("webhook: unable to encode request body: %v", err)
} }
@ -62,3 +75,17 @@ func (c *Client) SendWebhook(entries model.Entries) error {
return nil return nil
} }
type WebhookFeed struct {
ID int64 `json:"id"`
UserID int64 `json:"user_id"`
FeedURL string `json:"feed_url"`
SiteURL string `json:"site_url"`
Title string `json:"title"`
CheckedAt time.Time `json:"checked_at"`
}
type WebhookEvent struct {
Feed *WebhookFeed `json:"feed"`
Entries model.Entries `json:"entries"`
}

View file

@ -51,7 +51,7 @@ type Feed struct {
FetchViaProxy bool `json:"fetch_via_proxy"` FetchViaProxy bool `json:"fetch_via_proxy"`
Category *Category `json:"category,omitempty"` Category *Category `json:"category,omitempty"`
Entries Entries `json:"entries,omitempty"` Entries Entries `json:"entries,omitempty"`
IconURL string `json:"icon_url"` IconURL string `json:"-"`
Icon *FeedIcon `json:"icon"` Icon *FeedIcon `json:"icon"`
HideGlobally bool `json:"hide_globally"` HideGlobally bool `json:"hide_globally"`
UnreadCount int `json:"-"` UnreadCount int `json:"-"`