Skip to content
Snippets Groups Projects
Commit 6fe74a02 authored by Patrick Barroca's avatar Patrick Barroca :grin:
Browse files

Merge branch...

Merge branch 'hotline#94528_connecteur_arte_vod_a_installer_arte_vod_key_a_enlever_dans_les_variables_ou_rendre_non_obligatoire' into 'hotline'

hotline#94528 : ArteVOD : FreeAccess to ArteVOD via SSO

See merge request !3200
parents c45943f0 62432841
Branches
Tags
5 merge requests!3297WIP: Master,!3220Master,!3216WIP: Koha pagination le retour,!3212Hotline,!3200hotline#94528 : ArteVOD : FreeAccess to ArteVOD via SSO
Pipeline #8032 passed with stage
in 37 minutes and 56 seconds
- ticket #94528 : Arte VOD : Maintenance du connecteur
\ No newline at end of file
......@@ -183,9 +183,9 @@ class Class_AdminVarLoader extends Storm_Model_Loader {
'CYBERLIBRIS_URL' => Class_AdminVar_Meta::newDefault($this->_('Adresse du serveur OAI Cyberlibris'))->bePrivate(),
'CYBERLIBRIS_ID' => Class_AdminVar_Meta::newDefault($this->_('Identifiant SSO Cyberlibris'))->bePrivate(),
'ARTE_VOD_LOGIN' => Class_AdminVar_Meta::newDefault($this->_('Login ARTE VOD'))->bePrivate(),
'ARTE_VOD_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé ARTE VOD'))->bePrivate(),
'ARTE_VOD_SSO_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé ARTE VOD Single Sign-On'))->bePrivate(),
'ARTE_VOD_LOGIN' => Class_AdminVar_Meta::newDefault($this->_('Login utilisé pour générer l\'adresse https://vod.mediatheque-numerique.com/mediatheques/[ARTE VOD LOGIN]'))->bePrivate(),
'ARTE_VOD_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé de moissonnage (optionelle)'))->bePrivate(),
'ARTE_VOD_SSO_KEY' => Class_AdminVar_Meta::newDefault($this->_('Clé de cryptage lors du SSO'))->bePrivate(),
'NUMERIQUE_PREMIUM_URL' => Class_AdminVar_Meta::newDefault('')->bePrivate(),
......@@ -784,9 +784,9 @@ class Class_AdminVarLoader extends Storm_Model_Loader {
* @return bool
*/
public function isArteVODEnabled() {
return (('' != Class_AdminVar::get('ARTE_VOD_LOGIN'))
&& ('' != Class_AdminVar::get('ARTE_VOD_KEY'))
&& ('' != Class_AdminVar::get('ARTE_VOD_SSO_KEY')));
return
'' != Class_AdminVar::get('ARTE_VOD_LOGIN')
&& '' != Class_AdminVar::get('ARTE_VOD_SSO_KEY');
}
......
......@@ -22,14 +22,15 @@
class Class_ArteVodLink {
use Trait_TimeSource;
protected $_album;
protected $_user;
const
AUTH_URL = 'https://portal.mediatheque-numerique.com/sso_login',
API_URL = 'https://vod.mediatheque-numerique.com',
API_SUFFIX = '/api/v1/',
MEDIATHEQUES_SUFFIX = '/mediatheques/';
protected $_album;
protected $_user;
public static function forAlbumAndUser($album, $user) {
return (new self())->setAlbum($album)->setUser($user);
......
......@@ -39,8 +39,12 @@ class Class_WebService_BibNumerique_ArteVOD extends Class_WebService_BibNumeriqu
public function open_authenticated_url($url) {
return $this->getWebClient()->open_url($url, ['auth' => ['user' => Class_AdminVar::get('ARTE_VOD_LOGIN'),
'password' => Class_AdminVar::get('ARTE_VOD_KEY')]]);
$client = $this->getWebClient();
return ($user = trim(Class_AdminVar::get('ARTE_VOD_LOGIN'))) && ($password = trim(Class_AdminVar::get('ARTE_VOD_KEY')))
? $client->open_url($url, ['auth' => ['user' => $user,
'password' => $password]])
: $client->open_url($url);
}
......@@ -67,9 +71,9 @@ class Class_WebService_BibNumerique_ArteVOD extends Class_WebService_BibNumeriqu
} while (!empty($ress_numerique));
$this->_deleteNonHarvested();
}
protected function _deleteNonHarvested() {
if (0 < count($this->getHarvestedIds()))
Class_Album::getLoader()
......@@ -81,6 +85,7 @@ class Class_WebService_BibNumerique_ArteVOD extends Class_WebService_BibNumeriqu
return Class_ArteVodLink::API_URL . Class_ArteVodLink::API_SUFFIX;
}
public function isEnabled() {
return Class_AdminVar::isArteVODEnabled();
}
......
......@@ -22,10 +22,7 @@
class ArteVodLinkBaseUrlWithoutAlbumTest extends ModelTestCase {
public function setUp() {
$this->fixture('Class_AdminVar',
['id' => 'ARTE_VOD_LOGIN',
'valeur' => 'miiop'
]);
Class_AdminVar::set('ARTE_VOD_LOGIN', 'miiop');
$this->_arte_vod_link = new Class_ArteVodLink();
}
......@@ -40,8 +37,10 @@ class ArteVodLinkBaseUrlWithoutAlbumTest extends ModelTestCase {
class ArteVodLinkWithUserAndAlbumTest extends ModelTestCase {
protected $_james_bond;
protected $_arte_vod_link;
protected
$_sso_key = 'secret',
$_james_bond,
$_arte_vod_link;
public function setUp() {
parent::setUp();
......@@ -57,27 +56,27 @@ class ArteVodLinkWithUserAndAlbumTest extends ModelTestCase {
->setMail('jbond@007.fr')
->setDateFin('2023-09-12');
Class_AdminVar::set('ARTE_VOD_SSO_KEY', $this->_sso_key);
$this->_arte_vod_link = Class_ArteVodLink::forAlbumAndUser($entre_les_murs,
$this->_james_bond);
}
/** @test */
public function baseUrlForBondShouldBeMediathequeNumeriqueDotCom() {
public function baseUrlForBondShouldBeMediathequeNumeriqueDotComFilmEntreLesMurs() {
$this->assertEquals('http://www.mediatheque-numerique.com/films/entre-les-murs',
$this->_arte_vod_link->baseUrl());
}
/** @test */
public function withKeySECRETUrlShouldContainsEncryptedDate() {
Class_AdminVar::newInstanceWithId('ARTE_VOD_SSO_KEY')->setValeur('GOGO');
public function withKeyUrlShouldContainsEncryptedDate() {
$this->assertEquals('https://portal.mediatheque-numerique.com/sso_login'
.'?sso_id=afi'
.'&id=45'
.'&id_encrypted='. hash('sha256', '45GOGO')
.'&d='. hash('sha256', date('dmY').'GOGO')
.'&id_encrypted='. hash('sha256', '45' . $this->_sso_key)
.'&d='. hash('sha256', date('dmY') . $this->_sso_key)
.'&prenom=James'
.'&nom=Bond'
.'&email='.urlencode('jbond@007.fr')
......@@ -90,8 +89,6 @@ class ArteVodLinkWithUserAndAlbumTest extends ModelTestCase {
/** @test */
public function userWithoutNomEmailAndPrenomUrlSSOShouldNotContainsNomEmailPrenom() {
Class_AdminVar::newInstanceWithId('ARTE_VOD_SSO_KEY')->setValeur('secret');
$this->_james_bond
->setPrenom('')
->setNom('')
......@@ -100,8 +97,8 @@ class ArteVodLinkWithUserAndAlbumTest extends ModelTestCase {
$this->assertEquals('https://portal.mediatheque-numerique.com/sso_login'
.'?sso_id=afi'
.'&id=45'
.'&id_encrypted='. hash('sha256', '45secret')
.'&d='. hash('sha256', date('dmY').'secret')
.'&id_encrypted='. hash('sha256', '45' . $this->_sso_key)
.'&d='. hash('sha256', date('dmY'). $this->_sso_key)
.'&datout=2023-09-12'
.'&return_url=' . urlencode('http://www.mediatheque-numerique.com/films/entre-les-murs'),
$this->_arte_vod_link->url());
......@@ -110,8 +107,6 @@ class ArteVodLinkWithUserAndAlbumTest extends ModelTestCase {
/** @test */
public function userInviteShouldHaveUserIdInSSOLink() {
Class_AdminVar::newInstanceWithId('ARTE_VOD_SSO_KEY')->setValeur('secret');
$this->_james_bond
->setPrenom('')
->setNom('')
......@@ -123,19 +118,16 @@ class ArteVodLinkWithUserAndAlbumTest extends ModelTestCase {
$this->assertEquals('https://portal.mediatheque-numerique.com/sso_login'
.'?sso_id=afi'
.'&id=19'
.'&id_encrypted='. hash('sha256', '19secret')
.'&d='. hash('sha256', date('dmY').'secret')
.'&id_encrypted='. hash('sha256', '19' . $this->_sso_key)
.'&d='. hash('sha256', date('dmY') . $this->_sso_key)
.'&return_url=' . urlencode('http://www.mediatheque-numerique.com/films/entre-les-murs'),
$this->_arte_vod_link->url());
}
/** @test */
public function userWithDateNaissanceShouldContainsDnaissInUrl() {
Class_AdminVar::newInstanceWithId('ARTE_VOD_SSO_KEY')->setValeur('secret');
$this->_james_bond
->setPrenom('')
->setNom('')
......@@ -146,8 +138,8 @@ class ArteVodLinkWithUserAndAlbumTest extends ModelTestCase {
$this->assertEquals('https://portal.mediatheque-numerique.com/sso_login'
.'?sso_id=afi'
.'&id=45'
.'&id_encrypted='. hash('sha256', '45secret')
.'&d='. hash('sha256', date('dmY').'secret')
.'&id_encrypted='. hash('sha256', '45' . $this->_sso_key)
.'&d='. hash('sha256', date('dmY') . $this->_sso_key)
.'&dnaiss=1975-01-01'
.'&return_url=' . urlencode('http://www.mediatheque-numerique.com/films/entre-les-murs'),
......
......@@ -24,7 +24,6 @@ require_once 'ArteVODFixtures.php';
abstract class ArteVODHarverstingTestCase extends ModelTestCase {
protected $_web_client;
protected $_storm_default_to_volatile = true;
public function setUp() {
parent::setUp();
......@@ -32,7 +31,6 @@ abstract class ArteVODHarverstingTestCase extends ModelTestCase {
$this->fixture('Class_CosmoVar', ['id' => 'types_docs',
'liste' => "1:cd\r\n200:non identifié\r\n201:livres\r\n202:bd"]);
Class_AdminVar::set('ARTE_VOD', '1');
Class_AdminVar::set('ARTE_VOD_LOGIN', 'user');
Class_AdminVar::set('ARTE_VOD_KEY', 'pass');
......@@ -217,3 +215,73 @@ class ArteVODHarverstingFourFilmsInTwoPages extends ArteVODHarverstingTestCase {
$this->assertNotEquals(null, $this->edouard->addAuthor('Cibien, Laurent', '005'));
}
}
class ArteVODHarvestingWithoutPasswordTest extends ArteVODHarverstingTestCase {
public function setUp() {
parent::setUp();
Class_AdminVar::set('ARTE_VOD_KEY', '');
$this->_web_client
->whenCalled('open_url')
->with('https://vod.mediatheque-numerique.com/api/v1/films?page_nb=1')
->answers(ArteVODFixtures::emptyPage());
$this->_web_client->beStrict();
(new Class_WebService_BibNumerique_ArteVOD())->harvest();
}
/** @test */
public function shouldHaveHarvestedWithoutAuth() {
$this->assertTrue($this->_web_client->methodHasBeenCalled('open_url'));
}
}
class ArteVODHarverstingEnablingTest extends ArteVODHarverstingTestCase {
/** @test */
public function withAllShouldBeEnabled() {
Class_AdminVar::set('ARTE_VOD_LOGIN', 'user');
Class_AdminVar::set('ARTE_VOD_KEY', 'pass');
Class_AdminVar::set('ARTE_VOD_SSO_KEY', 'key');
$this->assertTrue((new Class_WebService_BibNumerique_ArteVOD())->isEnabled());
}
/** @test */
public function withoutLoginShouldNotBeEnabled() {
Class_AdminVar::set('ARTE_VOD_LOGIN', '');
Class_AdminVar::set('ARTE_VOD_KEY', 'pass');
Class_AdminVar::set('ARTE_VOD_SSO_KEY', 'key');
$this->assertFalse((new Class_WebService_BibNumerique_ArteVOD())->isEnabled());
}
/** @test */
public function withoutHarvestKeyShouldBeEnabled() {
Class_AdminVar::set('ARTE_VOD_LOGIN', 'user');
Class_AdminVar::set('ARTE_VOD_KEY', '');
Class_AdminVar::set('ARTE_VOD_SSO_KEY', 'key');
$this->assertTrue((new Class_WebService_BibNumerique_ArteVOD())->isEnabled());
}
/** @test */
public function withoutSSOKeyShouldNotBeEnabled() {
Class_AdminVar::set('ARTE_VOD_LOGIN', 'user');
Class_AdminVar::set('ARTE_VOD_KEY', 'pass');
Class_AdminVar::set('ARTE_VOD_SSO_KEY', '');
$this->assertFalse((new Class_WebService_BibNumerique_ArteVOD())->isEnabled());
}
}
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment