Kaynağa Gözat

Add feed information into webhook event

Frédéric Guillot 2 yıl önce
ebeveyn
işleme
ca6af9684a

+ 2 - 2
internal/integration/integration.go

@@ -181,10 +181,10 @@ func PushEntries(feed *model.Feed, entries model.Entries, userIntegrations *mode
 	}
 
 	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)
-		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)
 		}
 	}

+ 29 - 2
internal/integration/webhook/webhook.go

@@ -26,7 +26,7 @@ func NewClient(webhookURL, webhookSecret string) *Client {
 	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 == "" {
 		return fmt.Errorf(`webhook: missing webhook URL`)
 	}
@@ -35,7 +35,20 @@ func (c *Client) SendWebhook(entries model.Entries) error {
 		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 {
 		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
 }
+
+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"`
+}

+ 1 - 1
internal/model/feed.go

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