STRATO-apps/wordpress_03/app/wp-content/plugins/fluent-smtp/app/Services/NotificationHelper.php
SHA-256: df6a63de6fc680d8db1d213987db4aa620a64d1a492d1c489cc5578b637e7735
<?php
namespace FluentMail\App\Services;
use InvalidArgumentException;
use FluentMail\App\Models\Settings;
use FluentMail\App\Services\Notification\Manager as NotificationManager;
use FluentMail\Includes\Support\Arr;
class NotificationHelper
{
public static function getRemoteServerUrl()
{
if (defined('FLUENTSMTP_SERVER_REMOTE_SERVER_URL')) {
return FLUENTSMTP_SERVER_REMOTE_SERVER_URL;
}
return 'https://fluentsmtp.com/wp-json/fluentsmtp_notify/v1/';
}
public static function issueTelegramPinCode($data)
{
return self::sendTeleRequest('register-site', $data, 'POST');
}
public static function registerSlackSite($data)
{
return self::sendSlackRequest('register-site', $data, 'POST');
}
public static function getTelegramConnectionInfo($token)
{
return self::sendTeleRequest('get-site-info', [], 'GET', $token);
}
public static function sendTestTelegramMessage($token = '')
{
if (!$token) {
$settings = (new Settings())->notificationSettings();
$token = Arr::get($settings, 'telegram.token');
}
return self::sendTeleRequest('send-test', [], 'POST', $token);
}
public static function sendTestPushoverMessage($apiToken, $userKey)
{
$message = __('This is a test message for ', 'fluent-smtp') . site_url() . '. ' .
__('If you get this message, then your site is connected successfully.', 'fluent-smtp');
return self::sendPushoverMessage($message, $apiToken, $userKey, true, 1);
}
public static function disconnectTelegram($token)
{
self::sendTeleRequest('disconnect', [], 'POST', $token);
self::updateChannelSettings('telegram', [
'status' => 'no',
'token' => ''
]);
return true;
}
public static function getTelegramBotTokenId()
{
static $token = null;
if ($token !== null) {
return $token;
}
$settings = (new Settings())->notificationSettings();
$token = Arr::get($settings, 'telegram.token', false);
if (!$token) {
$token = false;
}
return $token;
}
public static function getSlackWebhookUrl()
{
static $url = null;
if ($url !== null) {
return $url;
}
$settings = (new Settings())->notificationSettings();
$url = Arr::get($settings, 'slack.webhook_url');
if (!$url) {
$url = false;
}
return $url;
}
public static function sendFailedNotificationTele($data)
{
wp_remote_post(self::getRemoteServerUrl() . 'telegram/send-failed-notification', array(
'timeout' => 0.01,
'blocking' => false,
'body' => $data,
'cookies' => false,
'sslverify' => false,
));
return true;
}
private static function sendTeleRequest($route, $data = [], $method = 'POST', $token = '')
{
$url = self::getRemoteServerUrl() . 'telegram/' . $route;
if ($token) {
$url .= '?site_token=' . $token;
}
if ($method == 'POST') {
$response = wp_remote_post($url, [
'body' => $data,
'sslverify' => false,
'timeout' => 50
]);
} else {
$response = wp_remote_get($url, [
'sslverify' => false,
'timeout' => 50
]);
}
if (is_wp_error($response)) {
return $response;
}
$responseCode = wp_remote_retrieve_response_code($response);
$body = wp_remote_retrieve_body($response);
$responseData = json_decode($body, true);
if (!$responseData || empty($responseData['success']) || $responseCode !== 200) {
return new \WP_Error('invalid_data', 'Something went wrong', $responseData);
}
return $responseData;
}
private static function sendSlackRequest($route, $data = [], $method = 'POST', $token = '')
{
$url = self::getRemoteServerUrl() . 'slack/' . $route;
if ($token) {
$url .= '?site_token=' . $token;
}
if ($method == 'POST') {
$response = wp_remote_post($url, [
'body' => $data,
'sslverify' => false,
'timeout' => 50
]);
} else {
$response = wp_remote_get($url, [
'sslverify' => false,
'timeout' => 50
]);
}
if (is_wp_error($response)) {
return $response;
}
$responseCode = wp_remote_retrieve_response_code($response);
$body = wp_remote_retrieve_body($response);
$responseData = json_decode($body, true);
if (!$responseData || empty($responseData['success']) || $responseCode !== 200) {
return new \WP_Error('invalid_data', 'Something went wrong', $responseData);
}
return $responseData;
}
public static function sendSlackMessage($message, $webhookUrl, $blocking = false)
{
if (is_array($message)) {
$body = wp_json_encode($message);
} else {
$body = wp_json_encode(array('text' => $message));
}
$args = array(
'body' => $body,
'headers' => array(
'Content-Type' => 'application/json',
),
'cookies' => null,
'timeout' => 60,
'redirection' => 5,
'blocking' => true,
'httpversion' => '1.0',
'sslverify' => false,
'data_format' => 'body',
);
if (!$blocking) {
$args['blocking'] = false;
$args['timeout'] = 0.01;
}
$response = wp_remote_post($webhookUrl, $args);
if (!$blocking) {
return true;
}
if (is_wp_error($response)) {
return $response;
}
$body = wp_remote_retrieve_body($response);
return json_decode($body, true);
}
public static function sendDiscordMessage($message, $webhookUrl, $blocking = false)
{
$body = wp_json_encode(array(
'content' => $message,
'username' => 'FluentSMTP'
));
$args = array(
'body' => $body,
'headers' => array(
'Content-Type' => 'application/json',
),
'timeout' => 60,
'redirection' => 5,
'blocking' => true,
'httpversion' => '1.0',
'sslverify' => false,
'data_format' => 'body',
);
if (!$blocking) {
$args['blocking'] = false;
$args['timeout'] = 0.01;
}
$response = wp_remote_post($webhookUrl, $args);
if (!$blocking) {
return true;
}
if (is_wp_error($response)) {
return $response;
}
$body = wp_remote_retrieve_body($response);
return json_decode($body, true);
}
public static function sendPushoverMessage($message, $apiToken, $userKey, $blocking = false, $priority = 1)
{
$title = sprintf(__('[%s] Failed to send email', 'fluent-smtp'), get_bloginfo('name'));
$args = array(
'body' => array(
'token' => $apiToken,
'user' => $userKey,
'message' => $message,
'title' => $title,
'priority' => $priority,
'html' => 1, // Enable HTML formatting
),
'timeout' => 60,
'redirection' => 5,
'blocking' => true,
'httpversion' => '1.0',
'sslverify' => true,
);
if (!$blocking) {
$args['blocking'] = false;
$args['timeout'] = 0.01;
}
$response = wp_remote_post('https://api.pushover.net/1/messages.json', $args);
if (!$blocking) {
return true;
}
if (is_wp_error($response)) {
return $response;
}
$responseCode = wp_remote_retrieve_response_code($response);
$body = wp_remote_retrieve_body($response);
$responseData = json_decode($body, true);
if ($responseCode !== 200 || empty($responseData['status']) || $responseData['status'] != 1) {
$errorMessage = __('Pushover API error', 'fluent-smtp');
if (!empty($responseData['errors'])) {
$errorMessage = is_array($responseData['errors']) ? implode(', ', $responseData['errors']) : $responseData['errors'];
}
return new \WP_Error('pushover_api_error', $errorMessage, $responseData);
}
return $responseData;
}
public static function formatSlackMessageBlock($handler, $logData = [])
{
$sendingTo = self::unserialize(Arr::get($logData, 'to'));
if (is_array($sendingTo)) {
$sendingTo = Arr::get($sendingTo, '0.email', '');
}
if (is_array($sendingTo) || !$sendingTo) {
$sendingTo = Arr::get($logData, 'to');
}
$heading = sprintf(__('[%s] Failed to send email', 'fluent-smtp'), get_bloginfo('name'));
return [
'text' => $heading,
'blocks' => [
[
'type' => 'header',
'text' => [
'type' => 'plain_text',
'text' => $heading,
"emoji" => true
]
],
[
'type' => 'section',
'fields' => [
[
'type' => "mrkdwn",
'text' => "*Website URL:*\n " . site_url()
],
[
'type' => "mrkdwn",
'text' => "*Sending Driver:*\n " . strtoupper($handler->getSetting('provider'))
],
[
'type' => "mrkdwn",
'text' => "*To Email Address:*\n " . $sendingTo
],
[
'type' => "mrkdwn",
'text' => "*Email Subject:*\n " . Arr::get($logData, 'subject')
]
]
],
[
'type' => 'section',
'text' => [
'type' => "mrkdwn",
'text' => "*Error Message:*\n ```" . self::getErrorMessageFromResponse(self::unserialize(Arr::get($logData, 'response'))) . "```"
]
],
[
'type' => 'section',
'text' => [
'type' => "mrkdwn",
'text' => "<" . admin_url('options-general.php?page=fluent-mail#/logs?per_page=10&page=1&status=failed&search=') . "|View Failed Email(s)>"
]
]
]
];
}
public static function formatDiscordMessageBlock($handler, $logData = [])
{
$sendingTo = self::unserialize(Arr::get($logData, 'to'));
if (is_array($sendingTo)) {
$sendingTo = Arr::get($sendingTo, '0.email', '');
}
if (is_array($sendingTo) || !$sendingTo) {
$sendingTo = Arr::get($logData, 'to');
}
$heading = sprintf(__('[%s] Failed to send email', 'fluent-smtp'), get_bloginfo('name'));
$content = '## ' . $heading . "\n";
$content .= __('**Website URL:** ', 'fluent-smtp') . site_url() . "\n";
$content .= __('**Sending Driver:** ', 'fluent-smtp') . strtoupper($handler->getSetting('provider')) . "\n";
$content .= __('**To Email Address:** ', 'fluent-smtp') . $sendingTo . "\n";
$content .= __('**Email Subject:** ', 'fluent-smtp') . Arr::get($logData, 'subject') . "\n";
$content .= __('**Error Message:** ```', 'fluent-smtp') . self::getErrorMessageFromResponse(self::unserialize(Arr::get($logData, 'response'))) . "```\n";
$content .= __('[View Failed Email(s)](', 'fluent-smtp') . admin_url('options-general.php?page=fluent-mail#/logs?per_page=10&page=1&status=failed&search=') . ')';
return $content;
}
public static function formatPushoverMessage($handler, $logData = [])
{
$sendingTo = self::unserialize(Arr::get($logData, 'to'));
if (is_array($sendingTo)) {
$sendingTo = Arr::get($sendingTo, '0.email', '');
}
if (is_array($sendingTo) || !$sendingTo) {
$sendingTo = Arr::get($logData, 'to');
}
$provider = strtoupper($handler->getSetting('provider'));
$subject = Arr::get($logData, 'subject');
$message = '<b>' . __('Website URL:', 'fluent-smtp') . '</b> ' . esc_html(site_url()) . "<br>";
$message .= '<b>' . __('Sending Driver:', 'fluent-smtp') . '</b> ' . esc_html($provider) . "<br>";
$message .= '<b>' . __('To Email Address:', 'fluent-smtp') . '</b> ' . esc_html($sendingTo) . "<br>";
$message .= '<b>' . __('Email Subject:', 'fluent-smtp') . '</b> ' . esc_html($subject) . "<br>";
$message .= '<b>' . __('Error Message:', 'fluent-smtp') . '</b><br>';
$message .= '<code>' . esc_html(self::getErrorMessageFromResponse(
self::unserialize(Arr::get($logData, 'response'))
)) . '</code><br>';
$logsUrl = admin_url(
'options-general.php?page=fluent-mail#/logs?per_page=10&page=1&status=failed&search='
);
$message .= '<a href="' . esc_url($logsUrl) . '">' . __('View Failed Email(s)', 'fluent-smtp') . '</a>';
return $message;
}
public static function getErrorMessageFromResponse($response)
{
if (!$response || !is_array($response)) {
return '';
}
if (!empty($response['fallback_response']['message'])) {
$message = $response['fallback_response']['message'];
} else {
$message = Arr::get($response, 'message');
}
if (!$message) {
return '';
}
if (!is_string($message)) {
$message = json_encode($message);
}
return $message;
}
protected static function unserialize($data)
{
if (is_serialized($data)) {
if (preg_match('/(^|;)O:[0-9]+:/', $data)) {
return '';
}
return unserialize(trim($data), ['allowed_classes' => false]);
}
return $data;
}
public static function updateChannelSettings($channelName, $channelSettings)
{
$settings = (new Settings())->notificationSettings();
$settings[$channelName] = $channelSettings;
$isActive = Arr::get($channelSettings, 'status') === 'yes' ? true : false;
$activeChannels = $settings['active_channel'];
if ($isActive) {
if (!in_array($channelName, $activeChannels)) {
$activeChannels[] = $channelName;
}
} else {
if (($key = array_search($channelName, $activeChannels)) !== false) {
unset($activeChannels[$key]);
}
}
$activeChannels = array_values($activeChannels);
$settings['active_channel'] = $activeChannels;
update_option('_fluent_smtp_notify_settings', $settings, false);
return true;
}
}