mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-23 18:48:51 +02:00
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:
62
sources/Controller/OAuth/OAuthAjaxController.php
Normal file
62
sources/Controller/OAuth/OAuthAjaxController.php
Normal 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);
|
||||
}
|
||||
}
|
||||
13
sources/Controller/OAuth/OAuthLandingController.php
Normal file
13
sources/Controller/OAuth/OAuthLandingController.php
Normal 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([]);
|
||||
}
|
||||
}
|
||||
68
sources/Controller/OAuth/OAuthWizardController.php
Normal file
68
sources/Controller/OAuth/OAuthWizardController.php
Normal 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user