diff --git a/application/modules/opac/controllers/AbonneController.php b/application/modules/opac/controllers/AbonneController.php index bb8b998f2df1d2d9e637f1d18b92edf079825564..aaf71ff92b898faad34ff183ccff877217431524 100644 --- a/application/modules/opac/controllers/AbonneController.php +++ b/application/modules/opac/controllers/AbonneController.php @@ -596,23 +596,23 @@ class AbonneController extends ZendAfi_Controller_Action { $response->auth = 0; $response->until = ''; - $request = Class_Multimedia_AuthenticateRequest::newWithRequest($this->_request); - + $request = Class_Multimedia_AuthenticateRequest::newWithRequest($this->_request); if ($user = $request->getUser()) { - foreach (array('id', 'login', 'password', 'nom', 'prenom') as $attribute) + foreach (['id', 'login', 'password', 'nom', + 'prenom', 'date_debut', 'date_fin'] as $attribute) $response->$attribute = $user->$attribute; - $response->groupes = $user->getUserGroupsLabels(); $response->date_naissance = $user->getDateNaissanceIso8601(); } - if ($request->isValid()) { - $response->auth = 1; - $response->until = date('c', $request->getCurrentHoldEnd()); - } else { + if (!$request->isValid()) { $response->error = $request->getError(); - } + $this->_response->setBody(json_encode($response)); + return; + } + $response->auth = 1; + $response->until = date('c', $request->getCurrentHoldEnd()); $this->_response->setBody(json_encode($response)); } diff --git a/application/modules/push/controllers/MultimediaController.php b/application/modules/push/controllers/MultimediaController.php index 1a8b4b639ac6b3402ffa6db9cb2f1016b645fc1c..5c56218edd5f828aee8c627d7fe0a6d55661c7d4 100644 --- a/application/modules/push/controllers/MultimediaController.php +++ b/application/modules/push/controllers/MultimediaController.php @@ -20,7 +20,8 @@ */ class Push_MultimediaController extends Zend_Controller_Action { public function configAction() { - $log = Class_Multimedia::getLog(); + $multimedia = Class_Multimedia::getInstance(); + $log = $multimedia->getLog(); $log->info('Push multimedia start'); $this->_helper->getHelper('viewRenderer')->setNoRender(); @@ -40,7 +41,7 @@ class Push_MultimediaController extends Zend_Controller_Action { return; } - if (!Class_Multimedia::isValidHash($sign, $this->_getParam('json'))) { + if (!$multimedia->isValidHash($sign, $this->_getParam('json'))) { $log->err('Sign check failure'); return; } @@ -77,18 +78,16 @@ class Push_MultimediaController extends Zend_Controller_Action { - public function getAllBorrowersAction(){ - $attributes = ['idabon', 'login', 'password', 'nom', 'prenom', 'mail', - 'dateNaissanceIso8601', 'dateFin', 'dateDebut']; - - + public function getAllBorrowersAction() { $this->getHelper('ViewRenderer')->setNoRender(); - $response = Class_Multimedia_PushAllUsersRequest::newWith( - Class_Multimedia_Connector_Multimedia::getInstance() - ->initAttributes($attributes)) - ->getResponse($this->_request); - $this->_response->setBody($response); + $connector = Class_Multimedia_Connector_Multimedia::getInstance() + ->initAttributes(['idabon', 'login', 'password', 'nom', 'prenom', 'mail', + 'dateNaissanceIso8601', 'dateFin', 'dateDebut']); + + $this->_response->setBody( + Class_Multimedia_PushAllUsersRequest::newWith($connector) + ->getResponse($this->_request)); } } ?> \ No newline at end of file diff --git a/library/Class/AdminVar.php b/library/Class/AdminVar.php index b8a185958d39d34dec03d9c3049efe0791a6a853..df1d6da054d22ed2953b12c77bd1671bd81a1cd1 100644 --- a/library/Class/AdminVar.php +++ b/library/Class/AdminVar.php @@ -308,7 +308,7 @@ class Class_AdminVar extends Storm_Model_Abstract { 'ARTE_VOD_KEY' => 'Clé ARTE VOD', 'ARTE_VOD_SSO_KEY' => 'Clé ARTE VOD Single Sign-On', 'BABELTHEQUE_JS' => 'URL du javascript Babelthèque à insérer dans l\'OPAC', - 'MULTIMEDIA_KEY' => 'Clé AFI-multimédia', + 'MULTIMEDIA_KEY' => 'Clé publique pour le cryptage des données AFI-Multimédia', 'WEBKIOSK_KEY' => 'Clé publique pour le cryptage des données Aesis Webkiosk', 'WEBKIOSK_RESERVATION_URL' => 'URL d\'accès à l\'interface de réservation des postes Aesis Webkiosk', 'CSS_EDITOR' => '', diff --git a/library/Class/Multimedia.php b/library/Class/Multimedia.php index 1826f2278fc7cea1e94aa7c8de89c3f063ba9aba..28e2150e9623a26ba98129dd29b8f27598ec4463 100644 --- a/library/Class/Multimedia.php +++ b/library/Class/Multimedia.php @@ -20,84 +20,92 @@ */ class Class_Multimedia { - const SEPARATOR = '--@--'; + use Trait_Singleton; const LOG_FILE = 'push.log'; - /** @var Class_Multimedia */ - protected static $_instance; - /** @var Zend_Log */ - protected static $_log; + protected $_log; /** @return Zend_Log */ - public static function getLog() { - if (null == self::$_log) - self::$_log = new Zend_Log(new Zend_Log_Writer_Stream(PATH_TEMP . self::LOG_FILE)); - return self::$_log; + public function getLog() { + if (null == $this->_log) + $this->_log = new Zend_Log(new Zend_Log_Writer_Stream(PATH_TEMP . self::LOG_FILE)); + return $this->_log; } /** * @param $log Zend_Log */ - public static function setLog($log) { - self::$_log = $log; + public function setLog($log) { + $this->_log = $log; + return $this; } /** @return boolean */ - public static function isValidHash($hash, $content) { - return self::getInstance()->isValidHashForContent($hash, $content); + public function isValidHash($hash, $content) { + $validators = [new Class_Multimedia_HashValidator_Md5(), + new Class_Multimedia_HashValidator_Ssl()]; + + foreach ($validators as $validator) + if ($validator->isValid($hash, $content)) + return true; + return false; } +} - /** @return boolean */ - public function isValidHashForContent($hash, $content) { - return $hash == $this->getHashForContent($content); - } +class Class_Multimedia_HashValidator_Null { + const KEY_VAR_NAME = 'MULTIMEDIA_KEY'; - /** @return Class_Multimedia */ - public static function getInstance() { - if (null == self::$_instance) - self::$_instance = new self(); - return self::$_instance; + public function isValid($hash, $content) { + return false; } - /** @category testing */ - public static function setInstance($instance) { - self::$_instance = $instance; + protected function getKey() { + return Class_AdminVar::get(self::KEY_VAR_NAME); } +} + + +class Class_Multimedia_HashValidator_Ssl extends Class_Multimedia_HashValidator_Null{ + public function isValid($hash, $content) { + $isValidated = (new Class_Multimedia_Utils_OpensslUtil()) + ->opensslVerify($content, + base64_decode($hash), + $this->getKey()); - /** @return string */ - public function getHashForContent($content) { - return md5($this->getFullContent($content)); + return -1 !== $isValidated && 0 !== $isValidated; } +} - /** - * @param $content string - * @return string - */ - public function getFullContent($content) { - return $content . self::SEPARATOR . $this->getKey() . self::SEPARATOR . $this->getDate(); + +class Class_Multimedia_HashValidator_Md5 extends Class_Multimedia_HashValidator_Null{ + use Trait_TimeSource; + + const SEPARATOR = '--@--'; + + public function isValid($hash, $content) { + return $hash == $this->getHashForContent($content); } - /** @return string */ - public function getKey() { - return Class_AdminVar::get('MULTIMEDIA_KEY'); + protected function getHashForContent($content) { + $content = implode(self::SEPARATOR, [$content, $this->getKey(), $this->getDate()]); + return md5($content); } - /** @return string formated date */ - public function getDate() { + protected function getDate() { $oldTimeZone = date_default_timezone_get(); date_default_timezone_set('UTC'); - $date = date('Y-m-d'); + $date = date('Y-m-d', $this->getCurrentTime()); date_default_timezone_set($oldTimeZone); return $date; } diff --git a/library/Class/Multimedia/AuthenticateRequest.php b/library/Class/Multimedia/AuthenticateRequest.php index 12df83c335b15a9c970ef5400d36bc74fc26b163..87b4d76e8eb48872ab6bb5c6ec6cae972cf567cc 100644 --- a/library/Class/Multimedia/AuthenticateRequest.php +++ b/library/Class/Multimedia/AuthenticateRequest.php @@ -59,7 +59,7 @@ class Class_Multimedia_AuthenticateRequest { $password, [$auth->newAuthSIGB(), $auth->newAuthDb()])) { if (Class_Users::findFirstBy(['login' => $login])) - return $this->_error('PasswordIsWrong'); + return $this->_error('PasswordIsWrong'); return $this->_error('UserNotFound'); } diff --git a/library/Class/Multimedia/Connector/Abstract.php b/library/Class/Multimedia/Connector/Abstract.php new file mode 100644 index 0000000000000000000000000000000000000000..8f3cd0072738f4959ddf6ad1e5f6af2b0f437e80 --- /dev/null +++ b/library/Class/Multimedia/Connector/Abstract.php @@ -0,0 +1,101 @@ +<?php +/** + * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved. + * + * AFI-OPAC 2.0 is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * AFI-OPAC 2.0 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with AFI-OPAC 2.0; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +class Class_Multimedia_Connector_Abstract { + const DATA_SEPARATOR = '--@--'; + + protected $_generatorRendering; + + public function __construct() { + $this->_generatorRendering = new Class_Multimedia_Connector_GeneratorRendering($this); + } + + + public function getGeneratorRendering(){ + return $this->_generatorRendering; + } + + + public function initAttributes($attributes){ + $this->_generatorRendering->initAttributes($attributes); + return $this; + } + + + public function generateRenderer($request, $itemClosure){ + if (!$this->isValid($request)) + return $this->_generatorRendering->renderResponse(); + return $this->_generatorRendering->render($request, $itemClosure); + } + + + public function dataFor($data) { + return $data . self::DATA_SEPARATOR . date('Ymd'); + } + + + public function isValid($request) { + if (!($sign = $request->getParam('sign'))) { + $this->_generatorRendering->prepareResponseError('NO_PARAMETERS'); + return false; + } + + if (!$this->isEnabled()) { + $this->_generatorRendering->prepareResponseError($this->getDisabledError()); + return false; + } + + $openssl = new Class_Multimedia_Utils_OpensslUtil(); + $isValidated =$openssl->opensslVerify( + $this->dataFor($request->getActionName()), + base64_decode($request->getParam('sign')), + $this->getPublicKey()); + restore_error_handler(); + + if ($isValidated == -1) { + $this->_generatorRendering->prepareResponseError('ERROR_CHECKING_SIGNATURE'); + return false; + } + + if ($isValidated == 0) { + $this->_generatorRendering->prepareResponseError('INVALID_SIGNATURE'); + return false; + } + + return true; + } + + + public function getPublicKey() { + return ''; + } + + + protected function isEnabled() { + return false; + } + + + protected function getDisabledError() { + return 'DISABLED'; + } +} +?> \ No newline at end of file diff --git a/library/Class/Multimedia/Connector/GeneratorRendering.php b/library/Class/Multimedia/Connector/GeneratorRendering.php index 6736d94b5bcaff05e255a83a126f4425c326d33f..71ad5bf1a95c39992d56c210a4e644b6608d6f47 100644 --- a/library/Class/Multimedia/Connector/GeneratorRendering.php +++ b/library/Class/Multimedia/Connector/GeneratorRendering.php @@ -20,38 +20,44 @@ */ class Class_Multimedia_Connector_GeneratorRendering { - - + const RENDERER_PREFIX = 'Class_Multimedia_Connector_Renderer_'; protected $_response; - protected $_attributes; protected $_currentDate = null; - /** Listes des objets renders dans l'ordre à effectuer sur les datas */ - protected $_renderers = array(); + protected $_connector = null; + protected $_attributes = []; + protected $_renderers = ['Json', 'Encrypt', 'Json']; /** executer selon l'ordre */ - public function __construct() { + public function __construct($connector) { $this->_response = new StdClass(); $this->_response->data = []; $this->_response->error = ''; $this->_response->date_export = ''; - - $this->_renderers = [new Class_Multimedia_Connector_Renderer_Json(), new Class_Multimedia_Connector_Renderer_Encrypt(), new Class_Multimedia_Connector_Renderer_Json()]; + + $this->_connector = $connector; } - public function initAttributes($attributes){ + public function initAttributes($attributes) { $this->_attributes = $attributes; return $this; } + + public function setRenderers($renderers){ $this->_renderers = $renderers; + return $this; } + public function renderResponse() { $this->initializeDateExport(); - foreach ($this->_renderers as $renderer) - $this->_response = $renderer->render($this->_response); + foreach ($this->_renderers as $renderer) { + $renderer = self::RENDERER_PREFIX . $renderer; + $this->_response = (new $renderer()) + ->render($this->_response, $this->_connector); + } return $this->_response; } @@ -64,10 +70,12 @@ class Class_Multimedia_Connector_GeneratorRendering { return $this->renderResponse(); } + public function newItem($item) { $this->_response->data[] = $this->stdClassFrom($item); } + public function stdClassFrom($item) { $data = new StdClass(); foreach ($this->_attributes as $attribute) { @@ -82,9 +90,11 @@ class Class_Multimedia_Connector_GeneratorRendering { $this->_response->error = $msg; } + public function initializeDateExport(){ $this->_response->date_export = $this->getCurrentDate()->format('c'); } + private function getCurrentDate(){ if(null !== $this->_currentDate) @@ -92,13 +102,16 @@ class Class_Multimedia_Connector_GeneratorRendering { return new DateTime(); } + public function setCurrentDate($currentDate){ $this->_currentDate = new DateTime($currentDate); + return $this; } + public function addFullImportInResponse($value){ $this->_response->fullImport = $value; + return $this; } - } ?> diff --git a/library/Class/Multimedia/Connector/Multimedia.php b/library/Class/Multimedia/Connector/Multimedia.php index 4572bba4b2db2434e5ee2e476d86984a5b616f95..a92ee129475952a2a824c634f4121a6d121f6c54 100644 --- a/library/Class/Multimedia/Connector/Multimedia.php +++ b/library/Class/Multimedia/Connector/Multimedia.php @@ -18,79 +18,20 @@ * along with AFI-OPAC 2.0; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -class Class_Multimedia_Connector_Multimedia{ - const DATA_SEPARATOR = '--@--'; +class Class_Multimedia_Connector_Multimedia extends Class_Multimedia_Connector_Abstract{ + use Trait_Singleton; - /** @category testing */ - protected static $_instance; - - protected $_generatorRendering; - - public function __construct() { - $this->_generatorRendering = new Class_Multimedia_Connector_GeneratorRendering(); + public function getPublicKey() { + return Class_AdminVar::get('MULTIMEDIA_KEY'); } - - /** @category testing */ - public static function setInstance($instance) { - self::$_instance = $instance; - } - - public static function getInstance(){ - if (null !== self::$_instance) - return self::$_instance; - return new self(); - } - public function getGeneratorRendering(){ - return $this->_generatorRendering; + protected function isEnabled() { + return Class_AdminVar::isMultimediaEnabled(); } - public function initAttributes($attributes){ - $this->_generatorRendering->initAttributes($attributes); - return $this; - } - public function generateRenderer($request, $itemClosure){ - if (!$this->isValid($request)) - return $this->_generatorRendering->renderResponse(); - - return $this->_generatorRendering->render($request, $itemClosure); + protected function getDisabledError() { + return 'MULTIMEDIA_DISABLED'; } - - public function isValid($request) { - if (!($sign = $request->getParam('sign'))) { - $this->_generatorRendering->prepareResponseError('NO_PARAMETERS'); - return false; - } - - if(!Class_AdminVar::isMultimediaEnabled()){ - $this->_generatorRendering->prepareResponseError('MULTIMEDIA_DISABLED'); - return false; - } - - $openssl = new Class_Multimedia_Utils_OpensslUtil(); - $isValidated =$openssl->opensslVerify( - $this->dataFor($request->getActionName()), - base64_decode($sign), - Class_AdminVar::get('MULTIMEDIA_KEY')); - restore_error_handler(); - - if($isValidated == -1){ - $this->_generatorRendering->prepareResponseError('ERROR_CHECKING_SIGNATURE'); - return false; - } - - if($isValidated == 0){ - $this->_generatorRendering->prepareResponseError('INVALID_SIGNATURE'); - return false; - } - - return true; - } - - public function dataFor($data) { - return $data . self::DATA_SEPARATOR . date('Ymd'); - } - } \ No newline at end of file diff --git a/library/Class/Multimedia/Connector/Renderer/Abstract.php b/library/Class/Multimedia/Connector/Renderer/Abstract.php new file mode 100644 index 0000000000000000000000000000000000000000..0a6d45a222a61ee3163672b93b1471c3198ca25a --- /dev/null +++ b/library/Class/Multimedia/Connector/Renderer/Abstract.php @@ -0,0 +1,28 @@ +<?php +/** + * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved. + * + * AFI-OPAC 2.0 is free software; you can redistribute it and/or modify + * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by + * the Free Software Foundation. + * + * There are special exceptions to the terms and conditions of the AGPL as it + * is applied to this software (see README file). + * + * AFI-OPAC 2.0 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE + * along with AFI-OPAC 2.0; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + +class Class_Multimedia_Connector_Renderer_Abstract { + public function render($response, $connector) { + return $response; + } +} +?> \ No newline at end of file diff --git a/library/Class/Multimedia/Connector/Renderer/Encrypt.php b/library/Class/Multimedia/Connector/Renderer/Encrypt.php index 5a7bd01c675a15704fb1079dea0359f836d21263..e94c7db5c16f44bbccfbe2ede70edacfd1bed9d8 100644 --- a/library/Class/Multimedia/Connector/Renderer/Encrypt.php +++ b/library/Class/Multimedia/Connector/Renderer/Encrypt.php @@ -19,15 +19,16 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -class Class_Multimedia_Connector_Renderer_Encrypt{ - +class Class_Multimedia_Connector_Renderer_Encrypt +extends Class_Multimedia_Connector_Renderer_Abstract{ protected static $_openssl; - - public function render($data){ + + public function render($data, $connector) { $sealed_data = ''; - $env_keys = array(); - $this->getOpenssl()->opensslSeal($data , $sealed_data ,$env_keys , - [Class_AdminVar::get('WEBKIOSK_KEY')]); + $env_keys = []; + $this->getOpenssl() + ->opensslSeal($data , $sealed_data ,$env_keys , + [$connector->getPublicKey()]); $response = new StdClass(); $response->data_encrypted = base64_encode($sealed_data); $response->symetric_key = base64_encode($env_keys[0]); @@ -41,6 +42,8 @@ class Class_Multimedia_Connector_Renderer_Encrypt{ return new Class_Multimedia_Utils_OpensslUtil(); } + + /** @category testing */ public static function setOpenssl($openssl){ self::$_openssl = $openssl; } diff --git a/library/Class/Multimedia/Connector/Renderer/Json.php b/library/Class/Multimedia/Connector/Renderer/Json.php index bf52d1a0d1c4319591262c480d9c388b0ebcfc83..8c1878151bfa5ff72eb9deb95b83cf51ac650003 100644 --- a/library/Class/Multimedia/Connector/Renderer/Json.php +++ b/library/Class/Multimedia/Connector/Renderer/Json.php @@ -19,8 +19,9 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -class Class_Multimedia_Connector_Renderer_Json { - public function render($data) { +class Class_Multimedia_Connector_Renderer_Json +extends Class_Multimedia_Connector_Renderer_Abstract { + public function render($data, $connector) { return json_encode($data); } } \ No newline at end of file diff --git a/library/Class/Multimedia/Connector/Webkiosk.php b/library/Class/Multimedia/Connector/Webkiosk.php index 12c070b61a64249c787d691643f7db40e63e6645..95173c5c2c1b9478e28d30e412d9e0ebc745241a 100644 --- a/library/Class/Multimedia/Connector/Webkiosk.php +++ b/library/Class/Multimedia/Connector/Webkiosk.php @@ -19,89 +19,30 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -class Class_Multimedia_Connector_Webkiosk { - const DATA_SEPARATOR = '--@--'; +class Class_Multimedia_Connector_Webkiosk extends Class_Multimedia_Connector_Abstract{ + use Trait_Singleton; - /** @category testing */ - protected static $_instance; - - protected $_generatorRendering; - - - - public function __construct() { - $this->_generatorRendering = new Class_Multimedia_Connector_GeneratorRendering(); + public function getPublicKey() { + return Class_AdminVar::get('WEBKIOSK_KEY'); } - public static function getInstance(){ - if (null !== self::$_instance) - return self::$_instance; - return new self(); + protected function isEnabled() { + return Class_AdminVar::isWebkioskEnabled(); } - /** @category testing */ - public static function setInstance($instance) { - self::$_instance = $instance; - } - - public function initAttributes($attributes){ - $this->_generatorRendering->initAttributes($attributes); - return $this; - } - public function getGeneratorRendering(){ - return $this->_generatorRendering; + protected function getDisabledError() { + return 'WEBKIOSK_DISABLED'; } - public function flagImportIncrementialOnFull(){ + + public function flagImportIncrementialOnFull() { $this->_generatorRendering->addFullImportInResponse(true); } + public function intFlagImportIncremential(){ $this->_generatorRendering->addFullImportInResponse(false); } - - public function generateRenderer($request, $itemClosure){ - if (!$this->isValid($request)) - return $this->_generatorRendering->renderResponse(); - - return $this->_generatorRendering->render($request, $itemClosure); - } - - public function isValid($request) { - if (!($sign = $request->getParam('sign'))) { - $this->_generatorRendering->prepareResponseError('NO_PARAMETERS'); - return false; - } - - if(!Class_AdminVar::isWebkioskEnabled()){ - $this->_generatorRendering->prepareResponseError('WEBKIOSK_DISABLED'); - return false; - } - - $openssl = new Class_Multimedia_Utils_OpensslUtil(); - $isValidated =$openssl->opensslVerify( - $this->dataFor($request->getActionName()), - base64_decode($sign), - Class_AdminVar::get('WEBKIOSK_KEY')); - restore_error_handler(); - - // openssl_free_key($public_key); - if($isValidated == -1){ - $this->_generatorRendering->prepareResponseError('ERROR_CHECKING_SIGNATURE'); - return false; - } - - if($isValidated == 0){ - $this->_generatorRendering->prepareResponseError('INVALID_SIGNATURE'); - return false; - } - - return true; - } - - public function dataFor($data) { - return $data . self::DATA_SEPARATOR . date('Ymd'); - } } \ No newline at end of file diff --git a/library/Class/Multimedia/PushAllUsersRequest.php b/library/Class/Multimedia/PushAllUsersRequest.php index 6a3feb0ef0b6f13a3c13167be0df5e38ee185ca7..929970e0bb05e59a8fff1479e062b4839ffe6d61 100644 --- a/library/Class/Multimedia/PushAllUsersRequest.php +++ b/library/Class/Multimedia/PushAllUsersRequest.php @@ -20,20 +20,31 @@ */ class Class_Multimedia_PushAllUsersRequest extends Class_Multimedia_PushUsersRequest{ - public static function newWith($connector) { return new self($connector); } + public function getResponse($request) { return $this->_connector->generateRenderer($request, function () { $this->withBorrowersDo(); }); } + public function withBorrowersDo() { - $users = Class_Users::getAllBorrowers(); - if ($users) - parent::withUsersDo($users); + $total = Class_Users::countBorrowers(); + $page_size = 1000; + $page_count = (int)($total / $page_size); + if (0 < $total % $page_size) + $page_count++; + + for ($i = 1; $i <= $page_count; ++$i) { + Class_Users::clearCache(); + Storm_Model_Loader::resetCache(); + gc_collect_cycles(); + if ($users = Class_Users::getBorrowersByPage($i, $page_size)) + parent::withUsersDo($users); + } } } \ No newline at end of file diff --git a/library/Class/Multimedia/Utils/OpensslUtil.php b/library/Class/Multimedia/Utils/OpensslUtil.php index f530d4f881e6877567e13a956cfbc910ef4dacd5..e15d6ceff28cc8c0999dc36d864feb2c09f27fe5 100644 --- a/library/Class/Multimedia/Utils/OpensslUtil.php +++ b/library/Class/Multimedia/Utils/OpensslUtil.php @@ -19,28 +19,25 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -class Class_Multimedia_Utils_OpensslUtil{ - +class Class_Multimedia_Utils_OpensslUtil { protected $_error_verify_sign; - public function opensslSeal($data , &$sealed_data , - &$env_keys , $pub_key_ids){ - - return openssl_seal ($data , $sealed_data ,$env_keys ,$pub_key_ids); - + public function opensslSeal($data, &$sealed_data , &$env_keys, $pub_key_ids) { + return openssl_seal($data, $sealed_data, $env_keys, $pub_key_ids); } - public function opensllVerifyHandlerError($errno, $errstr, $errfile, $errline){ + + public function opensllVerifyHandlerError($errno, $errstr, $errfile, $errline) { $this->_error_verify_sign = true; return true; } - public function opensslVerify($data ,$sign, $pub_key){ - set_error_handler(array($this, 'opensllVerifyHandlerError')); + public function opensslVerify($data, $sign, $pub_key) { + set_error_handler([$this, 'opensllVerifyHandlerError']); $result = @openssl_verify($data, $sign, $pub_key); restore_error_handler(); - if($this->_error_verify_sign) + if ($this->_error_verify_sign) return -1; return $result; } diff --git a/library/Class/Users.php b/library/Class/Users.php index 362b2c342b601b25106a1fe0b59b485cc348ee4f..422a430a8533f8afff525b555c2777c7314199ec 100644 --- a/library/Class/Users.php +++ b/library/Class/Users.php @@ -153,8 +153,8 @@ class UsersLoader extends Storm_Model_Loader { /** * @return array */ - public function getAllBorrowers(){ - return $this->findAllBy(['role_level' => 2]); + public function getAllBorrowers() { + return $this->findAllBy(['role_level' => 2]); } public function getBorrowersModifiedAfter($dateMaj){ @@ -163,6 +163,17 @@ class UsersLoader extends Storm_Model_Loader { } + public function countBorrowers() { + return Class_Users::countBy(['role_level' => 2]); + } + + + public function getBorrowersByPage($page, $page_size) { + return Class_Users::findAllBy(['role_level' => 2, + 'limitPage' => [$page, $page_size]]); + } + + public function mapUser($destination, $source) { $destination ->setIdSigb($source->getIdSigb()) diff --git a/library/Class/WebkioskLink.php b/library/Class/WebkioskLink.php index 996a89b99ca96e8131a2f8b8dd560fcceea93175..0aae5ac1201c99abc9d3f2e1b4e1130d60c24403 100644 --- a/library/Class/WebkioskLink.php +++ b/library/Class/WebkioskLink.php @@ -39,17 +39,17 @@ class Class_WebkioskLink { } - public function url() { + public function url() { + $connector = Class_Multimedia_Connector_Webkiosk::getInstance(); $response_jsonencode =(new Class_Multimedia_Connector_Renderer_Json()) - ->render( - ['login' => $this->_user->getLogin(), - 'password' => $this->_user->getPassword(), - 'date' => date('Ymd') - ] - ); - $response_encrypted = (new Class_Multimedia_Connector_Renderer_Encrypt())->render($response_jsonencode); - - $auth_crypte_base64 = urlencode(base64_encode((new Class_Multimedia_Connector_Renderer_Json())->render($response_encrypted))); + ->render(['login' => $this->_user->getLogin(), + 'password' => $this->_user->getPassword(), + 'date' => date('Ymd')], $connector); + + $response_encrypted = (new Class_Multimedia_Connector_Renderer_Encrypt()) + ->render($response_jsonencode, $connector); + + $auth_crypte_base64 = urlencode(base64_encode((new Class_Multimedia_Connector_Renderer_Json())->render($response_encrypted, $connector))); return $this->getBaseUrl().'?sso='.$auth_crypte_base64; } diff --git a/tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php b/tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php index 2ff7419218d8df02863609ffa038b0d2db4e2904..3af31e31b738a05eb3ed6fe8df1185993b35ffb6 100644 --- a/tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php +++ b/tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php @@ -206,6 +206,12 @@ class AbonneControllerMultimediaAuthenticateMireilleTest extends AbonneControlle public function shouldReturnSubscriptionExpired() { $this->assertEquals('SubscriptionExpired', $this->_json->error); } + + + /** @test */ + public function dateFinShouldNotBePresent() { + $this->assertFalse(isset($this->_json->date_fin)); + } } @@ -418,7 +424,20 @@ class AbonneControllerMultimediaAuthenticateBaptisteTest extends AbonneControlle /** @test */ public function groupsShouldBeMineurAbonneAndOldSchool() { - $this->assertEquals(array('mineur','abonne_sigb', 'Devs Oldschool'), $this->_json->groupes); + $this->assertEquals(['mineur','abonne_sigb', 'Devs Oldschool'], + $this->_json->groupes); + } + + + /** @test */ + public function dateFinShouldBe3000_01_01() { + $this->assertEquals('3000-01-01', $this->_json->date_fin); + } + + + /** @test */ + public function dateDebutShouldBe1978_05_23() { + $this->assertEquals('1978-05-23', $this->_json->date_debut); } } @@ -1252,6 +1271,7 @@ class AbonneControllerMultimediaUsersFixtures { ->setPassword("afi") ->beAbonneSIGB() ->setNaissance('2005-02-17') + ->setDateDebut('1978-05-23') ->setDateFin('3000-01-01'); } diff --git a/tests/application/modules/opac/controllers/AbonneControllerWebkioskTest.php b/tests/application/modules/opac/controllers/AbonneControllerWebkioskTest.php index 34affcf6871c3ed34b4321b95d14051c43ed4b46..a90148accfa8b901dd69a525e206a5868f6d89dc 100644 --- a/tests/application/modules/opac/controllers/AbonneControllerWebkioskTest.php +++ b/tests/application/modules/opac/controllers/AbonneControllerWebkioskTest.php @@ -26,27 +26,27 @@ abstract class AbonneControllerWebkioskTestCase extends AbstractControllerTestCa public function setUp() { parent::setUp(); - Class_AdminVar::newInstanceWithId('WEBKIOSK_KEY', ['valeur' => '-----BEGIN PUBLIC KEY----- + Class_AdminVar::newInstanceWithId( + 'WEBKIOSK_KEY', + ['valeur' => '-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCm1hgee4LI7ji06BkuV8O4XpxH e59n80Gge/r3uROj+Tuxx2AOSk9gX7e4JNVsdfw22ft+xVqwAii8qu4/fYuicrrZ l66WXceACmsgGWEdHMB7ZPUd4HqR5bdE1Xnr1Q0Z9IIku6Naxt/yy0P5Gv+ZlW7U 287hF3sdh2dp7UgguQIDAQAB -----END PUBLIC KEY-----']); - Class_AdminVar::newInstanceWithId('WEBKIOSK_RESERVATION_URL', ['valeur' => 'http://resa.zebib.net']); $this->_amadou = Class_Users::newInstanceWithId(87, - ['login' => 'amadou', - 'password' => 'secret']); + ['login' => 'amadou', + 'password' => 'secret']); ZendAfi_Auth::getInstance()->logUser($this->_amadou); } } - class AbonneControllerWebkioskWithAbonneSIGBTest extends AbonneControllerWebkioskTestCase { public function setUp() { parent::setUp(); diff --git a/tests/application/modules/push/controllers/MultimediaControllerTest.php b/tests/application/modules/push/controllers/MultimediaControllerTest.php index 3f7028de3cdf215dfe037bee2c59bbd936c8497a..91b10198686d3b2bce27c8e51c376c97684e8495 100644 --- a/tests/application/modules/push/controllers/MultimediaControllerTest.php +++ b/tests/application/modules/push/controllers/MultimediaControllerTest.php @@ -20,35 +20,48 @@ */ require_once 'AbstractControllerTestCase.php'; -abstract class Push_MultimediaControllerInvalidConfigTestCase extends AbstractControllerTestCase { +abstract class Push_MultimediaControllerTestCase extends AbstractControllerTestCase { /** @var Storm_Test_ObjectWrapper */ protected $_log; public function setUp() { parent::setUp(); - - $this->_log = Storm_Test_ObjectWrapper::mock() - ->whenCalled('err') - ->answers(null) - - ->whenCalled('info') - ->answers(null); + $this->_log = Storm_Test_ObjectWrapper::mock(); + Class_Multimedia::getInstance()->setLog($this->_log); + } +} + - Class_Multimedia::setLog($this->_log); - $this->postDispatch('/push/multimedia/config', $this->_getInvalidParams()); +class Push_MultimediaControllerInvalidConfigTest extends Push_MultimediaControllerTestCase { + public function setUp() { + parent::setUp(); + $this->_log + ->whenCalled('err')->answers(null) + ->whenCalled('info')->answers(null); } - /** @test */ - public function startShouldBeLogged() { - $this->assertTrue($this->_log->methodHasBeenCalled('info')); + public function datas() { + return [ + [[], 'Missing json parameter'], + [['json' => '{}'], 'Missing sign parameter'], + [['json' => 'it is invalid', 'sign' => 'iu/-@+uieiucrc'], 'Invalid json'], + [['json' => '[{"libelle":"Groupe 1", "id":1, "site":{"id":1,"libelle":"Site 1"}, "postes":[{"id":1, "libelle":"Poste 1", "os":"Windows XP", "maintenance":"1"}, {"id":2, "libelle":"Poste 2", "os":"Ubuntu Lucid Lynx", "maintenance":"0"}]}]', + 'sign' => 'iu/-@+uieiucrc'], + 'Sign check failure'] + ]; } - /** @return array */ - protected function _getInvalidParams() { - return array(); + /** + * @test + * @dataProvider datas + */ + public function withParamsShouldHaveError($params, $message) { + $this->postDispatch('/push/multimedia/config', $params); + $this->assertTrue($this->_log->methodHasBeenCalled('info')); + $this->_assertErrorLogWithMessage($message); } @@ -59,105 +72,69 @@ abstract class Push_MultimediaControllerInvalidConfigTestCase extends AbstractCo } -class Push_MultimediaControllerMissingJsonConfigTest extends Push_MultimediaControllerInvalidConfigTestCase { - /** @test */ - public function missingJsonErrorShouldBeLogged() { - $this->_assertErrorLogWithMessage('Missing json parameter'); - } -} - - -class Push_MultimediaControllerMissingSignConfigTest extends Push_MultimediaControllerInvalidConfigTestCase { - /** @return array */ - protected function _getInvalidParams() { - return array('json' => '{}'); - } - - /** @test */ - public function missingSignErrorShouldBeLogged() { - $this->_assertErrorLogWithMessage('Missing sign parameter'); - } -} - - -class Push_MultimediaControllerInvalidJsonConfigTest extends Push_MultimediaControllerInvalidConfigTestCase { - /** @return array */ - protected function _getInvalidParams() { - return array('json' => 'it is invalid', 'sign' => 'iu/-@+uieiucrc'); - } - - /** @test */ - public function invalidJsonErrorShouldBeLogged() { - $this->_assertErrorLogWithMessage('Invalid json'); - } -} - -class Push_MultimediaControllerInvalidSignConfigTest extends Push_MultimediaControllerInvalidConfigTestCase { - /** @return array */ - protected function _getInvalidParams() { - return array('json' => '[{"libelle":"Groupe 1", "id":1, "site":{"id":1,"libelle":"Site 1"}, "postes":[{"id":1, "libelle":"Poste 1", "os":"Windows XP", "maintenance":"1"}, {"id":2, "libelle":"Poste 2", "os":"Ubuntu Lucid Lynx", "maintenance":"0"}]}]', - 'sign' => 'iu/-@+uieiucrc'); - } - - /** @test */ - public function signCheckFailureErrorShouldBeLogged() { - $this->_assertErrorLogWithMessage('Sign check failure'); - } -} +class Push_MultimediaControllerValidConfigTest extends Push_MultimediaControllerTestCase { + protected $_private_key ="-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQCm1hgee4LI7ji06BkuV8O4XpxHe59n80Gge/r3uROj+Tuxx2AO +Sk9gX7e4JNVsdfw22ft+xVqwAii8qu4/fYuicrrZl66WXceACmsgGWEdHMB7ZPUd +4HqR5bdE1Xnr1Q0Z9IIku6Naxt/yy0P5Gv+ZlW7U287hF3sdh2dp7UgguQIDAQAB +AoGAUQv+aYh8r1myqId7/Bxckws7BirS9G+iuPChqYf6N5US37lIO4jz6JB3MniK +SYdDf+4DE8GR3aEe4xBybttxYi9JSG28LxSMvUCv13AOpj8GT34cDxDgwczDI9nb +549/hdGpRF+vW0imfA1lguyuteoQHRMUImoHdl8ZRzPXlaUCQQDWEThzawIlbjah +v5uEQ5OjHIJfDECDyV4IIBGfwcpsiCH98Rb4SzcFRvoIJ7HtmNuHT6/fR5JQmnQG +0Vn6qTw3AkEAx4Rk4e/uLSxdDrsqI3rXg+mSNUAXc1IlHUJpRvoktbpfxTwRjwxO +Pp7HmcaApw5RuJ0nOnNGE0J4GBjEAglyjwJAKJ+p+9VB2gKZYYawJ6B/YwPlBc6Y +a6oKKzaSwaOQG5qWANAA0OvNLDY0+tk1neZVOs93i8LUVHGLNUQDdFsrbwJATEXi +wzUUGpThJmaK33Fwvm8mg9DyphV7NspSsN2j9w0+24nxNHyB1RKiP7lRKYwh1a/O +dVvoKCi6/ItLM3QlJQJAEyvWEfvqKnFH13ID5oe/GVOih7O6VzgecEgd3ZawBVWd +dsZ77MnSRzIyzrfJ3LlluaXhJl2qJBITE7X8y5RTKw== +-----END RSA PRIVATE KEY-----"; + protected $_public_key = "-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCm1hgee4LI7ji06BkuV8O4XpxH +e59n80Gge/r3uROj+Tuxx2AOSk9gX7e4JNVsdfw22ft+xVqwAii8qu4/fYuicrrZ +l66WXceACmsgGWEdHMB7ZPUd4HqR5bdE1Xnr1Q0Z9IIku6Naxt/yy0P5Gv+ZlW7U +287hF3sdh2dp7UgguQIDAQAB +-----END PUBLIC KEY-----"; -class Push_MultimediaControllerValidConfigTest extends AbstractControllerTestCase { protected $_group; protected $_device_wrapper; protected $_device_to_delete; - protected $_devices = array(); + protected $_devices = []; public function setUp() { parent::setUp(); - Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Multimedia_Location') - ->whenCalled('findFirstBy') - ->answers(null) - - ->whenCalled('save') - ->willDo(function($model) {$model->setId(1);return true;}); - - $device_group_wrapper = Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Multimedia_DeviceGroup') - ->whenCalled('findFirstBy') - ->answers(null) - - ->whenCalled('save') - ->answers(true); - $this->_device_wrapper = Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Multimedia_Device') - ->whenCalled('findFirstBy') - ->answers(null) - - ->whenCalled('delete') - ->answers(null) - - ->whenCalled('save') - ->willDo(function ($model) { - $this->_devices[] = $model; - return true; - }) + $this->_log->whenCalled('info')->answers(null); + + Class_AdminVar::newInstanceWithId('MULTIMEDIA_KEY') + ->setValeur($this->_public_key); + Class_Multimedia_Location::beVolatile(); + Class_Multimedia_DeviceGroup::beVolatile(); + + $this->_device_wrapper = Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Multimedia_Device') ->whenCalled('findAllBy') ->with(['where' => 'id_origine not in(\'1-1\',\'1-2\') and id_origine like \'1-%\'']) - ->answers([$this->_device_to_delete = Class_Multimedia_Device::newInstanceWithId(34) - ->setIdOrigine('1-34')]); + ->answers([ + $this->fixture('Class_Multimedia_Device', + ['id' => 34, 'id_origine' => '1-34'])]); - Class_Multimedia::setInstance(Storm_Test_ObjectWrapper::mock() - ->whenCalled('isValidHashForContent') - ->answers(true)); + $datas = '[{"libelle":"Groupe 1", "id":1, "site":{"id":1,"libelle":"Site 1","admin_url":"192.168.2.92"}, "postes":[{"id":1, "libelle":"Poste 1", "os":"Windows XP", "maintenance":"1"}, {"id":2, "libelle":"Poste 2", "os":"Ubuntu Lucid Lynx", "maintenance":"0"}]}]'; $this->postDispatch( '/push/multimedia/config', - array( - 'json' => '[{"libelle":"Groupe 1", "id":1, "site":{"id":1,"libelle":"Site 1","admin_url":"192.168.2.92"}, "postes":[{"id":1, "libelle":"Poste 1", "os":"Windows XP", "maintenance":"1"}, {"id":2, "libelle":"Poste 2", "os":"Ubuntu Lucid Lynx", "maintenance":"0"}]}]', - 'sign' => 'auieau09676IUE96')); + ['json' => $datas, + 'sign' => $this->sign($datas)]); - $this->_group = $device_group_wrapper->getFirstAttributeForLastCallOn('save'); + $this->_group = Class_Multimedia_DeviceGroup::find(1); + $this->_devices = Class_Multimedia_Device::findAll(); + } + + + protected function sign($datas) { + openssl_sign($datas, $sign, $this->_private_key); + return base64_encode($sign); } @@ -246,12 +223,10 @@ class Push_MultimediaControllerValidConfigTest extends AbstractControllerTestCas } - /** @test */ public function deviceNotInPushShouldHaveBeenDeleted() { - $this->assertEquals($this->_device_to_delete, Class_Multimedia_Device::getFirstAttributeForLastCallOn('delete')); + $this->assertNull(Class_Multimedia_Device::find(34)); } - } @@ -303,25 +278,30 @@ yIuUs1qpg+Vx0R+3VwIDAQAB } public function signUrl($action){ - $connector = new Class_Multimedia_Connector_Webkiosk(); + $connector = new Class_Multimedia_Connector_Multimedia(); openssl_sign($connector->dataFor($action), $sign, $this->_private_key); - return base64_encode($sign); + return base64_encode($sign); } } -abstract class AllBorrowersMultimediaControllerJsonEncodeOnlyTestCase extends AllBorrowersMultimediaControllerTestCase { - public function setUp() { + +abstract class AllBorrowersMultimediaControllerJsonEncodeOnlyTestCase +extends AllBorrowersMultimediaControllerTestCase { + public function setUp() { parent::setUp(); - $connector = new Class_Multimedia_Connector_Multimedia(); - $connector->getGeneratorRendering()->setRenderers([new Class_Multimedia_Connector_Renderer_Json()]); - $connector->getGeneratorRendering()->setCurrentDate('2013-10-15 16:26:23'); - Class_Multimedia_Connector_Multimedia::setInstance($connector); + $connector = new Class_Multimedia_Connector_Multimedia(); + $connector->getGeneratorRendering() + ->setRenderers(['Json']) + ->setCurrentDate('2013-10-15 16:26:23'); + Class_Multimedia_Connector_Multimedia::setInstance($connector); } } -class AllBorrowersMultimediaControllerGetAllBorrowersValidationTest extends AllBorrowersMultimediaControllerJsonEncodeOnlyTestCase { + +class AllBorrowersMultimediaControllerGetAllBorrowersValidationTest +extends AllBorrowersMultimediaControllerJsonEncodeOnlyTestCase { public function setUp() { parent::setUp(); $this->_resp = $this->getResponseJsonDecode('get-all-borrowers'); @@ -348,16 +328,10 @@ class AllBorrowersMultimediaControllerNoParameterTest extends AllBorrowersMultim public function setUp() { parent::setUp(); - Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Users') - ->whenCalled('getAllBorrowers') - ->answers([AbonneMultimediaControllerMultimediaUsersFixtures::getLoas(), - AbonneMultimediaControllerMultimediaUsersFixtures::getAmadou()]); - Class_AdminVar::getLoader() ->newInstanceWithId('MULTIMEDIA_KEY') ->setValeur($this->getPublicKey()); - $sign = $this->signUrl('get-all-borrowers'); $this->_resp = $this->getResponseJsonDecode('get-all-borrowers'); } @@ -373,16 +347,12 @@ class AllBorrowersMultimediaControllerNoParameterTest extends AllBorrowersMultim } } -class AllBorrowersMultimediaControllerWebkioskDisabledTest extends AllBorrowersMultimediaControllerJsonEncodeOnlyTestCase { + +class AllBorrowersMultimediaControllerDisabledTest extends AllBorrowersMultimediaControllerJsonEncodeOnlyTestCase { public function setUp() { parent::setUp(); - Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Users') - ->whenCalled('getAllBorrowers') - ->answers([AbonneMultimediaControllerMultimediaUsersFixtures::getLoas(), - AbonneMultimediaControllerMultimediaUsersFixtures::getAmadou()]); - Class_AdminVar::getLoader() ->newInstanceWithId('MULTIMEDIA_KEY') ->setValeur(''); @@ -410,11 +380,6 @@ class AllBorrowersMultimediaControllerInvalidSignatureTest extends AllBorrowersM public function setUp() { parent::setUp(); - Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Users') - ->whenCalled('getAllBorrowers') - ->answers([AbonneMultimediaControllerMultimediaUsersFixtures::getLoas(), - AbonneMultimediaControllerMultimediaUsersFixtures::getAmadou()]); - Class_AdminVar::getLoader() ->newInstanceWithId('MULTIMEDIA_KEY') ->setValeur($this->_invalid_public_key); @@ -442,11 +407,6 @@ class AllBorrowersMultimediaControllerErrorCheckingSignatureTest extends AllBorr public function setUp() { parent::setUp(); - Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Users') - ->whenCalled('getAllBorrowers') - ->answers([AbonneMultimediaControllerMultimediaUsersFixtures::getLoas(), - AbonneMultimediaControllerMultimediaUsersFixtures::getAmadou()]); - Class_AdminVar::getLoader() ->newInstanceWithId('MULTIMEDIA_KEY') ->setValeur('"-----BEGIN PUBLIC KEY----- @@ -476,7 +436,9 @@ class AllBorrowersMultimediaControllerGetAllBorrowersNumberOfOccurencesReturnedT parent::setUp(); Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Users') - ->whenCalled('getAllBorrowers') + ->whenCalled('countBorrowers') + ->answers(2) + ->whenCalled('getBorrowersByPage') ->answers([AbonneMultimediaControllerMultimediaUsersFixtures::getLoas(), AbonneMultimediaControllerMultimediaUsersFixtures::getAmadou()]); @@ -502,12 +464,13 @@ class AllBorrowersMultimediaControllerGetAllBorrowersNumberOfOccurencesReturnedT class AllBorrowersMultimediaControllerFirstBorrowerReturnedIsLoasTest extends AllBorrowersMultimediaControllerJsonEncodeOnlyTestCase { - - public function setUp() { parent::setUp(); - Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Users') - ->whenCalled('getAllBorrowers') + + Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Users') + ->whenCalled('countBorrowers') + ->answers(2) + ->whenCalled('getBorrowersByPage') ->answers([AbonneMultimediaControllerMultimediaUsersFixtures::getLoas(), AbonneMultimediaControllerMultimediaUsersFixtures::getAmadou()]); @@ -534,7 +497,6 @@ class AllBorrowersMultimediaControllerFirstBorrowerReturnedIsLoasTest extends Al public function roleLevelShouldNotBePresent() { $this->assertFalse( property_exists($this->_resp->data[0],'roleLevel')); } - } diff --git a/tests/application/modules/push/controllers/WebkioskControllerTest.php b/tests/application/modules/push/controllers/WebkioskControllerTest.php index 877ad7e6fd3f0bac4ace6caff89e2738b3521d36..17e0f0f4263b856a4c06064be87767d90f3897ee 100644 --- a/tests/application/modules/push/controllers/WebkioskControllerTest.php +++ b/tests/application/modules/push/controllers/WebkioskControllerTest.php @@ -80,12 +80,13 @@ yIuUs1qpg+Vx0R+3VwIDAQAB abstract class WebkioskControllerJsonEncodeOnlyTestCase extends WebkioskControllerTestCase { - public function setUp() { + public function setUp() { parent::setUp(); - $connector = new Class_Multimedia_Connector_Webkiosk(); - $connector->getGeneratorRendering()->setRenderers([new Class_Multimedia_Connector_Renderer_Json()]); - $connector->getGeneratorRendering()->setCurrentDate('2013-10-15 16:26:23'); - Class_Multimedia_Connector_Webkiosk::setInstance($connector); + $connector = new Class_Multimedia_Connector_Webkiosk(); + $connector->getGeneratorRendering() + ->setRenderers(['Json']) + ->setCurrentDate('2013-10-15 16:26:23'); + Class_Multimedia_Connector_Webkiosk::setInstance($connector); } } @@ -245,7 +246,9 @@ class WebkioskControllerGetAllBorrowersNumberOfOccurencesReturnedTest extends We parent::setUp(); Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Users') - ->whenCalled('getAllBorrowers') + ->whenCalled('countBorrowers') + ->answers(2) + ->whenCalled('getBorrowersByPage') ->answers([AbonneControllerWebkioskUsersFixtures::getLoas(), AbonneControllerWebkioskUsersFixtures::getAmadou()]); @@ -275,8 +278,10 @@ class WebkioskControllerFirstBorrowerReturnedIsLoasTest extends WebkioskControll public function setUp() { parent::setUp(); - Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Users') - ->whenCalled('getAllBorrowers') + Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Users') + ->whenCalled('countBorrowers') + ->answers(2) + ->whenCalled('getBorrowersByPage') ->answers([AbonneControllerWebkioskUsersFixtures::getLoas(), AbonneControllerWebkioskUsersFixtures::getAmadou()]); @@ -301,7 +306,7 @@ class WebkioskControllerFirstBorrowerReturnedIsLoasTest extends WebkioskControll /** @test */ public function roleLevelShouldNotBePresent() { - $this->assertFalse( property_exists($this->_resp->data[0],'roleLevel')); + $this->assertFalse(property_exists($this->_resp->data[0],'roleLevel')); } } @@ -311,9 +316,7 @@ class WebkioskControllerFirstBorrowerReturnedIsLoasTest extends WebkioskControll abstract class WebkioskControllerJsonEncryptedTestCase extends WebkioskControllerTestCase { public function setUp() { parent::setUp(); - $connector = new Class_Multimedia_Connector_Webkiosk(); - $connector->getGeneratorRendering()->setRenderers([new Class_Multimedia_Connector_Renderer_Json(), new Class_Multimedia_Connector_Renderer_Encrypt(), new Class_Multimedia_Connector_Renderer_Json()]); - Class_Multimedia_Connector_Webkiosk::setInstance($connector); + Class_Multimedia_Connector_Webkiosk::setInstance(new Class_Multimedia_Connector_Webkiosk()); } } @@ -322,12 +325,12 @@ class WebkioskControllerEncryptedDataTest extends WebkioskControllerJsonEncrypte public function setUp() { parent::setUp(); - Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Users') + Storm_Test_ObjectWrapper::onLoaderOfModel('Class_Users') ->whenCalled('getAllBorrowers') ->answers([AbonneControllerWebkioskUsersFixtures::getLoas(), AbonneControllerWebkioskUsersFixtures::getAmadou()]); - - Class_Multimedia_Connector_Renderer_Encrypt::setOpenssl(new OpensslTesting()); + + Class_Multimedia_Connector_Renderer_Encrypt::setOpenssl(new OpensslTesting()); Class_AdminVar::getLoader() ->newInstanceWithId('WEBKIOSK_KEY') ->setValeur($this->getPublicKey()); diff --git a/tests/library/Class/MultimediaTest.php b/tests/library/Class/MultimediaTest.php index 09b43caab998767b2688f12d7ff257702f1ee760..a982506e6e6cc990555bf9f27e0a1e139771d39a 100644 --- a/tests/library/Class/MultimediaTest.php +++ b/tests/library/Class/MultimediaTest.php @@ -1,6 +1,6 @@ <?php /** - * Copyright (c) 2012, Agence Française Informatique (AFI). All rights reserved. + * Copyright (c) 2012-2014, Agence Française Informatique (AFI). All rights reserved. * * AFI-OPAC 2.0 is free software; you can redistribute it and/or modify * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by @@ -19,28 +19,40 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -class MultimediaTest extends PHPUnit_Framework_TestCase { + +class Class_MultimediaHashTest extends PHPUnit_Framework_TestCase{ + protected $_datas = '[{"libelle":"Actualit\u00e9","id":"5","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"44","libelle":"ANACTU05","os":"Windows XP","maintenance":"0"},{"id":"46","libelle":"ANACTU04","os":"Windows XP","maintenance":"0"},{"id":"48","libelle":"ANACTU12","os":"Windows XP","maintenance":"0"},{"id":"49","libelle":"ANACTU11","os":"Windows XP","maintenance":"0"},{"id":"50","libelle":"ANACTU10","os":"Windows XP","maintenance":"0"},{"id":"51","libelle":"ANACTU08","os":"Windows XP","maintenance":"0"},{"id":"52","libelle":"ANACTU06","os":"Windows XP","maintenance":"0"},{"id":"62","libelle":"ANACTU07","os":"Windows XP","maintenance":"0"},{"id":"63","libelle":"ANACTU13","os":"Windows XP","maintenance":"0"},{"id":"64","libelle":"ANACTU09","os":"Windows XP","maintenance":"0"}]},{"libelle":"default","id":"1","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"77","libelle":"ANFICT30","os":"Windows XP","maintenance":"0"}]},{"libelle":"Documentation","id":"3","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"13","libelle":"ANDOCU07","os":"Windows XP","maintenance":"0"},{"id":"14","libelle":"ANDOCU05","os":"Windows XP","maintenance":"0"},{"id":"15","libelle":"ANDOCU06","os":"Windows XP","maintenance":"0"},{"id":"17","libelle":"ANDOCU10","os":"Windows XP","maintenance":"0"},{"id":"18","libelle":"ANDOCU09","os":"Windows XP","maintenance":"0"},{"id":"20","libelle":"ANDOCU12","os":"Windows XP","maintenance":"0"},{"id":"21","libelle":"ANDOCU11","os":"Windows XP","maintenance":"0"},{"id":"22","libelle":"ANDOCU04","os":"Windows XP","maintenance":"0"},{"id":"57","libelle":"ANDOCU14","os":"Windows XP","maintenance":"0"},{"id":"59","libelle":"ANDOCU15","os":"Windows XP","maintenance":"0"},{"id":"61","libelle":"ANDOCU16","os":"Windows XP","maintenance":"0"}]},{"libelle":"Fiction","id":"2","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"9","libelle":"ANFICT03","os":"Windows XP","maintenance":"0"},{"id":"10","libelle":"ANFICT04","os":"Windows XP","maintenance":"0"},{"id":"11","libelle":"ANFICT02","os":"Windows XP","maintenance":"0"},{"id":"12","libelle":"ANFICT01","os":"Windows XP","maintenance":"0"},{"id":"66","libelle":"ANFICT05","os":"Windows 7","maintenance":"0"}]},{"libelle":"Handicap\u00e9","id":"8","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"42","libelle":"ANFICT10","os":"Windows XP","maintenance":"0"},{"id":"43","libelle":"ANFICT11","os":"Windows XP","maintenance":"0"}]},{"libelle":"Jeunesse","id":"6","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"26","libelle":"ANJEUN02","os":"Windows XP","maintenance":"0"},{"id":"27","libelle":"ANJEUN03","os":"Windows XP","maintenance":"0"},{"id":"28","libelle":"ANJEUN04","os":"Windows XP","maintenance":"0"},{"id":"29","libelle":"ANJEUN05","os":"Windows XP","maintenance":"0"},{"id":"30","libelle":"ANJEUN08","os":"Windows XP","maintenance":"0"},{"id":"31","libelle":"ANJEUN06","os":"Windows XP","maintenance":"0"},{"id":"32","libelle":"ANJEUN09","os":"Windows XP","maintenance":"0"},{"id":"33","libelle":"ANJEUN07","os":"Windows XP","maintenance":"0"},{"id":"56","libelle":"ANJEUN10","os":"Windows XP","maintenance":"0"}]},{"libelle":"Musique","id":"4","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"38","libelle":"ANMUSI04","os":"Windows XP","maintenance":"0"},{"id":"39","libelle":"ANMUSI03","os":"Windows XP","maintenance":"0"},{"id":"40","libelle":"ANMUSI06","os":"Windows XP","maintenance":"0"},{"id":"41","libelle":"ANMUSI05","os":"Windows XP","maintenance":"0"}]},{"libelle":"Opac","id":"7","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"4","libelle":"ANFICT06","os":"Windows XP","maintenance":"0"},{"id":"7","libelle":"ANFICT07","os":"Windows XP","maintenance":"0"},{"id":"8","libelle":"ANFICT08","os":"Windows XP","maintenance":"0"},{"id":"19","libelle":"ANDOCU08","os":"Windows XP","maintenance":"0"},{"id":"23","libelle":"ANDOCU13","os":"Windows XP","maintenance":"0"},{"id":"24","libelle":"ANDOCU02","os":"Windows XP","maintenance":"0"},{"id":"25","libelle":"ANDOCU01","os":"Windows XP","maintenance":"0"},{"id":"34","libelle":"ANJEUN11","os":"Windows XP","maintenance":"0"},{"id":"35","libelle":"ANJEUN01","os":"Windows XP","maintenance":"0"},{"id":"36","libelle":"ANMUSI02","os":"Windows XP","maintenance":"0"},{"id":"37","libelle":"ANMUSI01","os":"Windows XP","maintenance":"0"},{"id":"45","libelle":"ANACTU03","os":"Windows XP","maintenance":"0"},{"id":"47","libelle":"ANACTU02","os":"Windows XP","maintenance":"0"},{"id":"65","libelle":"ANACTU01","os":"Windows XP","maintenance":"0"}]}]'; + + protected $_multimedia; + + public function setUp() { + parent::setUp(); + $this->_multimedia = Class_Multimedia::getInstance(); + + Class_AdminVar::newInstanceWithId(Class_Multimedia_HashValidator_Null::KEY_VAR_NAME) + ->setValeur('a7de41db2505672d8052117869c08517'); + + $oldTimeZone = date_default_timezone_get(); + date_default_timezone_set('UTC'); + Class_Multimedia_HashValidator_Md5::setTimeSource( + Storm_Test_ObjectWrapper::mock() + ->whenCalled('time') + ->answers(strtotime('2012-07-17'))); + date_default_timezone_set($oldTimeZone); + } + + /** @test */ public function validHashShouldBeValid() { - Class_Multimedia::setInstance(new Class_MultimediaTesting); - - $this->assertTrue(Class_Multimedia::isValidHash( - 'b2d76718d5ba373c8c65b1dd9c724e7b', //'a1e3bdf173b8060891fb4c8af6099e10', - '[{"libelle":"Actualit\u00e9","id":"5","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"44","libelle":"ANACTU05","os":"Windows XP","maintenance":"0"},{"id":"46","libelle":"ANACTU04","os":"Windows XP","maintenance":"0"},{"id":"48","libelle":"ANACTU12","os":"Windows XP","maintenance":"0"},{"id":"49","libelle":"ANACTU11","os":"Windows XP","maintenance":"0"},{"id":"50","libelle":"ANACTU10","os":"Windows XP","maintenance":"0"},{"id":"51","libelle":"ANACTU08","os":"Windows XP","maintenance":"0"},{"id":"52","libelle":"ANACTU06","os":"Windows XP","maintenance":"0"},{"id":"62","libelle":"ANACTU07","os":"Windows XP","maintenance":"0"},{"id":"63","libelle":"ANACTU13","os":"Windows XP","maintenance":"0"},{"id":"64","libelle":"ANACTU09","os":"Windows XP","maintenance":"0"}]},{"libelle":"default","id":"1","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"77","libelle":"ANFICT30","os":"Windows XP","maintenance":"0"}]},{"libelle":"Documentation","id":"3","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"13","libelle":"ANDOCU07","os":"Windows XP","maintenance":"0"},{"id":"14","libelle":"ANDOCU05","os":"Windows XP","maintenance":"0"},{"id":"15","libelle":"ANDOCU06","os":"Windows XP","maintenance":"0"},{"id":"17","libelle":"ANDOCU10","os":"Windows XP","maintenance":"0"},{"id":"18","libelle":"ANDOCU09","os":"Windows XP","maintenance":"0"},{"id":"20","libelle":"ANDOCU12","os":"Windows XP","maintenance":"0"},{"id":"21","libelle":"ANDOCU11","os":"Windows XP","maintenance":"0"},{"id":"22","libelle":"ANDOCU04","os":"Windows XP","maintenance":"0"},{"id":"57","libelle":"ANDOCU14","os":"Windows XP","maintenance":"0"},{"id":"59","libelle":"ANDOCU15","os":"Windows XP","maintenance":"0"},{"id":"61","libelle":"ANDOCU16","os":"Windows XP","maintenance":"0"}]},{"libelle":"Fiction","id":"2","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"9","libelle":"ANFICT03","os":"Windows XP","maintenance":"0"},{"id":"10","libelle":"ANFICT04","os":"Windows XP","maintenance":"0"},{"id":"11","libelle":"ANFICT02","os":"Windows XP","maintenance":"0"},{"id":"12","libelle":"ANFICT01","os":"Windows XP","maintenance":"0"},{"id":"66","libelle":"ANFICT05","os":"Windows 7","maintenance":"0"}]},{"libelle":"Handicap\u00e9","id":"8","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"42","libelle":"ANFICT10","os":"Windows XP","maintenance":"0"},{"id":"43","libelle":"ANFICT11","os":"Windows XP","maintenance":"0"}]},{"libelle":"Jeunesse","id":"6","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"26","libelle":"ANJEUN02","os":"Windows XP","maintenance":"0"},{"id":"27","libelle":"ANJEUN03","os":"Windows XP","maintenance":"0"},{"id":"28","libelle":"ANJEUN04","os":"Windows XP","maintenance":"0"},{"id":"29","libelle":"ANJEUN05","os":"Windows XP","maintenance":"0"},{"id":"30","libelle":"ANJEUN08","os":"Windows XP","maintenance":"0"},{"id":"31","libelle":"ANJEUN06","os":"Windows XP","maintenance":"0"},{"id":"32","libelle":"ANJEUN09","os":"Windows XP","maintenance":"0"},{"id":"33","libelle":"ANJEUN07","os":"Windows XP","maintenance":"0"},{"id":"56","libelle":"ANJEUN10","os":"Windows XP","maintenance":"0"}]},{"libelle":"Musique","id":"4","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"38","libelle":"ANMUSI04","os":"Windows XP","maintenance":"0"},{"id":"39","libelle":"ANMUSI03","os":"Windows XP","maintenance":"0"},{"id":"40","libelle":"ANMUSI06","os":"Windows XP","maintenance":"0"},{"id":"41","libelle":"ANMUSI05","os":"Windows XP","maintenance":"0"}]},{"libelle":"Opac","id":"7","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"4","libelle":"ANFICT06","os":"Windows XP","maintenance":"0"},{"id":"7","libelle":"ANFICT07","os":"Windows XP","maintenance":"0"},{"id":"8","libelle":"ANFICT08","os":"Windows XP","maintenance":"0"},{"id":"19","libelle":"ANDOCU08","os":"Windows XP","maintenance":"0"},{"id":"23","libelle":"ANDOCU13","os":"Windows XP","maintenance":"0"},{"id":"24","libelle":"ANDOCU02","os":"Windows XP","maintenance":"0"},{"id":"25","libelle":"ANDOCU01","os":"Windows XP","maintenance":"0"},{"id":"34","libelle":"ANJEUN11","os":"Windows XP","maintenance":"0"},{"id":"35","libelle":"ANJEUN01","os":"Windows XP","maintenance":"0"},{"id":"36","libelle":"ANMUSI02","os":"Windows XP","maintenance":"0"},{"id":"37","libelle":"ANMUSI01","os":"Windows XP","maintenance":"0"},{"id":"45","libelle":"ANACTU03","os":"Windows XP","maintenance":"0"},{"id":"47","libelle":"ANACTU02","os":"Windows XP","maintenance":"0"},{"id":"65","libelle":"ANACTU01","os":"Windows XP","maintenance":"0"}]}]')); + $this->assertTrue($this->_multimedia->isValidHash('b2d76718d5ba373c8c65b1dd9c724e7b', + $this->_datas)); } /** @test */ public function invalidHashShouldNotBeValid() { - Class_Multimedia::setInstance(new Class_MultimediaTesting); - $this->assertFalse(Class_Multimedia::isValidHash( - '3dd16uiessseruiest8973iue98759', - '[{"libelle":"Actualit\u00e9","id":"5","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"44","libelle":"ANACTU05","os":"Windows XP","maintenance":"0"},{"id":"46","libelle":"ANACTU04","os":"Windows XP","maintenance":"0"},{"id":"48","libelle":"ANACTU12","os":"Windows XP","maintenance":"0"},{"id":"49","libelle":"ANACTU11","os":"Windows XP","maintenance":"0"},{"id":"50","libelle":"ANACTU10","os":"Windows XP","maintenance":"0"},{"id":"51","libelle":"ANACTU08","os":"Windows XP","maintenance":"0"},{"id":"52","libelle":"ANACTU06","os":"Windows XP","maintenance":"0"},{"id":"62","libelle":"ANACTU07","os":"Windows XP","maintenance":"0"},{"id":"63","libelle":"ANACTU13","os":"Windows XP","maintenance":"0"},{"id":"64","libelle":"ANACTU09","os":"Windows XP","maintenance":"0"}]},{"libelle":"default","id":"1","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"77","libelle":"ANFICT30","os":"Windows XP","maintenance":"0"}]},{"libelle":"Documentation","id":"3","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"13","libelle":"ANDOCU07","os":"Windows XP","maintenance":"0"},{"id":"14","libelle":"ANDOCU05","os":"Windows XP","maintenance":"0"},{"id":"15","libelle":"ANDOCU06","os":"Windows XP","maintenance":"0"},{"id":"17","libelle":"ANDOCU10","os":"Windows XP","maintenance":"0"},{"id":"18","libelle":"ANDOCU09","os":"Windows XP","maintenance":"0"},{"id":"20","libelle":"ANDOCU12","os":"Windows XP","maintenance":"0"},{"id":"21","libelle":"ANDOCU11","os":"Windows XP","maintenance":"0"},{"id":"22","libelle":"ANDOCU04","os":"Windows XP","maintenance":"0"},{"id":"57","libelle":"ANDOCU14","os":"Windows XP","maintenance":"0"},{"id":"59","libelle":"ANDOCU15","os":"Windows XP","maintenance":"0"},{"id":"61","libelle":"ANDOCU16","os":"Windows XP","maintenance":"0"}]},{"libelle":"Fiction","id":"2","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"9","libelle":"ANFICT03","os":"Windows XP","maintenance":"0"},{"id":"10","libelle":"ANFICT04","os":"Windows XP","maintenance":"0"},{"id":"11","libelle":"ANFICT02","os":"Windows XP","maintenance":"0"},{"id":"12","libelle":"ANFICT01","os":"Windows XP","maintenance":"0"},{"id":"66","libelle":"ANFICT05","os":"Windows 7","maintenance":"0"}]},{"libelle":"Handicap\u00e9","id":"8","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"42","libelle":"ANFICT10","os":"Windows XP","maintenance":"0"},{"id":"43","libelle":"ANFICT11","os":"Windows XP","maintenance":"0"}]},{"libelle":"Jeunesse","id":"6","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"26","libelle":"ANJEUN02","os":"Windows XP","maintenance":"0"},{"id":"27","libelle":"ANJEUN03","os":"Windows XP","maintenance":"0"},{"id":"28","libelle":"ANJEUN04","os":"Windows XP","maintenance":"0"},{"id":"29","libelle":"ANJEUN05","os":"Windows XP","maintenance":"0"},{"id":"30","libelle":"ANJEUN08","os":"Windows XP","maintenance":"0"},{"id":"31","libelle":"ANJEUN06","os":"Windows XP","maintenance":"0"},{"id":"32","libelle":"ANJEUN09","os":"Windows XP","maintenance":"0"},{"id":"33","libelle":"ANJEUN07","os":"Windows XP","maintenance":"0"},{"id":"56","libelle":"ANJEUN10","os":"Windows XP","maintenance":"0"}]},{"libelle":"Musique","id":"4","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"38","libelle":"ANMUSI04","os":"Windows XP","maintenance":"0"},{"id":"39","libelle":"ANMUSI03","os":"Windows XP","maintenance":"0"},{"id":"40","libelle":"ANMUSI06","os":"Windows XP","maintenance":"0"},{"id":"41","libelle":"ANMUSI05","os":"Windows XP","maintenance":"0"}]},{"libelle":"Opac","id":"7","site":{"id":"1","libelle":"antibes"},"postes":[{"id":"4","libelle":"ANFICT06","os":"Windows XP","maintenance":"0"},{"id":"7","libelle":"ANFICT07","os":"Windows XP","maintenance":"0"},{"id":"8","libelle":"ANFICT08","os":"Windows XP","maintenance":"0"},{"id":"19","libelle":"ANDOCU08","os":"Windows XP","maintenance":"0"},{"id":"23","libelle":"ANDOCU13","os":"Windows XP","maintenance":"0"},{"id":"24","libelle":"ANDOCU02","os":"Windows XP","maintenance":"0"},{"id":"25","libelle":"ANDOCU01","os":"Windows XP","maintenance":"0"},{"id":"34","libelle":"ANJEUN11","os":"Windows XP","maintenance":"0"},{"id":"35","libelle":"ANJEUN01","os":"Windows XP","maintenance":"0"},{"id":"36","libelle":"ANMUSI02","os":"Windows XP","maintenance":"0"},{"id":"37","libelle":"ANMUSI01","os":"Windows XP","maintenance":"0"},{"id":"45","libelle":"ANACTU03","os":"Windows XP","maintenance":"0"},{"id":"47","libelle":"ANACTU02","os":"Windows XP","maintenance":"0"},{"id":"65","libelle":"ANACTU01","os":"Windows XP","maintenance":"0"}]}]')); + $this->assertFalse($this->_multimedia->isValidHash('3dd16uiessseruiest8973iue98759', + $this->_datas)); } } - - -class Class_MultimediaTesting extends Class_Multimedia { - public function getKey() {return 'a7de41db2505672d8052117869c08517';} - public function getDate() {return '2012-07-17';} -} \ No newline at end of file +?> \ No newline at end of file