diff --git a/VERSIONS_HOTLINE/94528 b/VERSIONS_HOTLINE/94528
new file mode 100644
index 0000000000000000000000000000000000000000..771ad561aabf5d0b146153942e73ee71e1d277c1
--- /dev/null
+++ b/VERSIONS_HOTLINE/94528
@@ -0,0 +1 @@
+ - ticket #94528 : Arte VOD : Maintenance du connecteur 
\ No newline at end of file
diff --git a/library/Class/AdminVar.php b/library/Class/AdminVar.php
index 76f61f05955a6de96a2f6ab405f037ecb3658c3c..f011c795fa9525f6dd2dff344e70c695145c64ef 100644
--- a/library/Class/AdminVar.php
+++ b/library/Class/AdminVar.php
@@ -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');
   }
 
 
diff --git a/library/Class/ArteVodLink.php b/library/Class/ArteVodLink.php
index e367e7fe5ddacca759825268993c722cb4eb3255..a28a27d604825d2789a4fcaed4b88c1406e5caeb 100644
--- a/library/Class/ArteVodLink.php
+++ b/library/Class/ArteVodLink.php
@@ -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);
diff --git a/library/Class/WebService/BibNumerique/ArteVOD.php b/library/Class/WebService/BibNumerique/ArteVOD.php
index 51a9e987aca7c4029489250ac267ccc68d54b51a..3dfb9dd735295b70b5e05c4e937f1775269bbd4e 100644
--- a/library/Class/WebService/BibNumerique/ArteVOD.php
+++ b/library/Class/WebService/BibNumerique/ArteVOD.php
@@ -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();
   }
diff --git a/tests/library/Class/ArteVodLinkTest.php b/tests/library/Class/ArteVodLinkTest.php
index 21be0b9554cc035810057807f84379f9e943de24..566fc8feaf5a8282fef7cedd0cd57ab57027aa99 100644
--- a/tests/library/Class/ArteVodLinkTest.php
+++ b/tests/library/Class/ArteVodLinkTest.php
@@ -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'),
 
diff --git a/tests/library/Class/WebService/ArteVODTest.php b/tests/library/Class/WebService/ArteVODTest.php
index 2279151d955bc3a053e0a97872ad94199c6fa3b9..a2961322ca9701a5bbf30ecae5d1f0ff221b9d1a 100644
--- a/tests/library/Class/WebService/ArteVODTest.php
+++ b/tests/library/Class/WebService/ArteVODTest.php
@@ -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