Diff: STRATO-apps/wordpress_03/app/wp-content/plugins/fluent-smtp/app/Services/NotificationHelper.php
Keine Baseline-Datei – Diff nur gegen leer.
1
-
1
+
<?php
2
+
3
+
namespace FluentMail\App\Services;
4
+
5
+
use InvalidArgumentException;
6
+
use FluentMail\App\Models\Settings;
7
+
use FluentMail\App\Services\Notification\Manager as NotificationManager;
8
+
use FluentMail\Includes\Support\Arr;
9
+
10
+
class NotificationHelper
11
+
{
12
+
public static function getRemoteServerUrl()
13
+
{
14
+
if (defined('FLUENTSMTP_SERVER_REMOTE_SERVER_URL')) {
15
+
return FLUENTSMTP_SERVER_REMOTE_SERVER_URL;
16
+
}
17
+
18
+
return 'https://fluentsmtp.com/wp-json/fluentsmtp_notify/v1/';
19
+
}
20
+
21
+
public static function issueTelegramPinCode($data)
22
+
{
23
+
return self::sendTeleRequest('register-site', $data, 'POST');
24
+
}
25
+
26
+
public static function registerSlackSite($data)
27
+
{
28
+
return self::sendSlackRequest('register-site', $data, 'POST');
29
+
}
30
+
31
+
public static function getTelegramConnectionInfo($token)
32
+
{
33
+
return self::sendTeleRequest('get-site-info', [], 'GET', $token);
34
+
}
35
+
36
+
public static function sendTestTelegramMessage($token = '')
37
+
{
38
+
if (!$token) {
39
+
$settings = (new Settings())->notificationSettings();
40
+
$token = Arr::get($settings, 'telegram.token');
41
+
}
42
+
43
+
return self::sendTeleRequest('send-test', [], 'POST', $token);
44
+
}
45
+
46
+
public static function sendTestPushoverMessage($apiToken, $userKey)
47
+
{
48
+
$message = __('This is a test message for ', 'fluent-smtp') . site_url() . '. ' .
49
+
__('If you get this message, then your site is connected successfully.', 'fluent-smtp');
50
+
51
+
return self::sendPushoverMessage($message, $apiToken, $userKey, true, 1);
52
+
}
53
+
54
+
public static function disconnectTelegram($token)
55
+
{
56
+
self::sendTeleRequest('disconnect', [], 'POST', $token);
57
+
58
+
self::updateChannelSettings('telegram', [
59
+
'status' => 'no',
60
+
'token' => ''
61
+
]);
62
+
63
+
return true;
64
+
}
65
+
66
+
public static function getTelegramBotTokenId()
67
+
{
68
+
static $token = null;
69
+
70
+
if ($token !== null) {
71
+
return $token;
72
+
}
73
+
74
+
$settings = (new Settings())->notificationSettings();
75
+
76
+
$token = Arr::get($settings, 'telegram.token', false);
77
+
78
+
if (!$token) {
79
+
$token = false;
80
+
}
81
+
82
+
return $token;
83
+
}
84
+
85
+
public static function getSlackWebhookUrl()
86
+
{
87
+
static $url = null;
88
+
89
+
if ($url !== null) {
90
+
return $url;
91
+
}
92
+
93
+
$settings = (new Settings())->notificationSettings();
94
+
95
+
$url = Arr::get($settings, 'slack.webhook_url');
96
+
97
+
if (!$url) {
98
+
$url = false;
99
+
}
100
+
101
+
return $url;
102
+
}
103
+
104
+
public static function sendFailedNotificationTele($data)
105
+
{
106
+
wp_remote_post(self::getRemoteServerUrl() . 'telegram/send-failed-notification', array(
107
+
'timeout' => 0.01,
108
+
'blocking' => false,
109
+
'body' => $data,
110
+
'cookies' => false,
111
+
'sslverify' => false,
112
+
));
113
+
114
+
return true;
115
+
}
116
+
117
+
private static function sendTeleRequest($route, $data = [], $method = 'POST', $token = '')
118
+
{
119
+
$url = self::getRemoteServerUrl() . 'telegram/' . $route;
120
+
121
+
if ($token) {
122
+
$url .= '?site_token=' . $token;
123
+
}
124
+
125
+
if ($method == 'POST') {
126
+
$response = wp_remote_post($url, [
127
+
'body' => $data,
128
+
'sslverify' => false,
129
+
'timeout' => 50
130
+
]);
131
+
} else {
132
+
$response = wp_remote_get($url, [
133
+
'sslverify' => false,
134
+
'timeout' => 50
135
+
]);
136
+
}
137
+
138
+
if (is_wp_error($response)) {
139
+
return $response;
140
+
}
141
+
142
+
$responseCode = wp_remote_retrieve_response_code($response);
143
+
144
+
$body = wp_remote_retrieve_body($response);
145
+
$responseData = json_decode($body, true);
146
+
147
+
if (!$responseData || empty($responseData['success']) || $responseCode !== 200) {
148
+
return new \WP_Error('invalid_data', 'Something went wrong', $responseData);
149
+
}
150
+
151
+
return $responseData;
152
+
}
153
+
154
+
private static function sendSlackRequest($route, $data = [], $method = 'POST', $token = '')
155
+
{
156
+
$url = self::getRemoteServerUrl() . 'slack/' . $route;
157
+
158
+
if ($token) {
159
+
$url .= '?site_token=' . $token;
160
+
}
161
+
162
+
if ($method == 'POST') {
163
+
$response = wp_remote_post($url, [
164
+
'body' => $data,
165
+
'sslverify' => false,
166
+
'timeout' => 50
167
+
]);
168
+
} else {
169
+
$response = wp_remote_get($url, [
170
+
'sslverify' => false,
171
+
'timeout' => 50
172
+
]);
173
+
}
174
+
175
+
if (is_wp_error($response)) {
176
+
return $response;
177
+
}
178
+
179
+
$responseCode = wp_remote_retrieve_response_code($response);
180
+
181
+
$body = wp_remote_retrieve_body($response);
182
+
183
+
$responseData = json_decode($body, true);
184
+
185
+
if (!$responseData || empty($responseData['success']) || $responseCode !== 200) {
186
+
return new \WP_Error('invalid_data', 'Something went wrong', $responseData);
187
+
}
188
+
189
+
return $responseData;
190
+
}
191
+
192
+
public static function sendSlackMessage($message, $webhookUrl, $blocking = false)
193
+
{
194
+
195
+
if (is_array($message)) {
196
+
$body = wp_json_encode($message);
197
+
} else {
198
+
$body = wp_json_encode(array('text' => $message));
199
+
}
200
+
201
+
$args = array(
202
+
'body' => $body,
203
+
'headers' => array(
204
+
'Content-Type' => 'application/json',
205
+
),
206
+
'cookies' => null,
207
+
'timeout' => 60,
208
+
'redirection' => 5,
209
+
'blocking' => true,
210
+
'httpversion' => '1.0',
211
+
'sslverify' => false,
212
+
'data_format' => 'body',
213
+
);
214
+
215
+
if (!$blocking) {
216
+
$args['blocking'] = false;
217
+
$args['timeout'] = 0.01;
218
+
}
219
+
220
+
$response = wp_remote_post($webhookUrl, $args);
221
+
222
+
if (!$blocking) {
223
+
return true;
224
+
}
225
+
226
+
if (is_wp_error($response)) {
227
+
return $response;
228
+
}
229
+
230
+
231
+
$body = wp_remote_retrieve_body($response);
232
+
233
+
234
+
return json_decode($body, true);
235
+
}
236
+
237
+
public static function sendDiscordMessage($message, $webhookUrl, $blocking = false)
238
+
{
239
+
$body = wp_json_encode(array(
240
+
'content' => $message,
241
+
'username' => 'FluentSMTP'
242
+
));
243
+
244
+
$args = array(
245
+
'body' => $body,
246
+
'headers' => array(
247
+
'Content-Type' => 'application/json',
248
+
),
249
+
'timeout' => 60,
250
+
'redirection' => 5,
251
+
'blocking' => true,
252
+
'httpversion' => '1.0',
253
+
'sslverify' => false,
254
+
'data_format' => 'body',
255
+
);
256
+
257
+
if (!$blocking) {
258
+
$args['blocking'] = false;
259
+
$args['timeout'] = 0.01;
260
+
}
261
+
262
+
$response = wp_remote_post($webhookUrl, $args);
263
+
264
+
if (!$blocking) {
265
+
return true;
266
+
}
267
+
268
+
if (is_wp_error($response)) {
269
+
return $response;
270
+
}
271
+
272
+
$body = wp_remote_retrieve_body($response);
273
+
return json_decode($body, true);
274
+
}
275
+
276
+
public static function sendPushoverMessage($message, $apiToken, $userKey, $blocking = false, $priority = 1)
277
+
{
278
+
$title = sprintf(__('[%s] Failed to send email', 'fluent-smtp'), get_bloginfo('name'));
279
+
280
+
$args = array(
281
+
'body' => array(
282
+
'token' => $apiToken,
283
+
'user' => $userKey,
284
+
'message' => $message,
285
+
'title' => $title,
286
+
'priority' => $priority,
287
+
'html' => 1, // Enable HTML formatting
288
+
),
289
+
'timeout' => 60,
290
+
'redirection' => 5,
291
+
'blocking' => true,
292
+
'httpversion' => '1.0',
293
+
'sslverify' => true,
294
+
);
295
+
296
+
if (!$blocking) {
297
+
$args['blocking'] = false;
298
+
$args['timeout'] = 0.01;
299
+
}
300
+
301
+
$response = wp_remote_post('https://api.pushover.net/1/messages.json', $args);
302
+
303
+
if (!$blocking) {
304
+
return true;
305
+
}
306
+
307
+
if (is_wp_error($response)) {
308
+
return $response;
309
+
}
310
+
311
+
$responseCode = wp_remote_retrieve_response_code($response);
312
+
$body = wp_remote_retrieve_body($response);
313
+
$responseData = json_decode($body, true);
314
+
315
+
if ($responseCode !== 200 || empty($responseData['status']) || $responseData['status'] != 1) {
316
+
$errorMessage = __('Pushover API error', 'fluent-smtp');
317
+
if (!empty($responseData['errors'])) {
318
+
$errorMessage = is_array($responseData['errors']) ? implode(', ', $responseData['errors']) : $responseData['errors'];
319
+
}
320
+
return new \WP_Error('pushover_api_error', $errorMessage, $responseData);
321
+
}
322
+
323
+
return $responseData;
324
+
}
325
+
326
+
public static function formatSlackMessageBlock($handler, $logData = [])
327
+
{
328
+
$sendingTo = self::unserialize(Arr::get($logData, 'to'));
329
+
330
+
if (is_array($sendingTo)) {
331
+
$sendingTo = Arr::get($sendingTo, '0.email', '');
332
+
}
333
+
334
+
if (is_array($sendingTo) || !$sendingTo) {
335
+
$sendingTo = Arr::get($logData, 'to');
336
+
}
337
+
338
+
$heading = sprintf(__('[%s] Failed to send email', 'fluent-smtp'), get_bloginfo('name'));
339
+
340
+
return [
341
+
'text' => $heading,
342
+
'blocks' => [
343
+
[
344
+
'type' => 'header',
345
+
'text' => [
346
+
'type' => 'plain_text',
347
+
'text' => $heading,
348
+
"emoji" => true
349
+
]
350
+
],
351
+
[
352
+
'type' => 'section',
353
+
'fields' => [
354
+
[
355
+
'type' => "mrkdwn",
356
+
'text' => "*Website URL:*\n " . site_url()
357
+
],
358
+
[
359
+
'type' => "mrkdwn",
360
+
'text' => "*Sending Driver:*\n " . strtoupper($handler->getSetting('provider'))
361
+
],
362
+
[
363
+
'type' => "mrkdwn",
364
+
'text' => "*To Email Address:*\n " . $sendingTo
365
+
],
366
+
[
367
+
'type' => "mrkdwn",
368
+
'text' => "*Email Subject:*\n " . Arr::get($logData, 'subject')
369
+
]
370
+
]
371
+
],
372
+
[
373
+
'type' => 'section',
374
+
'text' => [
375
+
'type' => "mrkdwn",
376
+
'text' => "*Error Message:*\n ```" . self::getErrorMessageFromResponse(self::unserialize(Arr::get($logData, 'response'))) . "```"
377
+
]
378
+
],
379
+
[
380
+
'type' => 'section',
381
+
'text' => [
382
+
'type' => "mrkdwn",
383
+
'text' => "<" . admin_url('options-general.php?page=fluent-mail#/logs?per_page=10&page=1&status=failed&search=') . "|View Failed Email(s)>"
384
+
]
385
+
]
386
+
]
387
+
];
388
+
}
389
+
390
+
public static function formatDiscordMessageBlock($handler, $logData = [])
391
+
{
392
+
$sendingTo = self::unserialize(Arr::get($logData, 'to'));
393
+
394
+
if (is_array($sendingTo)) {
395
+
$sendingTo = Arr::get($sendingTo, '0.email', '');
396
+
}
397
+
398
+
if (is_array($sendingTo) || !$sendingTo) {
399
+
$sendingTo = Arr::get($logData, 'to');
400
+
}
401
+
402
+
$heading = sprintf(__('[%s] Failed to send email', 'fluent-smtp'), get_bloginfo('name'));
403
+
404
+
$content = '## ' . $heading . "\n";
405
+
$content .= __('**Website URL:** ', 'fluent-smtp') . site_url() . "\n";
406
+
$content .= __('**Sending Driver:** ', 'fluent-smtp') . strtoupper($handler->getSetting('provider')) . "\n";
407
+
$content .= __('**To Email Address:** ', 'fluent-smtp') . $sendingTo . "\n";
408
+
$content .= __('**Email Subject:** ', 'fluent-smtp') . Arr::get($logData, 'subject') . "\n";
409
+
$content .= __('**Error Message:** ```', 'fluent-smtp') . self::getErrorMessageFromResponse(self::unserialize(Arr::get($logData, 'response'))) . "```\n";
410
+
$content .= __('[View Failed Email(s)](', 'fluent-smtp') . admin_url('options-general.php?page=fluent-mail#/logs?per_page=10&page=1&status=failed&search=') . ')';
411
+
412
+
return $content;
413
+
}
414
+
415
+
public static function formatPushoverMessage($handler, $logData = [])
416
+
{
417
+
$sendingTo = self::unserialize(Arr::get($logData, 'to'));
418
+
419
+
if (is_array($sendingTo)) {
420
+
$sendingTo = Arr::get($sendingTo, '0.email', '');
421
+
}
422
+
423
+
if (is_array($sendingTo) || !$sendingTo) {
424
+
$sendingTo = Arr::get($logData, 'to');
425
+
}
426
+
427
+
$provider = strtoupper($handler->getSetting('provider'));
428
+
$subject = Arr::get($logData, 'subject');
429
+
430
+
$message = '<b>' . __('Website URL:', 'fluent-smtp') . '</b> ' . esc_html(site_url()) . "<br>";
431
+
$message .= '<b>' . __('Sending Driver:', 'fluent-smtp') . '</b> ' . esc_html($provider) . "<br>";
432
+
$message .= '<b>' . __('To Email Address:', 'fluent-smtp') . '</b> ' . esc_html($sendingTo) . "<br>";
433
+
$message .= '<b>' . __('Email Subject:', 'fluent-smtp') . '</b> ' . esc_html($subject) . "<br>";
434
+
$message .= '<b>' . __('Error Message:', 'fluent-smtp') . '</b><br>';
435
+
$message .= '<code>' . esc_html(self::getErrorMessageFromResponse(
436
+
self::unserialize(Arr::get($logData, 'response'))
437
+
)) . '</code><br>';
438
+
$logsUrl = admin_url(
439
+
'options-general.php?page=fluent-mail#/logs?per_page=10&page=1&status=failed&search='
440
+
);
441
+
$message .= '<a href="' . esc_url($logsUrl) . '">' . __('View Failed Email(s)', 'fluent-smtp') . '</a>';
442
+
443
+
return $message;
444
+
}
445
+
446
+
public static function getErrorMessageFromResponse($response)
447
+
{
448
+
if (!$response || !is_array($response)) {
449
+
return '';
450
+
}
451
+
452
+
if (!empty($response['fallback_response']['message'])) {
453
+
$message = $response['fallback_response']['message'];
454
+
} else {
455
+
$message = Arr::get($response, 'message');
456
+
}
457
+
458
+
if (!$message) {
459
+
return '';
460
+
}
461
+
462
+
if (!is_string($message)) {
463
+
$message = json_encode($message);
464
+
}
465
+
466
+
return $message;
467
+
}
468
+
469
+
protected static function unserialize($data)
470
+
{
471
+
if (is_serialized($data)) {
472
+
if (preg_match('/(^|;)O:[0-9]+:/', $data)) {
473
+
return '';
474
+
}
475
+
return unserialize(trim($data), ['allowed_classes' => false]);
476
+
}
477
+
478
+
return $data;
479
+
}
480
+
481
+
public static function updateChannelSettings($channelName, $channelSettings)
482
+
{
483
+
$settings = (new Settings())->notificationSettings();
484
+
485
+
$settings[$channelName] = $channelSettings;
486
+
487
+
$isActive = Arr::get($channelSettings, 'status') === 'yes' ? true : false;
488
+
489
+
$activeChannels = $settings['active_channel'];
490
+
491
+
if ($isActive) {
492
+
if (!in_array($channelName, $activeChannels)) {
493
+
$activeChannels[] = $channelName;
494
+
}
495
+
} else {
496
+
if (($key = array_search($channelName, $activeChannels)) !== false) {
497
+
unset($activeChannels[$key]);
498
+
}
499
+
}
500
+
501
+
$activeChannels = array_values($activeChannels);
502
+
$settings['active_channel'] = $activeChannels;
503
+
504
+
update_option('_fluent_smtp_notify_settings', $settings, false);
505
+
506
+
return true;
507
+
}
508
+
}
509
+