N°5395 - Errors from OAuth servers for email are not well handled

This commit is contained in:
Eric Espie
2022-08-10 14:57:26 +02:00
parent 62aaaabd7e
commit 7f7538ed58
4 changed files with 59 additions and 17 deletions

View File

@@ -21,6 +21,7 @@ Dict::Add('EN US', 'English', 'English', [
'itop-oauth-client:Message:MissingToken' => 'Generate access token before using this OAuth client',
'itop-oauth-client:Message:TokenCreated' => 'Access token created',
'itop-oauth-client:Message:TokenRecreated' => 'Access token regenerated',
'itop-oauth-client:Message:TokenError' => 'Access token not generated due to server error',
'OAuthClient:Name/UseForSMTPMustBeUnique' => 'The combination Login (%1$s) and Use for SMTP (%2$s) has already be used for OAuth Client',

View File

@@ -21,6 +21,7 @@ Dict::Add('FR FR', 'French', 'Français', [
'itop-oauth-client:Message:MissingToken' => 'Générez le jeton d\'accès avant d\'utiliser ce client OAuth',
'itop-oauth-client:Message:TokenCreated' => 'Le jeton d\'accès à été créé',
'itop-oauth-client:Message:TokenRecreated' => 'Le jeton d\'accès à été renouvelé',
'itop-oauth-client:Message:TokenError' => 'Le jeton d\'accès n\'a pas été généré à cause d`une erreur serveur',
'OAuthClient:Name/UseForSMTPMustBeUnique' => 'La combinaison Login (%1$s) and Utilisé pour SMTP (%2$s) a déjà été utilisée pour OAuth Client',

View File

@@ -49,26 +49,66 @@ class AjaxOauthClientController extends Controller
$sRedirectUrl = utils::ReadParam('redirect_url', '', false, 'raw');
$sRedirectUrlQuery = parse_url($sRedirectUrl)['query'];
$aResult = [];
$aResult['status'] = 'error';
$aURL = parse_url($sRedirectUrl);
if (isset($aURL['query'])) {
$sRedirectUrlQuery = $aURL['query'];
$aQuery = [];
parse_str($sRedirectUrlQuery, $aQuery);
if (isset($aQuery['error'])) {
$aResult['status'] = 'error';
if (isset($aQuery['error_description'])) {
$aResult['error_description'] = $aQuery['error_description'];
}
}
if (isset($aQuery['code'])) {
$sCode = $aQuery['code'];
$oAccessToken = OAuthClientProviderFactory::GetAccessTokenFromCode($oOAuthClient, $sCode);
$aQuery = [];
parse_str($sRedirectUrlQuery, $aQuery);
$sCode = $aQuery['code'];
$oAccessToken = OAuthClientProviderFactory::GetAccessTokenFromCode($oOAuthClient, $sCode);
$oOAuthClient->SetAccessToken($oAccessToken);
$oOAuthClient->SetAccessToken($oAccessToken);
cmdbAbstractObject::SetSessionMessage(
$sClass,
$sId,
"$sClass:$sId:TokenCreated",
$bIsCreation ? Dict::S('itop-oauth-client:Message:TokenCreated') : Dict::S('itop-oauth-client:Message:TokenRecreated'),
'ok',
1,
true
);
$aResult = ['status' => 'success'];
$aResult['status'] = 'success';
}
} else {
$aResult['status'] = 'error';
$aResult['error_description'] = 'Redirect URL Format not recognized';
}
switch ($aResult['status']) {
case 'success':
cmdbAbstractObject::SetSessionMessage(
$sClass,
$sId,
"$sClass:$sId:TokenCreated",
$bIsCreation ? Dict::S('itop-oauth-client:Message:TokenCreated') : Dict::S('itop-oauth-client:Message:TokenRecreated'),
'ok',
1,
true
);
if ($bIsCreation) {
IssueLog::Info("Token created for $sClass:$sId");
} else {
IssueLog::Info("Token recreated for $sClass:$sId");
}
break;
case 'error':
cmdbAbstractObject::SetSessionMessage(
$sClass,
$sId,
"$sClass:$sId:TokenError",
$aResult['error_description'] ?? Dict::S('itop-oauth-client:Message:TokenError'),
'error',
1,
true
);
IssueLog::Error("Token creation failed for $sClass:$sId", null, $aResult);
break;
}
$aResult['data'] = utils::GetAbsoluteUrlAppRoot()."pages/UI.php?operation=details&class=$sClass&id=$sId";
$this->DisplayJSONPage($aResult);

View File

@@ -8,6 +8,6 @@ class OAuthLandingController extends Controller
{
public function OperationLanding()
{
$this->DisplayPage([]);
$this->DisplayAjaxPage([]);
}
}