PluginProbe
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder / 51.1.86
King Addons for Elementor – 100+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce Builder, Mega Menu, Popup Builder v51.1.86
51.1.86 51.1.84 51.1.85 51.1.83 51.1.82 51.1.81 51.1.79 51.1.78 51.1.77 51.1.76 51.1.74 51.1.75 51.1.65 51.1.64 51.1.63 trunk 51.1.14 51.1.2 51.1.35 51.1.36 51.1.37 51.1.38 51.1.39 51.1.44 51.1.45 All 40 releases
← All changes | includes/widgets/Form_Builder/helpers/Send_Webhook.php +96 -0 51.1.2 → 51.1.86 View file →
@@ -1,0 +1,96 @@
1 +<?php
2 +
3 +namespace King_Addons;
4 +
5 +if (!defined('ABSPATH')) {
6 + exit;
7 +}
8 +
9 +class Send_Webhook
10 +{
11 +
12 + public function __construct()
13 + {
14 + add_action('wp_ajax_king_addons_form_builder_webhook', [$this, 'send_webhook']);
15 + add_action('wp_ajax_nopriv_king_addons_form_builder_webhook', [$this, 'send_webhook']);
16 + }
17 +
18 + public function send_webhook()
19 + {
20 + $nonce = $_POST['nonce'];
21 +
22 + // Security fix: Generate nonce server-side instead of relying on client-provided nonce
23 + $server_nonce = wp_create_nonce('king-addons-js');
24 + if (!wp_verify_nonce($nonce, 'king-addons-js')) {
25 + return;
26 + }
27 +
28 + Form_Builder_Security::guard_spam();
29 +
30 + $webhook_option_key = 'king_addons_webhook_url_' . $_POST['king_addons_form_id'];
31 + $webhook_url_raw = get_option($webhook_option_key);
32 + $webhook_url = $webhook_url_raw ? esc_url_raw(trim($webhook_url_raw)) : '';
33 +
34 + if (!$webhook_url || !wp_http_validate_url($webhook_url)) {
35 + wp_send_json_error([
36 + 'action' => 'king_addons_form_builder_webhook',
37 + 'message' => esc_html__('Invalid webhook URL.', 'king-addons'),
38 + 'status' => 'error',
39 + ]);
40 + }
41 +
42 + $parsed = parse_url($webhook_url);
43 + if (empty($parsed['scheme']) || !in_array($parsed['scheme'], ['http', 'https'], true)) {
44 + wp_send_json_error([
45 + 'action' => 'king_addons_form_builder_webhook',
46 + 'message' => esc_html__('Webhook URL must use http or https.', 'king-addons'),
47 + 'status' => 'error',
48 + ]);
49 + }
50 +
51 + $message_body = [];
52 +
53 + foreach ($_POST['form_content'] as $key => $value) {
54 + if (is_array($value[1])) {
55 + if (empty($value[2])) {
56 + $message_body[trim($key)] = implode("\n", $value[1]);
57 + } else {
58 + $message_body[trim($value[2])] = implode("\n", $value[1]);
59 + }
60 + } else {
61 + if (empty($value[2])) {
62 + $message_body[trim($key)] = $value[1];
63 + } else {
64 + $message_body[trim($value[2])] = $value[1];
65 + }
66 + }
67 + }
68 +
69 + $message_body['form_id'] = $_POST['king_addons_form_id'];
70 + $message_body['form_name'] = $_POST['form_name'];
71 +
72 + $args = [
73 + 'body' => $message_body,
74 + ];
75 +
76 + $response = wp_remote_post(trim(get_option('king_addons_webhook_url_' . $_POST['king_addons_form_id'])), $args);
77 +
78 + if (200 !== (int)wp_remote_retrieve_response_code($response)) {
79 + wp_send_json_error(array(
80 + 'action' => 'king_addons_form_builder_webhook',
81 + 'message' => esc_html__('Webhook error', 'king-addons'),
82 + 'status' => 'error',
83 + 'details' => json_encode($message_body)
84 + ));
85 + } else {
86 + wp_send_json_success(array(
87 + 'action' => 'king_addons_form_builder_webhook',
88 + 'message' => esc_html__('Webhook success', 'king-addons'),
89 + 'status' => 'success',
90 + 'details' => json_encode($message_body)
91 + ));
92 + }
93 + }
94 +}
95 +
96 +new Send_Webhook();