From 24a2656746cd997e2bc2fa5854523993130ca460 Mon Sep 17 00:00:00 2001 From: Revant Nandgaonkar Date: Thu, 14 Sep 2017 14:16:44 +0530 Subject: [PATCH] Only allow specified fields of doc --- frappe/integrations/doctype/webhook/webhook.py | 4 ++-- frappe/integrations/webhooks.py | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/frappe/integrations/doctype/webhook/webhook.py b/frappe/integrations/doctype/webhook/webhook.py index b65fbfa486..5f74b22ac4 100644 --- a/frappe/integrations/doctype/webhook/webhook.py +++ b/frappe/integrations/doctype/webhook/webhook.py @@ -14,7 +14,7 @@ class Webhook(Document): def validate(self): self.validate_docevent() self.validate_request_url() - self.validate_repeating_companies() + self.validate_repeating_fields() def validate_docevent(self): if self.webhook_doctype: is_submittable = frappe.get_value("DocType", self.webhook_doctype, "is_submittable") @@ -27,7 +27,7 @@ class Webhook(Document): raise frappe.ValidationError except Exception as e: frappe.throw(_("Check Request URL"), exc=e) - def validate_repeating_companies(self): + def validate_repeating_fields(self): """Error when Same Field is entered multiple times in webhook_data""" webhook_data = [] for entry in self.webhook_data: diff --git a/frappe/integrations/webhooks.py b/frappe/integrations/webhooks.py index 219dceaa8e..466a0f0470 100644 --- a/frappe/integrations/webhooks.py +++ b/frappe/integrations/webhooks.py @@ -2,12 +2,13 @@ # MIT License. See license.txt from __future__ import unicode_literals -import frappe, requests +import frappe, requests, json from frappe import _ # Doc Events Webhook def doc_event_webhook(doc, method=None, *args, **kwargs): headers = {} + data = {} filters = { "webhook_doctype": doc.get("doctype"), "webhook_docevent": method @@ -19,8 +20,13 @@ def doc_event_webhook(doc, method=None, *args, **kwargs): for h in webhook.webhook_headers: if h.get("key") and h.get("value"): headers[h.get("key")] = h.get("value") + if webhook.webhook_data: + for k, v in doc.as_dict().items(): + for w in webhook.webhook_data: + if k == w.fieldname: + data[w.key] = v try: - r = requests.post(webhook.request_url, data=doc.as_json(), headers=headers, timeout=5) + r = requests.post(webhook.request_url, data=json.dumps(data), headers=headers, timeout=5) frappe.logger().debug({"webhook_success":r.text, "webhook": webhook.as_json()}) except Exception as e: frappe.logger().debug({"webhook_error":r.text, "webhook": webhook.as_json()})