1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
oauthconfigpreparer.php
См. документацию.
1<?php
2
3namespace Bitrix\Main\Mail\Smtp;
4
5use Bitrix\Mail\Helper\OAuth;
6use Bitrix\Main\Config\Option;
7
9{
11 {
12 if (!$config->getIsOauth())
13 {
14 return $config;
15 }
16
17 if (!\CModule::includeModule('mail'))
18 {
19 return null;
20 }
21
22 $expireGapSeconds = self::getOAuthTokenExpireGapSeconds();
23 $mailOAuth = OAuth::getInstanceByMeta($config->getPassword());
24 if ($mailOAuth)
25 {
26 $token = $mailOAuth->getStoredToken(null, $expireGapSeconds);
27 if ($token)
28 {
29 // method should be used after retrieve token
30 self::setCloudOAuthRefreshDataToConfig($config, $mailOAuth);
31 }
32 }
33 else
34 {
35 // fallback for old meta version
36 $token = OAuth::getTokenByMeta($config->getPassword(), $expireGapSeconds);
37 }
38
39 if (empty($token))
40 {
41 return null;
42 }
43
44 $config->setPassword($token);
45
46 return $config;
47 }
48
49 public function getOAuthTokenExpireGapSeconds(): int
50 {
51 // we use 55 minutes because providers give tokens for 1 hour or more,
52 // 5 minutes is left for not refresh token too frequent, for mass send
53 $default = isModuleInstalled('bitrix24') ? 55 * 60 : 10;
54
55 return (int)Option::get('main', '~oauth_token_expire_gap_seconds', $default);
56 }
57
58 private function setCloudOAuthRefreshDataToConfig(Config $config, OAuth $mailOAuth): void
59 {
60 if (!isModuleInstalled('bitrix24'))
61 {
62 return;
63 }
64
65 if (Option::get('main', '~cloud_refresh_enabled', 'Y') === 'N')
66 {
67 return;
68 }
69
70 $oauthEntity = $mailOAuth->getOAuthEntity();
71 if (!is_object($oauthEntity) || !method_exists($oauthEntity, 'getTokenData'))
72 {
73 return;
74 }
75
76 $tokenData = $oauthEntity->getTokenData();
77 if (!is_array($tokenData) || empty($tokenData['refresh_token']) || empty($tokenData['expires_in']))
78 {
79 return;
80 }
81
82 $expires = self::isTestCloudTokenExpiredMode() ? 0 : (int)$tokenData['expires_in'];
83 $config->setCloudOAuthRefreshData(new CloudOAuthRefreshData($config->getPassword(), $expires));
84 }
85
86 private function isTestCloudTokenExpiredMode(): bool
87 {
88 return Option::get('main', '~oauth_expired_refresh', 'N') === 'Y';
89 }
90}
getOAuthEntity()
Определения oauth.php:258
prepareBeforeSendIfNeed(Config $config)
Определения oauthconfigpreparer.php:10
$config
Определения quickway.php:69