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/cvetdv.ru/bitrix/modules/main/lib/mail/smtp/ |
Upload File : |
<?php namespace Bitrix\Main\Mail\Smtp; use Bitrix\Mail\Helper\OAuth; use Bitrix\Main\Config\Option; class OAuthConfigPreparer { public function prepareBeforeSendIfNeed(Config $config): ?Config { if (!$config->getIsOauth()) { return $config; } if (!\CModule::includeModule('mail')) { return null; } $expireGapSeconds = self::getOAuthTokenExpireGapSeconds(); $mailOAuth = OAuth::getInstanceByMeta($config->getPassword()); if ($mailOAuth) { $token = $mailOAuth->getStoredToken(null, $expireGapSeconds); if ($token) { // method should be used after retrieve token self::setCloudOAuthRefreshDataToConfig($config, $mailOAuth); } } else { // fallback for old meta version $token = OAuth::getTokenByMeta($config->getPassword(), $expireGapSeconds); } if (empty($token)) { return null; } $config->setPassword($token); return $config; } public function getOAuthTokenExpireGapSeconds(): int { // we use 55 minutes because providers give tokens for 1 hour or more, // 5 minutes is left for not refresh token too frequent, for mass send $default = isModuleInstalled('bitrix24') ? 55 * 60 : 10; return (int)Option::get('main', '~oauth_token_expire_gap_seconds', $default); } private function setCloudOAuthRefreshDataToConfig(Config $config, OAuth $mailOAuth): void { if (!isModuleInstalled('bitrix24')) { return; } if (Option::get('main', '~cloud_refresh_enabled', 'Y') === 'N') { return; } $oauthEntity = $mailOAuth->getOAuthEntity(); if (!is_object($oauthEntity) || !method_exists($oauthEntity, 'getTokenData')) { return; } $tokenData = $oauthEntity->getTokenData(); if (!is_array($tokenData) || empty($tokenData['refresh_token']) || empty($tokenData['expires_in'])) { return; } $expires = self::isTestCloudTokenExpiredMode() ? 0 : (int)$tokenData['expires_in']; $config->setCloudOAuthRefreshData(new CloudOAuthRefreshData($config->getPassword(), $expires)); } private function isTestCloudTokenExpiredMode(): bool { return Option::get('main', '~oauth_expired_refresh', 'N') === 'Y'; } }