403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/main/lib/controller/mail/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/main/lib/controller/mail/sender.php
<?php

namespace Bitrix\Main\Controller\Mail;

use Bitrix\Main\Engine\Controller;
use Bitrix\Main\Engine\CurrentUser;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Mail;
use Bitrix\Main;
use Bitrix\Main\Error;

class Sender extends Controller
{
	public function getSenderDataAction(int $senderId): ?array
	{
		$sender = \Bitrix\Main\Mail\Internal\SenderTable::getById($senderId)->fetch();

		if (!$sender)
		{
			return null;
		}

		$smtp = $sender['OPTIONS']['smtp'] ?? [];

		if (!empty($smtp))
		{
			$response['smtp'] = [
				'server' => $smtp['server'] ?? null,
				'port' => $smtp['port'] ?? null,
				'protocol' => $smtp['protocol'] ?? null,
				'login' => $smtp['login'] ?? null,
				'limit' => $smtp['limit'] ?? null,
			];
		}

		return array_merge(
			$response['smtp'] ?? [],
			[
				'email' => $sender['EMAIL'],
				'name' => !empty($sender['NAME']) ? $sender['NAME'] : Mail\Sender\UserSenderDataProvider::getUserFormattedName((int)$sender['USER_ID']),
				'isPublic' => (int)$sender['IS_PUBLIC'] === 1,
			]
		);
	}

	public function getAvailableSendersAction(): array
	{
		return Main\Mail\Sender::prepareUserMailboxes();
	}

	public function getSenderTransitionalDataAction(int $senderId): ?array
	{
		return Mail\Sender\UserSenderDataProvider::getSenderTransitionalData($senderId);
	}

	public function getSenderByMailboxIdAction(int $mailboxId, bool $getSenderWithoutSmtp = false): ?array
	{
		return Mail\Sender\UserSenderDataProvider::getSenderNameByMailboxId($mailboxId, $getSenderWithoutSmtp);
	}

	public function getDefaultSenderNameAction(): string
	{
		return Mail\Sender\UserSenderDataProvider::getUserFormattedName() ?? '';
	}

	public function submitSenderAction(array $data): ?array
	{
		$name = trim((string)($data['name'] ?? ''));
		$public = $data['public'] === 'Y';
		$userId = (int)CurrentUser::get()->getId();

		$email = mb_strtolower(trim((string)($data['email'] ?? '')));
		if (!check_email($email, true))
		{
			$errorCode = empty($email) ? 'MAIN_CONTROLLER_MAIL_SENDER_EMPTY_EMAIL' : 'MAIN_CONTROLLER_MAIL_SENDER_INVALID_EMAIL';
			$this->addError(new Error(Loc::getMessage($errorCode), 'ERR_INVALID_EMAIL'));

			return null;
		}

		$senderId = (int)($data['id'] ?? null);
		if (!$senderId && Mail\Sender::hasUserSenderWithEmail($email))
		{
			$this->addError(new Error(Loc::getMessage('MAIN_CONTROLLER_MAIL_SENDER_EXISTS_SENDER'), 'ERR_EXISTS_SENDER'));

			return null;
		}

		$smtp = $data['smtp'] ?? [];

		if ($senderId)
		{
			$checkResult = Main\Mail\Sender::canEditSender($senderId);
			if (!$checkResult->isSuccess())
			{
				$this->addErrors($checkResult->getErrors());

				return null;
			}

			$sender = Mail\Internal\SenderTable::getById($senderId)->fetch();
			$userId = (int)$sender['USER_ID'];
			if (!empty($smtp) && empty($smtp['password']) && $sender['OPTIONS']['smtp'])
			{
				$smtp['password'] = $sender['OPTIONS']['smtp']['password'];
			}
		}

		if (!empty($smtp))
		{
			if (!is_array($smtp))
			{
				$this->addError(new Error(Loc::getMessage('MAIN_CONTROLLER_MAIL_SENDER_AJAX_ERROR'), 'ERR_EMAIL'));

				return null;
			}

			$result = Mail\Sender::prepareSmtpConfigForSender($smtp);

			if (!$result->isSuccess())
			{
				$error = $result->getErrors()[0];
				$this->addError(new Error($error->getMessage(), 'ERR_SMTP_CONFIG'));

				return null;
			}
		}

		$fields = [
			'NAME' => $name,
			'EMAIL' => $email,
			'USER_ID' => $userId,
			'IS_CONFIRMED' => true,
			'IS_PUBLIC' => $public,
			'OPTIONS' => [],
		];

		if (!empty($smtp))
		{
			$fields['OPTIONS']['smtp'] = $smtp;
		}

		if (!$senderId)
		{
			$result = Main\Mail\Sender::add($fields);

			if (!empty($result['error']))
			{
				$this->addError($result['error']);

				return null;
			}

			if (!empty($result['errors']))
			{
				$this->addError($result['errors'][0]);

				return null;
			}

			$senderId = $result['senderId'] ?? null;
		}
		else
		{
			$updateResult = Mail\Internal\SenderTable::update($senderId, $fields);

			if(!$updateResult->isSuccess())
			{
				$this->addError($updateResult->getErrors()[0]);

				return null;
			}
		}

		if ($smtp && $smtp['limit'] !== null)
		{
			Main\Mail\Sender::setEmailLimit($email, $smtp['limit']);
		}
		elseif ($smtp && !isset($smtp['limit']))
		{
			Main\Mail\Sender::removeEmailLimit($email);
		}

		return [
			'senderId' => $senderId ?? null,
			'name' => !empty($name) ? $name : Mail\Sender\UserSenderDataProvider::getUserFormattedName($userId),
		];
	}

	/**
	 * Add Sender without smtp-server settings
	 */
	public function addAliasAction(string $name, string $email): ?array
	{
		$userId = (int)CurrentUser::get()->getId();

		if (!$userId)
		{
			return null;
		}

		if (!Main\Mail\Sender::hasUserAvailableSmtpSenderByEmail($email, $userId))
		{
			return null;
		}

		$result = Main\Mail\Sender::add([
			'NAME' => $name,
			'EMAIL' => $email,
			'IS_CONFIRMED' => true,
			'USER_ID' => $userId,
		]);

		if (!empty($result['error']))
		{
			$this->addError(new Error($result['error'], 'ERR_ADD_SENDER'));

			return null;
		}

		$userData = Mail\Sender\UserSenderDataProvider::getUserInfo($userId);
		$result['avatar'] = $userData['userAvatar'] ?? null;
		$result['userUrl'] = $userData['userUrl'] ?? null;

		return $result;
	}

	public function deleteSenderAction(int $senderId): void
	{
		$checkResult = Main\Mail\Sender::canEditSender($senderId);
		if (!$checkResult->isSuccess())
		{
			$this->addErrors($checkResult->getErrors());

			return;
		}

		Main\Mail\Sender::delete([$senderId]);
	}

	public function updateSenderNameAction(int $senderId, string $name): void
	{
		$result = Main\Mail\Sender::updateSender($senderId, ['NAME' => $name]);
		if (!$result->isSuccess())
		{
			$this->addErrors($result->getErrors());
		}
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit