N°3169 - Add feature to connect Gsuite mail box with OAuth

N°2504 - Add feature to connect Office mail box with OAuth2 for Microsoft Graph
N°5102 - Allow to send emails (eg. notifications) using GSuite SMTP and OAuth
 * 2.7 migration (wip)
This commit is contained in:
Eric Espie
2022-05-13 11:45:42 +02:00
parent 134736dce5
commit 6b80bbeaa2
10 changed files with 2487 additions and 18 deletions

View File

@@ -3,6 +3,7 @@
namespace Combodo\iTop\Controller\OAuth;
use Combodo\iTop\Application\TwigBase\Controller\Controller;
use Combodo\iTop\Core\Authentication\Client\OAuth\OAuthClientProviderAbstract;
use Combodo\iTop\Core\Authentication\Client\OAuth\OAuthClientProviderFactory;
use utils;
@@ -23,4 +24,35 @@ class OAuthAjaxController extends Controller
$this->DisplayJSONPage($aResult);
}
public function OperationGetDisplayAuthenticationResults()
{
$aResult = ['status' => 'success', 'data' => []];
$sProvider = utils::ReadParam('provider', '', false, 'raw');
$sRedirectUrl = utils::ReadParam('redirect_url', '', false, 'raw');
$sClientId = utils::ReadParam('client_id', '', false, 'raw');
$sClientSecret = utils::ReadParam('client_secret', '', false, 'raw');
$sScope = utils::ReadParam('scope', '', false, 'raw');
$sAdditional = utils::ReadParam('additional', '', false, 'raw');
$sRedirectUrlQuery = parse_url($sRedirectUrl)['query'];
$aOAuthResultDisplayClasses = utils::GetClassesForInterface('Combodo\iTop\Core\Authentication\Client\OAuth\IOAuthClientResultDisplay', '', array('[\\\\/]lib[\\\\/]', '[\\\\/]node_modules[\\\\/]', '[\\\\/]test[\\\\/]'));
$aAdditional = [];
parse_str($sAdditional, $aAdditional);
$sProviderClass = "\Combodo\iTop\Core\Authentication\Client\OAuth\OAuthClientProvider".$sProvider;
$sRedirectUrl = OAuthClientProviderAbstract::GetRedirectUri();
$aQuery = [];
parse_str($sRedirectUrlQuery, $aQuery);
$sCode = $aQuery['code'];
$oProvider = OAuthClientProviderFactory::getVendorProvider($sProvider, $sClientId, $sClientSecret, $sScope, $aAdditional);
$oAccessToken = OAuthClientProviderFactory::getAccessTokenFromCode($oProvider, $sCode);
foreach ($aOAuthResultDisplayClasses as $sOAuthClass) {
$aResult['data'][] = $sOAuthClass::GetResultDisplayScript($sClientId, $sClientSecret, $sProvider, $oAccessToken);
}
$this->DisplayJSONPage($aResult);
}
}