diff --git a/datamodels/2.x/itop-oauth-client/datamodel.itop-oauth-client.xml b/datamodels/2.x/itop-oauth-client/datamodel.itop-oauth-client.xml
index ea378a4cd..bab54920f 100644
--- a/datamodels/2.x/itop-oauth-client/datamodel.itop-oauth-client.xml
+++ b/datamodels/2.x/itop-oauth-client/datamodel.itop-oauth-client.xml
@@ -229,6 +229,7 @@ HTML
$this->Set('refresh_token', $oAccessToken->getRefreshToken());
}
$this->Set('status', 'active');
+ $this->AllowWrite();
$this->DBUpdate();
}
]]>
diff --git a/datamodels/2.x/itop-oauth-client/src/Controller/AjaxOauthClientController.php b/datamodels/2.x/itop-oauth-client/src/Controller/AjaxOauthClientController.php
index 002c8a8cb..633f28d13 100644
--- a/datamodels/2.x/itop-oauth-client/src/Controller/AjaxOauthClientController.php
+++ b/datamodels/2.x/itop-oauth-client/src/Controller/AjaxOauthClientController.php
@@ -11,6 +11,7 @@ use Combodo\iTop\Application\TwigBase\Controller\Controller;
use Combodo\iTop\Core\Authentication\Client\OAuth\OAuthClientProviderFactory;
use Dict;
use IssueLog;
+use League\OAuth2\Client\Provider\Exception\IdentityProviderException;
use MetaModel;
use utils;
use WebPage;
@@ -65,13 +66,15 @@ class AjaxOauthClientController extends Controller
}
if (isset($aQuery['code'])) {
$sCode = $aQuery['code'];
- $oAccessToken = OAuthClientProviderFactory::GetAccessTokenFromCode($oOAuthClient, $sCode);
-
- $oOAuthClient->SetAccessToken($oAccessToken);
-
-
-
- $aResult['status'] = 'success';
+ try {
+ $oAccessToken = OAuthClientProviderFactory::GetAccessTokenFromCode($oOAuthClient, $sCode);
+ $oOAuthClient->SetAccessToken($oAccessToken);
+ $aResult['status'] = 'success';
+ }
+ catch (IdentityProviderException $e) {
+ $aResult['status'] = 'error';
+ $aResult['error_description'] = $e->getMessage();
+ }
}
} else {
$aResult['status'] = 'error';
diff --git a/setup/backup.class.inc.php b/setup/backup.class.inc.php
index 854c7594b..da722b1ef 100644
--- a/setup/backup.class.inc.php
+++ b/setup/backup.class.inc.php
@@ -306,6 +306,7 @@ class DBBackup
$sPortOption = self::GetMysqliCliSingleOption('port', $this->iDBPort);
$sTlsOptions = self::GetMysqlCliTlsOptions($this->oConfig);
+ $sProtocolOption = self::GetMysqlCliTransportOption($this->sDBHost);
$sMysqlVersion = CMDBSource::GetDBVersion();
$bIsMysqlSupportUtf8mb4 = (version_compare($sMysqlVersion, self::MYSQL_VERSION_WITH_UTF8MB4_IN_PROGRAMS) === -1);
@@ -326,8 +327,8 @@ EOF;
// Note: opt implicitely sets lock-tables... which cancels the benefit of single-transaction!
// skip-lock-tables compensates and allows for writes during a backup
- $sCommand = "$sMySQLDump --defaults-extra-file=\"$sMySQLDumpCnfFile\" --opt --skip-lock-tables --default-character-set=".$sMysqldumpCharset." --add-drop-database --single-transaction --host=$sHost $sPortOption --user=$sUser $sTlsOptions --result-file=$sTmpFileName $sDBName $sTables 2>&1";
- $sCommandDisplay = "$sMySQLDump --defaults-extra-file=\"$sMySQLDumpCnfFile\" --opt --skip-lock-tables --default-character-set=".$sMysqldumpCharset." --add-drop-database --single-transaction --host=$sHost $sPortOption --user=xxxxx $sTlsOptions --result-file=$sTmpFileName $sDBName $sTables";
+ $sCommand = "$sMySQLDump --defaults-extra-file=\"$sMySQLDumpCnfFile\" --opt --skip-lock-tables --default-character-set=".$sMysqldumpCharset." --add-drop-database --single-transaction --host=$sHost $sPortOption $sProtocolOption --user=$sUser $sTlsOptions --result-file=$sTmpFileName $sDBName $sTables 2>&1";
+ $sCommandDisplay = "$sMySQLDump --defaults-extra-file=\"$sMySQLDumpCnfFile\" --opt --skip-lock-tables --default-character-set=".$sMysqldumpCharset." --add-drop-database --single-transaction --host=$sHost $sPortOption $sProtocolOption --user=xxxxx $sTlsOptions --result-file=$sTmpFileName $sDBName $sTables";
// Now run the command for real
$this->LogInfo("backup: generate data file with command: $sCommandDisplay");
@@ -520,6 +521,24 @@ EOF;
return ' --'.$sCliArgName.'='.self::EscapeShellArg($sData);
}
+ /**
+ * @param string $sHost
+ *
+ * @return string .
+
+ * @since 2.7.9 3.0.4 3.1.1 N°6123
+ */
+ public static function GetMysqlCliTransportOption(string $sHost)
+ {
+ $sTransportOptions = '';
+
+ if($sHost === 'localhost'){
+ $sTransportOptions = '--protocol=tcp';
+ }
+
+ return $sTransportOptions;
+ }
+
/**
* @return string the command to launch mysqldump (without its params)
*/
diff --git a/sources/Core/Authentication/Client/OAuth/OAuthClientProviderFactory.php b/sources/Core/Authentication/Client/OAuth/OAuthClientProviderFactory.php
index 66230eb3e..77006d436 100644
--- a/sources/Core/Authentication/Client/OAuth/OAuthClientProviderFactory.php
+++ b/sources/Core/Authentication/Client/OAuth/OAuthClientProviderFactory.php
@@ -74,6 +74,7 @@ class OAuthClientProviderFactory
* @return AccessTokenInterface
* @throws \ArchivedObjectException
* @throws \CoreException
+ * @throws \League\OAuth2\Client\Provider\Exception\IdentityProviderException
*/
public static function GetAccessTokenFromCode(OAuthClient $oOAuthClient, $sCode)
{
@@ -109,7 +110,7 @@ class OAuthClientProviderFactory
/**
* @param \DBObject $oOAuthClient
*
- * @return mixed
+ * @return OAuthClientProviderAbstract
* @throws \ArchivedObjectException
* @throws \CoreException
*/
diff --git a/sources/Core/Email/EmailSwiftMailer.php b/sources/Core/Email/EmailSwiftMailer.php
index a5481c149..74ea9b06f 100644
--- a/sources/Core/Email/EmailSwiftMailer.php
+++ b/sources/Core/Email/EmailSwiftMailer.php
@@ -181,7 +181,11 @@ class EmailSwiftMailer extends EMail
case 'PHPMail':
default:
- $oTransport = new Swift_SendmailTransport();
+ // Retrieve sendmail path or select a default one as SwiftMailer is not doing it anymore
+ $sSendmailPath = ini_get('sendmail_path');
+ $sSendmailPath = ($sSendmailPath === false || $sSendmailPath === '') ? '/usr/sbin/sendmail -bs' : $sSendmailPath;
+
+ $oTransport = new Swift_SendmailTransport($sSendmailPath);
}
$oMailer = new Swift_Mailer($oTransport);
diff --git a/tests/php-unit-tests/integration-tests/DictionariesConsistencyTest.php b/tests/php-unit-tests/integration-tests/DictionariesConsistencyTest.php
index fbc8ef031..f6f56e938 100644
--- a/tests/php-unit-tests/integration-tests/DictionariesConsistencyTest.php
+++ b/tests/php-unit-tests/integration-tests/DictionariesConsistencyTest.php
@@ -18,6 +18,9 @@ namespace Combodo\iTop\Test\UnitTest\Integration;
use Combodo\iTop\Test\UnitTest\ItopTestCase;
+/**
+ * @group beforeSetup
+ */
class DictionariesConsistencyTest extends ItopTestCase
{
/**
diff --git a/tests/php-unit-tests/post-build-integration-tests/iTopDesignFormatChecklistTest.php b/tests/php-unit-tests/post-build-integration-tests/iTopDesignFormatChecklistTest.php
index 875fd01ec..d707ace63 100644
--- a/tests/php-unit-tests/post-build-integration-tests/iTopDesignFormatChecklistTest.php
+++ b/tests/php-unit-tests/post-build-integration-tests/iTopDesignFormatChecklistTest.php
@@ -15,7 +15,7 @@ use PHPUnit\Exception;
*
* @package Combodo\iTop\Test\UnitTest\Setup
*/
-class TestForITopDesignFormatClass extends ItopTestCase
+class iTopDesignFormatChecklistTest extends ItopTestCase
{
protected function setUp(): void
{
@@ -47,7 +47,7 @@ class TestForITopDesignFormatClass extends ItopTestCase
$aErrors[] = "cannot retrieve itop_design datamodel version in $sDataModelFile:1";
continue;
}
-
+
$aDatamodelCurrentVersions[$sVersion] = $sVersion;
}
}
@@ -159,4 +159,4 @@ class TestForITopDesignFormatClass extends ItopTestCase
}
return $aDataModelFiles;
}
-}
\ No newline at end of file
+}
diff --git a/tests/php-unit-tests/postbuild_integration.xml.dist b/tests/php-unit-tests/postbuild_integration.xml.dist
index b45e634bb..444df800f 100644
--- a/tests/php-unit-tests/postbuild_integration.xml.dist
+++ b/tests/php-unit-tests/postbuild_integration.xml.dist
@@ -16,6 +16,7 @@
stopOnRisky="false"
stopOnSkipped="false"
verbose="true"
+ printerClass="Sempro\PHPUnitPrettyPrinter\PrettyPrinter"
>
@@ -23,6 +24,7 @@
+