PluginProbe
Fluent Support – Helpdesk & Customer Support Ticket System / 2.4.5
Fluent Support – Helpdesk & Customer Support Ticket System v2.4.5
2.4.5 2.4.0 2.3.2 2.3.1 2.3.0 2.2.1 2.2.0 trunk 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.10.5 1.4.0 1.4.1 1.4.2 1.4.5 1.4.6 1.4.7 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 All 69 releases
fluent-support / app / Http / Controllers / ChatMessageParserController.php

ChatMessageParserController.php in Fluent Support – Helpdesk & Customer Support Ticket System 2.4.5, at app/Http/Controllers/ChatMessageParserController.php

101 lines 3.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentSupport\App\Http\Controllers;
4
5 use FluentSupport\Framework\Http\Request\Request;
6 use FluentSupport\App\Services\Helper;
7 use FluentSupport\App\Services\ThirdParty\HandleSlackEvent;
8 use FluentSupport\App\Services\ThirdParty\HandleTelegramEvent;
9
10 /**
11 * Incoming webhooks from chat integrations (Telegram, Slack).
12 */
13
14 class ChatMessageParserController extends Controller
15 {
16 /**
17 * Records a Telegram reply as a ticket response.
18 *
19 * @param Request $request
20 * @param HandleTelegramEvent $handler
21 * @param string $token
22 * @throws Exception
23 * @return mixed
24 */
25 public function handleTelegramWebhook(Request $request, HandleTelegramEvent $handler, $token)
26 {
27 if (!$this->verifyWebhookSignature('telegram', $request)) {
28 return $this->sendError([
29 'message' => __('Invalid request signature.', 'fluent-support'),
30 'status' => false
31 ], 403);
32 }
33
34 try {
35 return $this->sendSuccess([
36 'message' => __('Response has been successfully recorded', 'fluent-support'),
37 'status' => true,
38 'data' => $handler->handleEvent($request->all(), $token)
39 ]);
40 } catch (\Exception $e) {
41 return $this->sendError([
42 'message' => Helper::getSafeErrorMessage($e),
43 'status' => false
44 ]);
45 }
46 }
47
48 /**
49 * @param Request $request
50 * @param HandleSlackEvent $handler
51 * @param string $token
52 * @return array
53 */
54 public function handleSlackEvent(Request $request, HandleSlackEvent $handler, $token)
55 {
56 if (!$this->verifyWebhookSignature('slack', $request)) {
57 return $this->sendError([
58 'message' => __('Invalid request signature.', 'fluent-support'),
59 'status' => false
60 ], 403);
61 }
62
63 if ($request->getSafe('type', 'sanitize_text_field') === 'url_verification') {
64 return new \WP_REST_Response($request->getSafe('challenge', 'sanitize_text_field'), 200, [
65 'Content-Type' => 'text/plain; charset=utf-8'
66 ]);
67 }
68
69 try {
70 return $this->sendSuccess([
71 'message' => 'received',
72 'result' => $handler->handleEvent($token)
73 ]);
74 } catch (\Exception $e) {
75 return $this->sendError([
76 'message' => Helper::getSafeErrorMessage($e),
77 'status' => false
78 ]);
79 }
80 }
81
82 /**
83 * Signature checks are opt-in via fluent_support/verify_webhook_signature_{platform}.
84 * With no verifier hooked, the handlers' token check is the only guard.
85 *
86 * @param string $platform 'telegram' or 'slack'
87 * @param Request $request
88 * @return bool
89 */
90 private function verifyWebhookSignature($platform, Request $request)
91 {
92 $hookName = 'fluent_support/verify_webhook_signature_' . $platform;
93
94 if (!has_filter($hookName)) {
95 return true;
96 }
97
98 return (bool) apply_filters($hookName, false, $request);
99 }
100 }
101