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"))} :