From f50576d31d386b86802093ee3f705dec9d8ce1ce Mon Sep 17 00:00:00 2001
From: gloas <gloas@afi-sa.fr>
Date: Thu, 17 May 2018 15:50:12 +0200
Subject: [PATCH] dev #72845 implode Cvs dashboard : add SSO link generation
 process

---
 library/Class/DigitalResource/Config.php      |  5 +++
 .../Helper/DigitalResource/Dashboard/SSO.php  | 11 +++++-
 library/digital_resources/Cvs/Config.php      | 34 +++++++++++++++++++
 3 files changed, 49 insertions(+), 1 deletion(-)

diff --git a/library/Class/DigitalResource/Config.php b/library/Class/DigitalResource/Config.php
index 74cd9358373..6ffa7a695a2 100644
--- a/library/Class/DigitalResource/Config.php
+++ b/library/Class/DigitalResource/Config.php
@@ -270,6 +270,11 @@ class Class_DigitalResource_Config extends Class_Entity {
   }
 
 
+  public function renderSSODiagOn($view) {
+    return '';
+  }
+
+
   public function getTestUser() {
     $login = $this->getName() . '_test_user';
     $user = ($user = Class_Users::findFirstBy(['login' => $login]))
diff --git a/library/ZendAfi/View/Helper/DigitalResource/Dashboard/SSO.php b/library/ZendAfi/View/Helper/DigitalResource/Dashboard/SSO.php
index 18af75f2fea..5286b9dd908 100644
--- a/library/ZendAfi/View/Helper/DigitalResource/Dashboard/SSO.php
+++ b/library/ZendAfi/View/Helper/DigitalResource/Dashboard/SSO.php
@@ -63,7 +63,11 @@ class ZendAfi_View_Helper_DigitalResource_Dashboard_SSO extends ZendAfi_View_Hel
     $html [] = $this->_tag('h4', $this->_('URL SSO générée par /modules/%s pour l\'utilisateur "%s"',
                                           $config->getSsoAction(),
                                           $user->getLogin()));
-    $html [] = $this->_tag('pre', $config->urlFor($user));
+
+    $html [] = ($diag = $config->renderSSODiagOn($this->view))
+      ? $diag
+      : $this->_getSSOHtml($config, $user);
+
     $html [] = $this->view->button((new Class_Entity)
                                    ->setUrl($this->view->url(['action' => 'try-sso']))
                                    ->setText($this->_('Essayer le SSO avec l\'utilisateur "%s"',
@@ -77,6 +81,11 @@ class ZendAfi_View_Helper_DigitalResource_Dashboard_SSO extends ZendAfi_View_Hel
   }
 
 
+  protected function _getSSOHtml($config, $user) {
+    return $this->_tag('pre', $config->urlFor($user));
+  }
+
+
   protected function _getAlbumSSOUrlHtml($config, $user) {
     if(!$album = Class_Album::findFirstby(['type_doc_id' => $config->getDocType()]))
       return '';
diff --git a/library/digital_resources/Cvs/Config.php b/library/digital_resources/Cvs/Config.php
index c56edd7e1ce..61c85e3dbc6 100644
--- a/library/digital_resources/Cvs/Config.php
+++ b/library/digital_resources/Cvs/Config.php
@@ -157,4 +157,38 @@ class Cvs_Config extends Class_DigitalResource_Config {
 
     return implode($html);
   }
+
+
+  public function renderSSODiagOn($view) {
+    $user = $this->getTestUser();
+
+    $service = new Cvs_Service;
+    $service->setUser($user);
+
+    $xml = $service->getSiteAccessXML($user);
+    $encoded_xml = $service->getEncodedXML($xml);
+    $original_response = $service->httpPost($xml);
+    $response = htmlentities($original_response);
+
+    $parser = new Cvs_Service_Parser_SiteAccess();
+    $parser->parseXML($original_response);
+
+    $url = ($url = $parser->getUrl()) ? $url : '';
+
+    $html = [$view->tag('p', $this->_('Pour générer le lien de connexion SSO, plusieurs étapes sont nécessaires.')),
+             $view->tag('h4', $this->_('La première étape consiste à générer le XML qui servirat à la génération du paramètre "xml"')),
+             $view->tag('pre', htmlentities($xml)),
+             $view->tag('h4', $this->_('L\'étape suivante est une requête HTTP POST vers l\'API_URL avec le paramètre "xml" encodé')),
+             $view->tag('p', $this->_('API URL:')),
+             $view->tag('pre', $this->getAdminVar('API_URL')),
+             $view->tag('p', $this->_('XML encodé:')),
+             $view->tag('pre', $encoded_xml),
+             $view->tag('p', $this->_('Réponse reçue à la demande d\'accès au site :')),
+             $view->tag('pre', $response),
+             $view->tag('h4', $this->_('La dernière étape  parcourt la réponse afin de récupérer l\'url de SSO')),
+             $view->tag('pre', $url)
+    ];
+
+    return implode($html);
+  }
 }
\ No newline at end of file
-- 
GitLab