From 2314188b2940e7b9b104cfaa729928986ad6347f Mon Sep 17 00:00:00 2001 From: Michael RICOIS Date: Fri, 8 Apr 2016 15:54:24 +0200 Subject: [PATCH] MAJ des librairies depuis ws --- library/Metier/Insee/MInsee.php | 117 ++++++--- library/Scores/Account/Access.php | 84 +++++++ library/Scores/Auth/Adapter/Db.php | 26 +- library/Scores/Auth/Adapter/Ws.php | 204 +++++++++------ library/Scores/Ws/Server.php | 10 +- library/SdMetier/Rnvp/Adresse.php | 2 +- library/framework/fwk.php | 382 ++++++++++++++--------------- 7 files changed, 506 insertions(+), 319 deletions(-) create mode 100644 library/Scores/Account/Access.php diff --git a/library/Metier/Insee/MInsee.php b/library/Metier/Insee/MInsee.php index e86db2a4..3e9184a4 100644 --- a/library/Metier/Insee/MInsee.php +++ b/library/Metier/Insee/MInsee.php @@ -6270,79 +6270,122 @@ class Metier_Insee_MInsee extends Metier_Insee_Table return $ret[0]['insDATEVE']; } - /** Recherche les siret associés à un siret (successeur et/ou prédécesseur) - ** - ** @param integer $siren Siren de l'entreprise - ** @param integer $nic Nic de l'étabissement - ** @param integer $lien Type de lien (-1=prédécesseur, 0=prédécesseur et/ou successeur, 1=successeur) - **/ + /** + * Recherche les siret associés à un siret (successeur et/ou prédécesseur) + * @param int $siren + * Siren de l'entreprise + * @param int $nic + * Nic de l'étabissement + * @param int $lien + * Type de lien (-1=prédécesseur, 0=prédécesseur et/ou successeur, 1=successeur) + */ public function getSiretAssoc($siren, $nic, $lien=0) { - $tabRet=array(); - $ret=$this->iDb->select('insee.insee_even', + $tabRet = array(); + $ret = $this->iDb->select('insee.insee_even', 'LPAD(insSIREN,9,0) AS insSIREN, LPAD(insNIC,5,0) AS insNIC, insDATEVE, insEVE, insAPET700, insSIEGE, insLIBCOM, insL1_NOMEN, insL2_COMP, insL4_VOIE, insL3_CADR, insL5_DISP, insL6_POST, insCODPOS, insL7_ETRG, insDEPCOM, insCODEVOIE, insNICTRAN, insSIRETPS, insDATEMAJ, idFlux, insSIRETASS, insDESTINAT, insTYPETAB, insORIGINE, insTRAN, insNOMEN, insENSEIGNE, insNUMVOIE, insINDREP, insTYPVOIE, insLIBVOIE, sirVersion', "insSIREN=$siren AND insNIC<>$nic AND (insEVE IN ('510','520','530','540', 'CTS','CTE','STS','STE','MTDS','MTDE','MTAS','MTAE') OR insEVE LIKE 'T%') AND insDATEMAJ IN ( SELECT insDATEMAJ FROM insee.insee_even WHERE insSIREN=$siren AND insNIC=$nic AND (insEVE IN ('510','520','530','540', 'CTS','CTE','STS','STE','MTDS','MTDE','MTAS','MTAE') OR insEVE LIKE 'T%') )", false, MYSQL_ASSOC); - if ( count($ret)>0 ) { + $datePre = $dateSuc = 0; + $nicPre = $nicSuc = 0; + + if (count($ret) > 0) { foreach ($ret as $iRet=>$tabEve) { - if ($tabEve['sirVersion']==4) { - if ($tabEve['insEVE']=='CTE' || $tabEve['insEVE']=='CTS' || $tabEve['insEVE']=='MTAE' || $tabEve['insEVE']=='MTAS') $typeLien='suc'; - elseif ($tabEve['insEVE']=='STE' || $tabEve['insEVE']=='STS' || $tabEve['insEVE']=='MTDE' || $tabEve['insEVE']=='MTDS') $typeLien='pre'; - else $typeLien='ind'; + if ($tabEve['sirVersion'] == 4) { + if (in_array($tabEve['insEVE'], array('CTE','CTS','MTAE','MTAS'))) { + $typeLien = 'suc'; + } + elseif (in_array($tabEve['insEVE'], array('STE','STS','MTDE','MTDS'))) { + $typeLien = 'pre'; + } + else { + $typeLien = 'ind'; + } } else { switch($tabEve['insTYPETAB']*1) { case 8: case 10: case 20: case 30: - if ($lien==1) continue; - $typeLien='pre'; + if ($lien == 1) continue; + $typeLien = 'pre'; break; case 9: case 11: case 21: case 31: - if ($lien==-1) continue; - $typeLien='suc'; + if ($lien == -1) continue; + $typeLien = 'suc'; break; default: switch($tabEve['insTRAN']) { - case 'D': if ($lien==1) continue; $typeLien='pre'; break(2); - case 'A': if ($lien==-1) continue; $typeLien='suc'; break(2); - default : if ($lien<>0) continue; $typeLien='ind'; break; + case 'D': if ($lien == 1) continue; $typeLien='pre'; break(2); + case 'A': if ($lien == -1) continue; $typeLien='suc'; break(2); + default : if ($lien != 0) continue; $typeLien='ind'; break; } } } - $adr1=$tabEve['insL1_NOMEN']; - if ($adr1==NULL) $adr1=$tabEve['insNOMEN']; - $adr2=$tabEve['insL2_COMP']; - if ($adr2==NULL) $adr2=$tabEve['insENSEIGNE']; - $adr4=$tabEve['insL4_VOIE']; - if ($adr4==NULL) $adr4=preg_replace('/ +/',' ', $tabEve['insNUMVOIE'].' '.$tabEve['insINDREP'].' '.$tabEve['insTYPVOIE'].' '.$tabEve['insLIBVOIE']); + // Le NIC prédécesseur ne peut pas être le NIC actuel + if ($nicPre > 0 && $nicPre == $tabEve['insNIC']) { + continue; + } + // Le NIC successeur ne peut pas être le NIC actuel + if ($nicSuc > 0 && $nicSuc == $tabEve['insNIC']) { + continue; + } - $tabRet[$typeLien]=array( - 'siren' => $tabEve['insSIREN'], + // L'évènement successeur ne peut pas être antérieur au prédécesseur + if ($dateSuc > 0 && $datePre > 0 && $dateSuc < $datePre) { + continue; + } + + // Predecesseur et Successeur en mémoire + if ($typeLien == 'pre') { + $datePre = $tabEve['insDATEVE']; + $nicPre = $tabEve['insNIC']; + } + if ($typeLien == 'suc') { + $dateSuc = $tabEve['insDATEVE']; + $nicSuc = $tabEve['insNIC']; + } + + // Data + $adr1 = $tabEve['insL1_NOMEN']; + if ($adr1 == null) { + $adr1=$tabEve['insNOMEN']; + } + $adr2 = $tabEve['insL2_COMP']; + if ($adr2 == null) { + $adr2=$tabEve['insENSEIGNE']; + } + $adr4 = $tabEve['insL4_VOIE']; + if ($adr4 == null) { + $adr4 = preg_replace('/ +/',' ', $tabEve['insNUMVOIE'].' '.$tabEve['insINDREP'].' '. + $tabEve['insTYPVOIE'].' '.$tabEve['insLIBVOIE']); + } + + $tabRet[$typeLien] = array( + 'siren' => $tabEve['insSIREN'], 'nic' => $tabEve['insNIC'], 'apeEtab' => $tabEve['insAPET700'], 'codeEve' => $tabEve['insEVE'], 'dateEve' => $tabEve['insDATEVE'], - 'adrL1' => trim($adr1), - 'adrL2' => trim($adr2), - 'adrL3' => trim(prepareString($tabEve['insL3_CADR'])), - 'adrL4' => trim($adr4), - 'adrL5' => trim($tabEve['insL5_DISP']), - 'adrL6' => trim($tabEve['insL6_POST']), - 'adrL7' => trim($tabEve['insL7_ETRG']), + 'adrL1' => trim($adr1), + 'adrL2' => trim($adr2), + 'adrL3' => trim(prepareString($tabEve['insL3_CADR'])), + 'adrL4' => trim($adr4), + 'adrL5' => trim($tabEve['insL5_DISP']), + 'adrL6' => trim($tabEve['insL6_POST']), + 'adrL7' => trim($tabEve['insL7_ETRG']), 'depCom' => $tabEve['insDEPCOM'], 'rivoli' => $tabEve['insCODEVOIE'], - 'siege' => $tabEve['insSIEGE'], + 'siege' => $tabEve['insSIEGE'], 'destinat' => $tabEve['insDESTINAT'], 'typEtab' => $tabEve['insTYPETAB'], 'origine' => $tabEve['insORIGINE'], - // insNICTRAN, insSIRETPS, insDATEMAJ, idFlux, insSIRETASS, ); } } diff --git a/library/Scores/Account/Access.php b/library/Scores/Account/Access.php new file mode 100644 index 00000000..fcfe518b --- /dev/null +++ b/library/Scores/Account/Access.php @@ -0,0 +1,84 @@ + "Export des résultats de la recherche", + 'IPARI' => "Investigation par l'image IparI©", + 'HISTOBODACC' => "Historique des annonces bodacc", + 'INVESTIG' => "Investigation", + 'SEARCHENT' => "Recherche Entreprise", + 'SEARCHDIR' => "Recherche Dirigeant", + 'SEARCHACT' => "Recherche Actionnaire", + + //IDENTITE + 'IDENTITE' => "Fiche d'identité", + 'IDPROCOL' => 'Fiche procédure collective', + 'LIENS' => "Liens inter-entreprise", + 'ETABLISSEMENTS' => "Liste des établissements", + 'GROUPE' => "Informations et organigramme du groupe", + 'EVENINSEE' => 'Évènements INSEE', + 'AVISINSEE' => 'Avis de situation INSEE', + 'AVISRNCS' => 'Avis de situation RNCS', + 'RNVP' => "Normalisation postale", + + //DIRIGEANT + 'DIRIGEANTS' => "Liste des dirigeants", + 'DIRIGEANTSOP' => "Liste des dirigeants opérationnels", + + //FINANCE + 'SYNTHESE' => "Synthèse", + 'RATIOS' => "Ratios", + 'FLUX' => "Flux de trésorerie", + 'LIASSE' => "Liasse fiscale", + 'LIASSEXLS' => "Export des Liasses au format XLS", + 'UPLOADBILAN' => "Saisie de bilan", + 'BOURSE' => "Bourse & cotations", + 'BANQUE' => "Relations bancaires", + + //JURIDIQUE + 'ANNONCES' => "Annonces légales", + 'INFOSREG' => "Informations réglementée", + 'COMPETENCES' => "Compétences territoriales", + 'CONVENTIONS' => "Conventions collectives", + 'MARQUES' => "Marques déposées", + + //EVALUATION + 'INDISCORE' => "indiScore©", + 'INDISCORE2' => "Rapport synthetique", + 'INDISCORE3' => "Rapport complet", + 'INDISCOREP' => "indiScore+", + 'INDISCORE2P' => "Rapport synthetique+", + 'INDISCORE3P' => "Rapport complet+", + 'VALORISATION' => "Valorisation", + 'SCORECSF' => "Score CSF", + 'ENQUETEC' => "Enquête commerciale", + 'AVISCREDIT' => "Avis de crédit personnalisé", + + //PIECES + 'KBIS' => "Extrait RCS", + 'ACTES' => "Pièces officielles", + 'PRIVILEGES' => "Privilèges", + + //SURVEILLANCES + 'SURVANNONCE' => "Surveillance des annonces légales", + 'SURVINSEE' => "Surveillance des événements INSEE", + 'SURVBILAN' => "Surveillance des bilans saisies (liasse fiscale)", + 'SURVSCORE' => "Surveillance des événements sur le score", + 'SURVACTES' => "Surveillance des pieces officielles (comptes annuels, actes)", + 'SURVDIRIGEANTS'=> "Surveillance des dirigeants", + 'SURVPAIEMENTS' => "Surveillance des paiements", + 'SURVLIENS' => "Surveillance des liens financiers", + 'SURVPRIV' => "Surveillance des privilèges", + + //OPTIONS + 'MONPROFIL' => "Mon profil", + 'EDITION' => "Mode Edition", + 'PORTEFEUILLE' => "Portefeuille", + 'SURVLISTE' => "Liste des surveillances", + + //DIVERS + 'INTERNATIONAL' => "Recherche Internationale", + 'BDF' => "Banque de France", + 'WORLDCHECK' => "World-Check Risk Intelligence", + +); \ No newline at end of file diff --git a/library/Scores/Auth/Adapter/Db.php b/library/Scores/Auth/Adapter/Db.php index 8772f87a..23444765 100644 --- a/library/Scores/Auth/Adapter/Db.php +++ b/library/Scores/Auth/Adapter/Db.php @@ -82,11 +82,33 @@ class Scores_Auth_Adapter_Db implements Zend_Auth_Adapter_Interface $identity->hash = $this->_hash; if ( null === $result ) { - return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND, $identity); + return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND, $identity, array("Identifiant ou mot de passe invalid")); } else { if ( $this->_password == $result->password || $this->_password == md5($result->login.'|'.$result->password) ) { + /** + * Date de debut de compte + */ + if ( !empty($result->dateDebutCompte) && $result->dateDebutCompte!='0000-00-00' ) { + $today = mktime(0, 0, 0, date('m'), date('d'), date('Y')); + $dateDebutCompte = mktime(0, 0, 0, substr($result->dateDebutCompte,5,2), substr($result->dateDebutCompte,8,2), substr($result->dateDebutCompte,0,4)); + if ( $today < $dateDebutCompte ) { + return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID, $identity, array("Date de validité dépassé")); + } + } + + /** + * Date de fin de compte + */ + if ( !empty($result->dateFinCompte) && $result->dateFinCompte!='0000-00-00' ) { + $today = mktime(0, 0, 0, date('m'), date('d'), date('Y')); + $dateFinCompte = mktime(0, 0, 0, substr($result->dateFinCompte,5,2), substr($result->dateFinCompte,8,2), substr($result->dateFinCompte,0,4)); + if ( $today > $dateFinCompte ) { + return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID, $identity, array("Date de validité dépassé")); + } + } + $identity->id = $result->id; $identity->idClient = $result->idClient; $timeout = (!empty($result->timeout)) ? $result->timeout : $this->_timeout; @@ -95,7 +117,7 @@ class Scores_Auth_Adapter_Db implements Zend_Auth_Adapter_Interface return new Zend_Auth_Result(Zend_Auth_Result::SUCCESS, $identity); } else { - return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID, $identity); + return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID, $identity, array("Identification impossible")); } } } diff --git a/library/Scores/Auth/Adapter/Ws.php b/library/Scores/Auth/Adapter/Ws.php index c63e8d6e..7ebe3ec0 100644 --- a/library/Scores/Auth/Adapter/Ws.php +++ b/library/Scores/Auth/Adapter/Ws.php @@ -2,37 +2,66 @@ class Scores_Auth_Adapter_Ws implements Zend_Auth_Adapter_Interface { /** - * + * Identifiant de l'utilisateur * @var string */ protected $_username; /** - * + * Password * @var string */ protected $_password; /** - * - * @var unknown + * Timeout + * @var int */ protected $_timeout = 1800; /** - * - * @var unknown + * Marqueur de vérification IP (en iponly) + * @var boolean */ protected $_checkIp = false; - public function __construct($username, $password, $iponly = false) + /** + * Marqueur de vérification de hach + * @var boolean + */ + protected $_checkHach = false; + + /** + * Liste des IPs des frontends (proxy) + * @var array + */ + protected $listProxyIp = array( + '62.210.222.34', + ); + + /** + * Authentification par WS + * @param string $username + * @param string $password + * @param string $mode + */ + public function __construct($username, $password, $mode = null) { $this->_username = $username; $this->_password = $password; - if ($iponly){ - $this->_password = 'iponly:'.$_SERVER['REMOTE_ADDR']; + + if ($mode == 'hach') { + $this->_checkHach = true; + } + + if ($mode == 'iponly'){ + $ip = $_SERVER['REMOTE_ADDR']; + if ( isset($_SERVER['HTTP_X_FORWARDED_FOR']) && in_array($ip, $this->listProxyIp)) { + $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; + } + $this->_password = 'iponly:'.$ip; + $this->_checkIp = true; } - $this->_checkIp = $iponly; } /** @@ -41,77 +70,96 @@ class Scores_Auth_Adapter_Ws implements Zend_Auth_Adapter_Interface */ public function authenticate() { - $adressIp = $_SERVER['REMOTE_ADDR']; - - require_once 'Scores/WsScores.php'; - $ws = new WsScores($this->_username, $this->_password); - $InfosLogin = $ws->getInfosLogin($this->_username, $adressIp); - $identity = new stdClass(); - $identity->username = $this->_username; - $identity->password = $this->_password; - $identity->email = $InfosLogin->result->email; - $identity->profil = $InfosLogin->result->profil; - $identity->pref = $InfosLogin->result->pref; - $identity->droits = $InfosLogin->result->droits; - $identity->droitsClients = $InfosLogin->result->droitsClients; - $identity->nom = $InfosLogin->result->nom; - $identity->prenom = $InfosLogin->result->prenom; - $identity->tel = $InfosLogin->result->tel; - $identity->fax = $InfosLogin->result->fax; - $identity->mobile = $InfosLogin->result->mobile; - $identity->id = $InfosLogin->result->id; - $identity->idClient = $InfosLogin->result->idClient; - $identity->reference = $InfosLogin->result->reference; - $identity->nbReponses = $InfosLogin->result->nbReponses; - $identity->typeScore = $InfosLogin->result->typeScore; - $identity->dateValidation = $InfosLogin->result->dateValidation; - $identity->nombreConnexions = $InfosLogin->result->nombreConnexions; - $identity->dateDerniereConnexion = $InfosLogin->result->dateDerniereConnexion; - $identity->dateDebutCompte = $InfosLogin->result->dateDebutCompte; - $identity->dateFinCompte = $InfosLogin->result->dateFinCompte; - $identity->acceptationCGU = $InfosLogin->result->acceptationCGU; - $identity->ip = $adressIp; - $identity->modeEdition = false; - - $timeout = (!empty($InfosLogin->result->timeout)) ? $InfosLogin->result->timeout : $this->_timeout; - $identity->timeout = $timeout; - - $identity->time = time() + $timeout; - - $lang = in_array($InfosLogin->result->lang, array('fr','en')) ? $InfosLogin->result->lang : 'fr'; - $identity->lang = $lang; - $identity->langtmp = $lang; - - /* - * Adresse Ip interdites - */ - $ipInterdites = - '81.252.88.0-81.252.88.7' // CTE D AGGLOMERATION DE SOPHIA - . ';' . '195.200.187.163' // PacWan - . ';' . '213.11.81.41' // Verizon France SAS - . ';' . '83.206.171.252' // FR-BASE-D-INFORMATIONS-LEGALES-BI - . ';' . '81.255.32.139' - . ';' . '212.155.191.1*' // Satair A/S - . ';' . '217.70.1*.17' // OJSC "Sibirtelecom" - . ';' . '212.37.196.156' // GENERALE-MULTIMEDIA-SUD - . ';' . '80.245.60.121' // Planete Marseille - Mailclub - . ';' . '213.246.57.101' // IKOULA - . ';' . '193.104.158.0-193.104.158.255' // Altares.fr - . ';' . '195.6.3.0-195.6.3.255' // ORT - . ';' . '217.144.112.0-217.144.116.63' // Coface - ; - if ( $this->checkPlagesIp($ipInterdites, $adressIp) ) { - return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_UNCATEGORIZED, $identity); + $ip = $_SERVER['REMOTE_ADDR']; + if ( isset($_SERVER['HTTP_X_FORWARDED_FOR']) && in_array($ip, $this->listProxyIp)) { + $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } - // Renvoi - if ( is_string($InfosLogin) || $InfosLogin->error->errnum!=0){ - $message = $InfosLogin; - return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID, $identity, array($message)); - } elseif ($this->_username == $InfosLogin->result->login) { - return new Zend_Auth_Result(Zend_Auth_Result::SUCCESS, $identity); + $ws = new Scores_Ws_Client('gestion', '0.3'); + $ws->setHttpLogin($this->_username); + $ws->setHttpPassword($this->_password); + $adressIp = $_SERVER['REMOTE_ADDR']; + $parameters = new stdClass(); + $parameters->login = $this->_username; + $parameters->ipUtilisateur = $ip; + $parameters->from = 'auth'; + $InfosLogin = $ws->getInfosLogin($parameters); + + // --- Renvoi + if ( is_string($InfosLogin) || $InfosLogin->error->errnum != 0 ) { + $message = $InfosLogin; + return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID, $identity, array($message)); + } + // --- Assignation identity + elseif ( $InfosLogin !== false && !empty($InfosLogin->result->login)) { + $identity = new stdClass(); + if ($this->_checkIp || $this->_checkHach) { + Zend_Registry::get('firebug')->info("IN"); + $identity->password = $this->_password; + } else { + $identity->password = md5($InfosLogin->result->login.'|'.$this->_password); + } + Zend_Registry::get('firebug')->info($identity->password); + $identity->username = $InfosLogin->result->login; + $identity->email = $InfosLogin->result->email; + $identity->profil = $InfosLogin->result->profil; + $identity->pref = $InfosLogin->result->pref; + $identity->droits = $InfosLogin->result->droits; + $identity->droitsClients = $InfosLogin->result->droitsClients; + $identity->nom = $InfosLogin->result->nom; + $identity->prenom = $InfosLogin->result->prenom; + $identity->tel = $InfosLogin->result->tel; + $identity->fax = $InfosLogin->result->fax; + $identity->mobile = $InfosLogin->result->mobile; + $identity->id = $InfosLogin->result->id; + $identity->idClient = $InfosLogin->result->idClient; + $identity->reference = $InfosLogin->result->reference; + $identity->nbReponses = $InfosLogin->result->nbReponses; + $identity->typeScore = $InfosLogin->result->typeScore; + $identity->dateValidation = $InfosLogin->result->dateValidation; + $identity->nombreConnexions = $InfosLogin->result->nombreConnexions; + $identity->dateDerniereConnexion = $InfosLogin->result->dateDerniereConnexion; + $identity->dateDebutCompte = $InfosLogin->result->dateDebutCompte; + $identity->dateFinCompte = $InfosLogin->result->dateFinCompte; + $identity->acceptationCGU = $InfosLogin->result->acceptationCGU; + $identity->ip = $ip; + $identity->version = $InfosLogin->result->version; + $identity->modeEdition = false; + + $timeout = (!empty($InfosLogin->result->timeout)) ? $InfosLogin->result->timeout : $this->_timeout; + $identity->timeout = $timeout; + $identity->time = time() + $timeout; + $lang = in_array($InfosLogin->result->lang, array('fr','en')) ? $InfosLogin->result->lang : 'fr'; + $identity->lang = $lang; + $identity->langtmp = $lang; + + // --- Adresse Ip interdites + $ipInterdites = + '81.252.88.0-81.252.88.7' // CTE D AGGLOMERATION DE SOPHIA + . ';' . '195.200.187.163' // PacWan + . ';' . '213.11.81.41' // Verizon France SAS + . ';' . '83.206.171.252' // FR-BASE-D-INFORMATIONS-LEGALES-BI + . ';' . '81.255.32.139' + . ';' . '212.155.191.1*' // Satair A/S + . ';' . '217.70.1*.17' // OJSC "Sibirtelecom" + . ';' . '212.37.196.156' // GENERALE-MULTIMEDIA-SUD + . ';' . '80.245.60.121' // Planete Marseille - Mailclub + . ';' . '213.246.57.101' // IKOULA + . ';' . '193.104.158.0-193.104.158.255' // Altares.fr + . ';' . '195.6.3.0-195.6.3.255' // ORT + . ';' . '217.144.112.0-217.144.116.63' // Coface + ; + if ( $this->checkPlagesIp($ipInterdites, $adressIp) ) { + return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_UNCATEGORIZED, $identity); + } + + // --- OK connecté + $this->_username = $identity->username; + $this->_password = $identity->password; + return new Zend_Auth_Result(Zend_Auth_Result::SUCCESS, $identity); + } else { - return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_UNCATEGORIZED, $identity); + return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_UNCATEGORIZED, $identity, array("Identification impossible")); } } diff --git a/library/Scores/Ws/Server.php b/library/Scores/Ws/Server.php index b62d2229..4e1c221c 100644 --- a/library/Scores/Ws/Server.php +++ b/library/Scores/Ws/Server.php @@ -55,12 +55,6 @@ class Scores_Ws_Server */ public $serviceVersion = null; - /** - * Activer le marqueur lorsqu'une action implémente des méthodes publiques afin de ne par logguer les appels - * @var boolean - */ - protected $serviceActionSubcall = false; - /** * List all application IPs * @var array @@ -618,7 +612,7 @@ class Scores_Ws_Server $output = false; $droits = $this->User->droits; if ( is_array($droits) ) { - if ( in_array($perm, $droits) ){ + if ( in_array(strtolower($perm), $droits) ){ $output = true; } } else { @@ -695,7 +689,7 @@ class Scores_Ws_Server $resultId = $userM->fetchAll($sql); } catch (Zend_Db_Exception $e) { $c = Zend_Registry::get('config'); - file_put_contents($c->profil->path->data.'/log/application.log', + file_put_contents($c->profil->path->shared.'/log/application.log', date('Y-m-d H:i:s').'- AUTH : '.$e->getMessage()."\n", FILE_APPEND); return '0000'; } diff --git a/library/SdMetier/Rnvp/Adresse.php b/library/SdMetier/Rnvp/Adresse.php index fd7cef2e..5fec7d45 100644 --- a/library/SdMetier/Rnvp/Adresse.php +++ b/library/SdMetier/Rnvp/Adresse.php @@ -60,7 +60,7 @@ class SdMetier_Rnvp_Adresse { try { $etabM = new Application_Model_JoEtablissements(); - $sql = $etabM->select(true)->columns(array('LPAD(source,3,0)', 'LPAD(source_id,20,0)')) + $sql = $etabM->select(true)->columns(array('LPAD(source,3,0) AS source', 'LPAD(source_id,20,0) AS sourceId')) ->where('siren=?', substr($companyId,0,9)) ->where('nic=?', substr($companyId,9,5)); $etabResult = $etabM->fetchRow($sql); diff --git a/library/framework/fwk.php b/library/framework/fwk.php index 0bed58a2..1c59aa5c 100644 --- a/library/framework/fwk.php +++ b/library/framework/fwk.php @@ -1,210 +1,206 @@ 0) define('MODE_EXEC', MODE_CLI); - else define('MODE_EXEC', MODE_WS); -/** @todo Gérer la distinction du mode WWW du WS - else define('MODE_EXEC', MODE_WWW); +if (@$_SERVER['argc']>0) define('MODE_EXEC', MODE_CLI); +else define('MODE_EXEC', MODE_WS); + +/** TimeStamp Unix + ** Si $onlyMiliSec=true, retourne juste les milisec du timestamp + **/ +function microtime_float($onlyMiliSec=false) { + list($usec, $sec) = explode(' ', microtime()); + if (!$onlyMiliSec) + return ((float)$usec + (float)$sec); + else + return $usec; +} + +/** Fait une pause aléatoire entre 0 et 15 secondes par défaut + **/ +function randsleep($min_sec=0, $max_sec=15) { + sleep(rand($min_sec, $max_sec)); +} + +/** Retourne la factorielle d'un nombre : 4! = 1*2*3*4 = 24 + **/ +function factorielle($nbr) { + if($nbr === 0) // condition d'arret + return 1; + else + return $nbr*factorielle($nbr-1); +} + +/** Vérification que la variable demandé respecte bien les règles passées en paramètres + * @param mixed Variable à tester + * @param int Longueur minimum en caractère de la variable + * @param int Longueur mximum + * @param char(1) Type de variable A:Alphanumérique / N:Numérique + * @param mixed Message textuel d'erreur à afficher en cas d'erreur ou false + * @return mixed true, false ou Message d'erreur passé en paramètre */ +function valideData($variable, $taille_min, $taille_max, $type_variable, $erreur=false) { + if ( strlen((string)$variable) < $taille_min ) + return $erreur; - /** TimeStamp Unix - ** Si $onlyMiliSec=true, retourne juste les milisec du timestamp - **/ - function microtime_float($onlyMiliSec=false) { - list($usec, $sec) = explode(' ', microtime()); - if (!$onlyMiliSec) - return ((float)$usec + (float)$sec); - else - return $usec; - } + if ( strlen((string)$variable) > $taille_max ) + return $erreur; - /** Fait une pause aléatoire entre 0 et 15 secondes par défaut - **/ - function randsleep($min_sec=0, $max_sec=15) { - sleep(rand($min_sec, $max_sec)); - } - - /** Retourne la factorielle d'un nombre : 4! = 1*2*3*4 = 24 - **/ - function factorielle($nbr) { - if($nbr === 0) // condition d'arret - return 1; - else - return $nbr*factorielle($nbr-1); - } - - /** Vérification que la variable demandé respecte bien les règles passées en paramètres - * @param mixed Variable à tester - * @param int Longueur minimum en caractère de la variable - * @param int Longueur mximum - * @param char(1) Type de variable A:Alphanumérique / N:Numérique - * @param mixed Message textuel d'erreur à afficher en cas d'erreur ou false - * @return mixed true, false ou Message d'erreur passé en paramètre - */ - function valideData($variable, $taille_min, $taille_max, $type_variable, $erreur=false) { - if ( strlen((string)$variable) < $taille_min ) - return $erreur; - - if ( strlen((string)$variable) > $taille_max ) - return $erreur; - - if ( $type_variable == 'A' ) - if ( is_string($variable) == true ) - return true; - else - return $erreur; - - elseif ( $type_variable == 'N') - { - for ($i=0; $i < strlen((string)$variable); $i++) - { - $car = substr((string)$variable,$i,1); - if ($car<'0' || $car>'9') - return $erreur; - } - return true; - } - - return $erreur; - } - - function adapteOCtets($size) { - $kb = 1024; // Kilobyte - $mb = 1024 * $kb; // Megabyte - $gb = 1024 * $mb; // Gigabyte - $tb = 1024 * $gb; // Terabyte - if($size==0) return '0'; - else if($size < $kb) return $size.'o'; - else if($size < $mb) return round($size/$kb,2).'ko'; - else if($size < $gb) return round($size/$mb,2).'Mo'; - else if($size < $tb) return round($size/$gb,2).'Go'; - else return round($size/$tb,2).'To'; - } - - /** - ** Enregistrer une information dans la log - ** - ** @param string $debugLevel E=Error, W=Warning, N=Notice, I=Info, D=Debug - ** @param string $message Message d'erreur à inscrire dans la log - ** @param integer $line __LINE__ - ** @param string $file __FILE__ - ** @param string $function __FUNCTION__ - ** @param string $class __CLASS___ - **/ - function debugLog($debugLevel, $message, $line, $file, $function, $class) { - if (!file_exists(LOG_PATH.'/debug.log')) { - $fp=@fopen(LOG_PATH.'/debug.log', 'a'); - @fwrite($fp, 'Date/Heure;Niveau;Script;Login;Password;Adresse IP;Action SOAP;Ligne;Fichier;Fonction;Classe;Domaine;POST DATA;Memory;Message'.EOL); - } else - $fp=@fopen(LOG_PATH.'/debug.log', 'a'); - @fwrite($fp, date('Y/m/d-H:i:s') .';'. $debugLevel .';'. $_SERVER['PHP_SELF'] .';'. $_SERVER['PHP_AUTH_USER'] .';'. $_SERVER['PHP_AUTH_PW'] .';'. - $_SERVER['REMOTE_ADDR'] .';'. $_SERVER['HTTP_SOAPACTION'] .';'.$line.';'. $file.';'. $function.';'. $class .';'. - @gethostbyaddr($_SERVER['REMOTE_ADDR']) .';'. $HTTP_RAW_POST_DATA .';'. @memory_get_usage().';'. $message . EOL); - @fclose($fp); - if ($debugLevel=='E'){ - if (!file_exists(LOG_PATH.'/debugError.log')) { - $fp=@fopen(LOG_PATH.'/debugError.log', 'a'); - @fwrite($fp, 'Date/Heure;Niveau;Script;Login;Password;Adresse IP;Action SOAP;Ligne;Fichier;Fonction;Classe;Domaine;POST DATA;Message'.EOL); - } else - $fp=fopen(LOG_PATH.'/debugError.log', 'a'); - @fwrite($fp, date('Y/m/d-H:i:s') .';'. $debugLevel .';'. $_SERVER['PHP_SELF'] .';'. $_SERVER['PHP_AUTH_USER'] .';'. $_SERVER['PHP_AUTH_PW'] .';'. - $_SERVER['REMOTE_ADDR'] .';'. $_SERVER['HTTP_SOAPACTION'] .';'.$line.';'. $file.';'. $function.';'. $class .';'. - @gethostbyaddr($_SERVER['REMOTE_ADDR']) .';'. $HTTP_RAW_POST_DATA .';'. @memory_get_usage().';'. $message . EOL); - @fclose($fp); - //die($message); - } - } - - function prepareString($str) { - $tabReplace = array( - 'œ' => "oe", - ''.chr(160) => '', - ); - - $str = utf8_decode($str); - $str = strtr($str,$tabReplace); - return utf8_encode($str); - } - - - /** - ** Déplacement d'un fichier. Retourne false en cas d'erreur. - ** - ** @param string $from - ** @param string $to - ** @return bool - **/ - function move($from, $to) { - return (copy($from, $to) and unlink($from)); - } - - /** Converti une IP en nombre - ** - ** @param string $ip Adresse IP - ** @return integer - **/ - function getIpNumber($ip) { - $tab=explode('.', $ip); - return (($tab[0]*256*256*256) + ($tab[1]*256*256) + ($tab[2]*256) + ($tab[3])); - } - - /** Vérifie si une IP est dans une plage du type 192.168.3.1-192.168.3.10 - ** - ** @param string $plage_1 Plage IP de début - ** @param string $plage_2 Plage IP de fin - ** @param string $ip Adresse IP à tester - ** @return boolean - **/ - function in_plage($plage_1,$plage_2,$ip){ - $ip2=getIpNumber($ip); - if ($ip2>=getIpNumber($plage_1) && $ip2<=getIpNumber($plage_2)) + if ( $type_variable == 'A' ) + if ( is_string($variable) == true ) return true; else - return false; - } + return $erreur; - /** Controle si une adresse IP est dans une liste des IP communiquées sous la forme 192.168.3.5-192.68.3.10;192.168.3.*;192.168.3.10 - ** - ** @param string $strPlageIP La plage d'adresses IP - ** @param string $adresseIP L'adresse IP à tester - ** @return boolean - **/ - function checkPlagesIp($strPlageIP, $adresseIP) { - $connected=false; - $tabIpAllowed=explode(';', trim($strPlageIP)); - if (count($tabIpAllowed)==1 && $tabIpAllowed[0]=='') - $tabIpAllowed=array(); - - foreach ($tabIpAllowed as $ip) { - $tabPlages=explode('-', $ip); - // C'est une plage d'adresse '-' - if (isset($tabPlages[1])) - $connected=in_plage($tabPlages[0],$tabPlages[1],$adresseIP); - else { - // C'est une adresse avec ou sans masque '*' - if (preg_match('/^'.str_replace('*','.*',str_replace('.','\.',$ip)).'$/', $adresseIP) ) - $connected=true; - } - if ($connected) break; - } - if (count($tabIpAllowed)==0) return false; - elseif (!$connected) { - return false; + elseif ( $type_variable == 'N') + { + for ($i=0; $i < strlen((string)$variable); $i++) + { + $car = substr((string)$variable,$i,1); + if ($car<'0' || $car>'9') + return $erreur; } return true; } + return $erreur; +} + +function adapteOCtets($size) { + $kb = 1024; // Kilobyte + $mb = 1024 * $kb; // Megabyte + $gb = 1024 * $mb; // Gigabyte + $tb = 1024 * $gb; // Terabyte + if($size==0) return '0'; + else if($size < $kb) return $size.'o'; + else if($size < $mb) return round($size/$kb,2).'ko'; + else if($size < $gb) return round($size/$mb,2).'Mo'; + else if($size < $tb) return round($size/$gb,2).'Go'; + else return round($size/$tb,2).'To'; +} + +/** + ** Enregistrer une information dans la log + ** + ** @param string $debugLevel E=Error, W=Warning, N=Notice, I=Info, D=Debug + ** @param string $message Message d'erreur à inscrire dans la log + ** @param integer $line __LINE__ + ** @param string $file __FILE__ + ** @param string $function __FUNCTION__ + ** @param string $class __CLASS___ + **/ +function debugLog($debugLevel, $message, $line, $file, $function, $class) { + if (!file_exists(LOG_PATH.'/debug.log')) { + $fp=@fopen(LOG_PATH.'/debug.log', 'a'); + @fwrite($fp, 'Date/Heure;Niveau;Script;Login;Password;Adresse IP;Action SOAP;Ligne;Fichier;Fonction;Classe;Domaine;POST DATA;Memory;Message'.EOL); + } else + $fp=@fopen(LOG_PATH.'/debug.log', 'a'); + @fwrite($fp, date('Y/m/d-H:i:s') .';'. $debugLevel .';'. $_SERVER['PHP_SELF'] .';'. $_SERVER['PHP_AUTH_USER'] .';'. $_SERVER['PHP_AUTH_PW'] .';'. + $_SERVER['REMOTE_ADDR'] .';'. $_SERVER['HTTP_SOAPACTION'] .';'.$line.';'. $file.';'. $function.';'. $class .';'. + @gethostbyaddr($_SERVER['REMOTE_ADDR']) .';'. $HTTP_RAW_POST_DATA .';'. @memory_get_usage().';'. $message . EOL); + @fclose($fp); + if ($debugLevel=='E'){ + if (!file_exists(LOG_PATH.'/debugError.log')) { + $fp=@fopen(LOG_PATH.'/debugError.log', 'a'); + @fwrite($fp, 'Date/Heure;Niveau;Script;Login;Password;Adresse IP;Action SOAP;Ligne;Fichier;Fonction;Classe;Domaine;POST DATA;Message'.EOL); + } else + $fp=fopen(LOG_PATH.'/debugError.log', 'a'); + @fwrite($fp, date('Y/m/d-H:i:s') .';'. $debugLevel .';'. $_SERVER['PHP_SELF'] .';'. $_SERVER['PHP_AUTH_USER'] .';'. $_SERVER['PHP_AUTH_PW'] .';'. + $_SERVER['REMOTE_ADDR'] .';'. $_SERVER['HTTP_SOAPACTION'] .';'.$line.';'. $file.';'. $function.';'. $class .';'. + @gethostbyaddr($_SERVER['REMOTE_ADDR']) .';'. $HTTP_RAW_POST_DATA .';'. @memory_get_usage().';'. $message . EOL); + @fclose($fp); + //die($message); + } +} + +function prepareString($str) { + $tabReplace = array( + 'œ' => "oe", + ''.chr(160) => '', + ); + + $str = utf8_decode($str); + $str = strtr($str,$tabReplace); + return utf8_encode($str); +} + + +/** + ** Déplacement d'un fichier. Retourne false en cas d'erreur. + ** + ** @param string $from + ** @param string $to + ** @return bool + **/ +function move($from, $to) { + return (copy($from, $to) and unlink($from)); +} + +/** Converti une IP en nombre + ** + ** @param string $ip Adresse IP + ** @return integer + **/ +function getIpNumber($ip) { + $tab=explode('.', $ip); + return (($tab[0]*256*256*256) + ($tab[1]*256*256) + ($tab[2]*256) + ($tab[3])); +} + +/** Vérifie si une IP est dans une plage du type 192.168.3.1-192.168.3.10 + ** + ** @param string $plage_1 Plage IP de début + ** @param string $plage_2 Plage IP de fin + ** @param string $ip Adresse IP à tester + ** @return boolean + **/ +function in_plage($plage_1,$plage_2,$ip){ + $ip2=getIpNumber($ip); + if ($ip2>=getIpNumber($plage_1) && $ip2<=getIpNumber($plage_2)) + return true; + else + return false; +} + +/** Controle si une adresse IP est dans une liste des IP communiquées sous la forme 192.168.3.5-192.68.3.10;192.168.3.*;192.168.3.10 + ** + ** @param string $strPlageIP La plage d'adresses IP + ** @param string $adresseIP L'adresse IP à tester + ** @return boolean + **/ +function checkPlagesIp($strPlageIP, $adresseIP) { + $connected=false; + $tabIpAllowed=explode(';', trim($strPlageIP)); + if (count($tabIpAllowed)==1 && $tabIpAllowed[0]=='') + $tabIpAllowed=array(); + + foreach ($tabIpAllowed as $ip) { + $tabPlages=explode('-', $ip); + // C'est une plage d'adresse '-' + if (isset($tabPlages[1])) + $connected=in_plage($tabPlages[0],$tabPlages[1],$adresseIP); + else { + // C'est une adresse avec ou sans masque '*' + if (preg_match('/^'.str_replace('*','.*',str_replace('.','\.',$ip)).'$/', $adresseIP) ) + $connected=true; + } + if ($connected) break; + } + if (count($tabIpAllowed)==0) return false; + elseif (!$connected) { + return false; + } + return true; +} /** * @return bool