Feature/merge 3 0 develop (#298)

* merging 3.0 into develop

* N°5102 - Allow to send emails (eg. notifications) using GSuite SMTP and OAuth
* migration to iTop 3.1

Co-authored-by: Eric Espie <eric.espie@combodo.com>
This commit is contained in:
bdalsass
2022-06-08 16:27:20 +02:00
committed by GitHub
parent 1fd792fed9
commit 2b885beb82
347 changed files with 53400 additions and 3034 deletions

View File

@@ -0,0 +1,62 @@
<?php
namespace Combodo\iTop\Controller\OAuth;
use Combodo\iTop\Application\TwigBase\Controller\Controller;
use Combodo\iTop\Core\Authentication\Client\OAuth\OAuthClientProviderFactory;
use utils;
class OAuthAjaxController extends Controller
{
public function OperationGetAuthorizationUrl()
{
$aResult = ['status' => 'success', 'data' => []];
$sProvider = utils::ReadParam('provider', '', 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');
$aAdditional = [];
parse_str($sAdditional, $aAdditional);
$sAuthorizationUrl = OAuthClientProviderFactory::getVendorProviderForAccessUrl($sProvider, $sClientId, $sClientSecret, $sScope, $aAdditional);
$aResult['data']['authorization_url'] = $sAuthorizationUrl;
$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[] = '\Combodo\iTop\Core\Authentication\Client\OAuth\OAuthClientResultDisplayConf';
if (class_exists('Combodo\iTop\Extension\Service\OAuthClientResultDisplayMailbox')) {
$aOAuthResultDisplayClasses[] = 'Combodo\iTop\Extension\Service\OAuthClientResultDisplayMailbox';
}
$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);
}
}

View File

@@ -0,0 +1,13 @@
<?php
namespace Combodo\iTop\Controller\OAuth;
use Combodo\iTop\Application\TwigBase\Controller\Controller;
class OAuthLandingController extends Controller
{
public function OperationLanding()
{
$this->DisplayPage([]);
}
}

View File

@@ -0,0 +1,68 @@
<?php
/**
* @copyright Copyright (C) 2010-2022 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*/
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\OAuthClientResultDisplayConf;
use Combodo\iTop\Extension\Service\OAuthClientResultDisplayMailbox;
use Dict;
use utils;
class OAuthWizardController extends Controller
{
public function __construct($sViewPath, $sModuleName = 'core')
{
$aAdditionalPaths = [];
// Add extensions' template path
// TODO Rewrite in 3.1 with utils::GetClassesForInterface('Combodo\iTop\Core\Authentication\Client\OAuth\IOAuthClientResultDisplay', ...)
if (class_exists('Combodo\iTop\Extension\Service\OAuthClientResultDisplayMailbox')) {
$aAdditionalPaths[] = utils::GetAbsoluteModulePath('combodo-oauth-email-synchro').'templates';
}
parent::__construct($sViewPath, $sModuleName, $aAdditionalPaths);
}
public function OperationWizard()
{
$aParams = [];
$aParams['sReturnUri'] = OAuthClientProviderAbstract::GetRedirectUri();
$aParams['sAjaxUri'] = utils::GetAbsoluteUrlAppRoot().'pages/ajax.oauth.wizard.php';
//$this->AddLinkedScript(utils::GetAbsoluteUrlAppRoot().'/js/pages/backoffice/oauth.wizard.js');
$aOAuthClasses = [
'Combodo\iTop\Core\Authentication\Client\OAuth\OAuthClientProviderAzure',
'Combodo\iTop\Core\Authentication\Client\OAuth\OAuthClientProviderGoogle',
];
foreach ($aOAuthClasses as $sOAuthClass) {
$aParams['aProviders'][] = [
'name' => $sOAuthClass::GetVendorName(),
'icon' => $sOAuthClass::GetVendorIcon(),
'colors' => $sOAuthClass::GetVendorColors(),
];
}
$aParams['aInputs'] = [
'client_id' => ['type' => 'text', 'label' => Dict::S('UI:OAuth:Wizard:Form:Input:ClientId:Label'), 'read_only' => false, 'value' => ''],
'client_secret' => ['type' => 'text', 'label' => Dict::S('UI:OAuth:Wizard:Form:Input:ClientSecret:Label'), 'read_only' => false, 'value' => ''],
'scope' => ['type' => 'text', 'label' => Dict::S('UI:OAuth:Wizard:Form:Input:Scope:Label'), 'read_only' => false, 'value' => ''],
'additional' => ['type' => 'text', 'label' => Dict::S('UI:OAuth:Wizard:Form:Input:Additional:Label'), 'read_only' => false, 'value' => ''],
'redirect_uri' => ['type' => 'text', 'label' => Dict::S('UI:OAuth:Wizard:Form:Input:RedirectUri:Label'), 'read_only' => true, 'value' => OAuthClientProviderAbstract::GetRedirectUri()],
];
// TODO: Needs to handle mail to ticket part too
$aParams['aAdditionalBlocks'][] = OAuthClientResultDisplayConf::GetResultDisplayTemplate();
if (class_exists('Combodo\iTop\Extension\Service\OAuthClientResultDisplayMailbox')) {
$aParams['aAdditionalBlocks'][] = OAuthClientResultDisplayMailbox::GetResultDisplayTemplate();
}
$this->DisplayPage($aParams);
}
}