diff --git a/object/record.go b/object/record.go index c36e13fc..518ee898 100644 --- a/object/record.go +++ b/object/record.go @@ -263,6 +263,27 @@ func addWebhookRecord(webhook *Webhook, record *casvisorsdk.Record, statusCode i return err } +func filterRecordObject(object string, objectFields []string) string { + var rawObject map[string]interface{} + _ = json.Unmarshal([]byte(object), &rawObject) + + if rawObject == nil { + return object + } + + filteredObject := make(map[string]interface{}) + + for _, field := range objectFields { + fieldValue, ok := rawObject[field] + if !ok { + continue + } + filteredObject[field] = fieldValue + } + + return util.StructToJson(filteredObject) +} + func SendWebhooks(record *casvisorsdk.Record) error { webhooks, err := getWebhooksByOrganization("") if err != nil { @@ -271,7 +292,14 @@ func SendWebhooks(record *casvisorsdk.Record) error { errs := []error{} webhooks = getFilteredWebhooks(webhooks, record.Organization, record.Action) + + record2 := *record for _, webhook := range webhooks { + + if len(webhook.ObjectFields) != 0 && webhook.ObjectFields[0] != "All" { + record2.Object = filterRecordObject(record.Object, webhook.ObjectFields) + } + var user *User if webhook.IsUserExtended { user, err = getUser(record.Organization, record.User) @@ -287,12 +315,12 @@ func SendWebhooks(record *casvisorsdk.Record) error { } } - statusCode, respBody, err := sendWebhook(webhook, record, user) + statusCode, respBody, err := sendWebhook(webhook, &record2, user) if err != nil { errs = append(errs, err) } - err = addWebhookRecord(webhook, record, statusCode, respBody, err) + err = addWebhookRecord(webhook, &record2, statusCode, respBody, err) if err != nil { errs = append(errs, err) } diff --git a/object/webhook.go b/object/webhook.go index b0e56257..778a89a6 100644 --- a/object/webhook.go +++ b/object/webhook.go @@ -39,6 +39,7 @@ type Webhook struct { Headers []*Header `xorm:"mediumtext" json:"headers"` Events []string `xorm:"varchar(1000)" json:"events"` TokenFields []string `xorm:"varchar(1000)" json:"tokenFields"` + ObjectFields []string `xorm:"varchar(1000)" json:"objectFields"` IsUserExtended bool `json:"isUserExtended"` SingleOrgOnly bool `json:"singleOrgOnly"` IsEnabled bool `json:"isEnabled"` diff --git a/web/src/WebhookEditPage.js b/web/src/WebhookEditPage.js index dfd64647..53846252 100644 --- a/web/src/WebhookEditPage.js +++ b/web/src/WebhookEditPage.js @@ -144,6 +144,9 @@ class WebhookEditPage extends React.Component { if (["port"].includes(key)) { value = Setting.myParseInt(value); } + if (key === "objectFields") { + value = value.includes("All") ? ["All"] : value; + } return value; } @@ -294,6 +297,19 @@ class WebhookEditPage extends React.Component { + + + {Setting.getLabel(i18next.t("webhook:Object fields"), i18next.t("webhook:Object fields - Tooltip"))} : + + + + + {Setting.getLabel(i18next.t("webhook:Is user extended"), i18next.t("webhook:Is user extended - Tooltip"))} :