From 85ac64ddd9794f3f77115b25e51f441041ad0acc Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Mon, 19 Jun 2023 13:18:25 +0530 Subject: [PATCH 01/23] fix: log errors while getting headers and data --- .../integrations/doctype/webhook/webhook.py | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/frappe/integrations/doctype/webhook/webhook.py b/frappe/integrations/doctype/webhook/webhook.py index 6fa24bfb67..711a565971 100644 --- a/frappe/integrations/doctype/webhook/webhook.py +++ b/frappe/integrations/doctype/webhook/webhook.py @@ -112,16 +112,21 @@ def get_context(doc): def enqueue_webhook(doc, webhook) -> None: - webhook: Webhook = frappe.get_doc("Webhook", webhook.get("name")) - headers = get_webhook_headers(doc, webhook) - data = get_webhook_data(doc, webhook) + try: + webhook: Webhook = frappe.get_doc("Webhook", webhook.get("name")) + headers = get_webhook_headers(doc, webhook) + data = get_webhook_data(doc, webhook) - if webhook.is_dynamic_url: - request_url = frappe.render_template(webhook.request_url, get_context(doc)) - else: - request_url = webhook.request_url + if webhook.is_dynamic_url: + request_url = frappe.render_template(webhook.request_url, get_context(doc)) + else: + request_url = webhook.request_url + + r = None + except Exception as e: + frappe.logger().debug({"enqueue_webhook_error": e}) + log_request(webhook.name, doc.name, request_url, headers, data, r) - r = None for i in range(3): try: r = requests.request( From 74cc21013fbd954229d98cf8d802ad56706562d3 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Mon, 19 Jun 2023 13:46:27 +0530 Subject: [PATCH 02/23] fix: validate webhook secret --- frappe/integrations/doctype/webhook/webhook.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/frappe/integrations/doctype/webhook/webhook.py b/frappe/integrations/doctype/webhook/webhook.py index 711a565971..2431fe2886 100644 --- a/frappe/integrations/doctype/webhook/webhook.py +++ b/frappe/integrations/doctype/webhook/webhook.py @@ -26,6 +26,7 @@ class Webhook(Document): self.validate_request_url() self.validate_request_body() self.validate_repeating_fields() + self.validate_secret() self.preview_document = None def on_update(self): @@ -74,6 +75,13 @@ class Webhook(Document): if len(webhook_data) != len(set(webhook_data)): frappe.throw(_("Same Field is entered more than once")) + def validate_secret(self): + if self.enable_security and self.webhook_secret: + try: + self.get_password("webhook_secret", False).encode("utf8") + except Exception: + frappe.throw(_("Invalid Webhook Secret")) + @frappe.whitelist() def generate_preview(self): # This function doesn't need to do anything specific as virtual fields From 3f792a80b1036a7e2c1c28cdd9f1e3f817968f42 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 23 Jun 2023 16:29:39 +0530 Subject: [PATCH 03/23] fix: return if exception occur before executing webhook --- frappe/integrations/doctype/webhook/webhook.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frappe/integrations/doctype/webhook/webhook.py b/frappe/integrations/doctype/webhook/webhook.py index 2431fe2886..c798c64c2c 100644 --- a/frappe/integrations/doctype/webhook/webhook.py +++ b/frappe/integrations/doctype/webhook/webhook.py @@ -130,10 +130,10 @@ def enqueue_webhook(doc, webhook) -> None: else: request_url = webhook.request_url - r = None except Exception as e: frappe.logger().debug({"enqueue_webhook_error": e}) - log_request(webhook.name, doc.name, request_url, headers, data, r) + log_request(webhook.name, doc.name, request_url, headers, data) + return for i in range(3): try: From fe27b8c7e0c622365fe2b034ca5b7bf37bcd7464 Mon Sep 17 00:00:00 2001 From: Shariq Ansari <30859809+shariquerik@users.noreply.github.com> Date: Fri, 23 Jun 2023 16:31:55 +0530 Subject: [PATCH 04/23] fix: removed redundant condition Co-authored-by: Ankush Menat --- frappe/integrations/doctype/webhook/webhook.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/integrations/doctype/webhook/webhook.py b/frappe/integrations/doctype/webhook/webhook.py index c798c64c2c..5b8c653198 100644 --- a/frappe/integrations/doctype/webhook/webhook.py +++ b/frappe/integrations/doctype/webhook/webhook.py @@ -76,7 +76,7 @@ class Webhook(Document): frappe.throw(_("Same Field is entered more than once")) def validate_secret(self): - if self.enable_security and self.webhook_secret: + if self.enable_security: try: self.get_password("webhook_secret", False).encode("utf8") except Exception: From b9bd05581323085d44b365b2027ad011e180bc04 Mon Sep 17 00:00:00 2001 From: Hussain Nagaria Date: Tue, 27 Jun 2023 17:10:46 +0530 Subject: [PATCH 05/23] fix(WebForm): auto-increment link field --- frappe/public/js/frappe/form/controls/autocomplete.js | 9 +++++++++ frappe/website/doctype/web_form/web_form.py | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/form/controls/autocomplete.js b/frappe/public/js/frappe/form/controls/autocomplete.js index 27bf75e807..c0674956e9 100644 --- a/frappe/public/js/frappe/form/controls/autocomplete.js +++ b/frappe/public/js/frappe/form/controls/autocomplete.js @@ -174,6 +174,15 @@ frappe.ui.form.ControlAutocomplete = class ControlAutoComplete extends frappe.ui if (typeof options[0] === "string") { options = options.map((o) => ({ label: o, value: o })); } + + options = options.map((o) => { + if (typeof o !== "string") { + o.label = o.label.toString(); + o.value = o.value.toString(); + } + return o; + }); + return options; } diff --git a/frappe/website/doctype/web_form/web_form.py b/frappe/website/doctype/web_form/web_form.py index fd9949c45f..75f8793b4a 100644 --- a/frappe/website/doctype/web_form/web_form.py +++ b/frappe/website/doctype/web_form/web_form.py @@ -631,7 +631,7 @@ def get_link_options(web_form_name, doctype, allow_read_on_all_link_options=Fals if title_field and show_title_field_in_link: return json.dumps(link_options, default=str) else: - return "\n".join([doc.value for doc in link_options]) + return "\n".join([str(doc.value) for doc in link_options]) else: raise frappe.PermissionError( From aaf1bd7f4bcd21db2e36888ac48d91d2260f772f Mon Sep 17 00:00:00 2001 From: Hussain Nagaria Date: Wed, 28 Jun 2023 11:46:17 +0530 Subject: [PATCH 06/23] style: fix linter whitespace issue --- frappe/public/js/frappe/form/controls/autocomplete.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/form/controls/autocomplete.js b/frappe/public/js/frappe/form/controls/autocomplete.js index c0674956e9..7b91a2031c 100644 --- a/frappe/public/js/frappe/form/controls/autocomplete.js +++ b/frappe/public/js/frappe/form/controls/autocomplete.js @@ -182,7 +182,7 @@ frappe.ui.form.ControlAutocomplete = class ControlAutoComplete extends frappe.ui } return o; }); - + return options; } From 814265d24581ca6024ebdf8c4e53df95ac060726 Mon Sep 17 00:00:00 2001 From: Maharshi Patel <39730881+maharshivpatel@users.noreply.github.com> Date: Wed, 28 Jun 2023 13:34:36 +0530 Subject: [PATCH 07/23] fix(minor): workflow state indicator (#21508) In List view only `Status` type was considered for indicator. Added fields with `Workflow State` as options --- frappe/public/js/frappe/list/list_view.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/list/list_view.js b/frappe/public/js/frappe/list/list_view.js index c0eef27b9d..1ca72a4e45 100644 --- a/frappe/public/js/frappe/list/list_view.js +++ b/frappe/public/js/frappe/list/list_view.js @@ -711,7 +711,7 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { } get_column_html(col, doc) { - if (col.type === "Status") { + if (col.type === "Status" || col.df?.options == "Workflow State") { return `