/** * Tester si les données transmises permettent d'authentifier un partenaire (convention ENT serveur Sésamath). * * @param int $partenaire_id * @param string $password * @return array(string,array) ('ok',$DB_ROW) ou (message_d_erreur,tableau_vide) */ public static function tester_authentification_partenaire($partenaire_id, $password) { // Récupérer les données associées à ce partenaire. $DB_ROW = DB_WEBMESTRE_PUBLIC::DB_recuperer_donnees_partenaire($partenaire_id); // Si id non trouvé... if (empty($DB_ROW)) { return array('Partenaire introuvable !', array()); } // Si mdp incorrect... if ($DB_ROW['partenaire_password'] != crypter_mdp($password)) { global $PAGE; return array('Mot de passe incorrect ! Nouvelle tentative autorisée dans ' . $_SESSION['FORCEBRUTE'][$PAGE]['DELAI'] . 's.', array()); } // Enregistrement d'un cookie sur le poste client servant à retenir le partenariat sélectionné si identification avec succès Cookie::definir(COOKIE_PARTENAIRE, $DB_ROW['partenaire_id'], 31536000); // Si on arrive ici c'est que l'identification s'est bien effectuée ! return array('ok', $DB_ROW); }
if (!defined('SACoche')) { exit('Ce fichier ne peut être appelé directement !'); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // En cas de multi-structures, il faut savoir dans quelle base récupérer les informations. // Cette page est appelée par SACoche et dans ce cas c'est "base" qui est transmis. // //////////////////////////////////////////////////////////////////////////////////////////////////// $BASE = 0; if (HEBERGEUR_INSTALLATION == 'multi-structures') { // Lecture d'un cookie sur le poste client servant à retenir le dernier établissement sélectionné si identification avec succès $BASE = isset($_COOKIE[COOKIE_STRUCTURE]) ? Clean::entier($_COOKIE[COOKIE_STRUCTURE]) : 0; // Test si id d'établissement transmis dans l'URL ; historiquement "id" si connexion normale et "base" si connexion SSO $BASE = isset($_GET['id']) ? Clean::entier($_GET['id']) : $BASE; $BASE = isset($_GET['base']) ? Clean::entier($_GET['base']) : $BASE; // Test si UAI d'établissement transmis dans l'URL $BASE = isset($_GET['uai']) ? DB_WEBMESTRE_PUBLIC::DB_recuperer_structure_id_base_for_UAI(Clean::uai($_GET['uai'])) : $BASE; if (!$BASE) { if (isset($_GET['uai'])) { exit_error('Paramètre incorrect', 'Le numéro UAI transmis n\'est pas référencé sur cette installation de SACoche : vérifiez son exactitude et si cet établissement est bien inscrit sur ce serveur.'); } else { exit_error('Donnée manquante', 'Référence de base manquante (le paramètre "base" ou "id" n\'a pas été transmis en GET ou n\'est pas un entier et n\'a pas non plus été trouvé dans un Cookie).'); } } charger_parametres_mysql_supplementaires($BASE); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Connexion à la base pour charger les paramètres du SSO demandé // //////////////////////////////////////////////////////////////////////////////////////////////////// // Mettre à jour la base si nécessaire maj_base_structure_si_besoin($BASE); $DB_TAB = DB_STRUCTURE_PUBLIC::DB_lister_parametres('"connexion_mode","cas_serveur_host","cas_serveur_port","cas_serveur_root","cas_serveur_url_login","cas_serveur_url_logout","cas_serveur_url_validate","gepi_url","gepi_rne","gepi_certificat_empreinte"');
{ // Cas d'une convention signée par un partenaire ENT => Mettre en session l'affichage de sa communication en page d'accueil. $partenaire_id = DB_WEBMESTRE_PUBLIC::DB_recuperer_id_partenaire_for_connecteur($connexion_ref); $fichier_chemin = 'info_'.$partenaire_id.'.php'; if( $partenaire_id && is_file(CHEMIN_DOSSIER_PARTENARIAT.$fichier_chemin) ) { require(CHEMIN_DOSSIER_PARTENARIAT.$fichier_chemin); $partenaire_logo_url = ($partenaire_logo_actuel_filename) ? URL_DIR_PARTENARIAT.$partenaire_logo_actuel_filename : URL_DIR_IMG.'auto.gif' ; $partenaire_lien_ouvrant = ($partenaire_adresse_web) ? '<a href="'.html($partenaire_adresse_web).'" target="_blank">' : '' ; $partenaire_lien_fermant = ($partenaire_adresse_web) ? '</a>' : '' ; $_SESSION['CONVENTION_PARTENAIRE_ENT_COMMUNICATION'] = $partenaire_lien_ouvrant.'<span id="partenaire_logo"><img src="'.html($partenaire_logo_url).'" /></span><span id="partenaire_message">'.nl2br(html($partenaire_message)).'</span>'.$partenaire_lien_fermant.'<hr id="partenaire_hr" />'; } } else { if(!DB_WEBMESTRE_PUBLIC::DB_tester_convention_active( $BASE , $connexion_nom )) { $message_introduction = ( isset($tab_connecteurs_convention[$connexion_ref]) && !$tab_ent_convention_infos[$tab_connecteurs_convention[$connexion_ref]]['actif'] ) ? $tab_ent_convention_infos[$tab_connecteurs_convention[$connexion_ref]]['texte'].'<br />L\'usage de ce service sur ce serveur est donc désormais soumis à la signature et au règlement d\'une convention avec l\'établissement.' : 'L\'usage de ce service sur ce serveur est soumis à la signature et au règlement d\'une convention.' ; $message_explication = '<br />Un administrateur doit effectuer les démarches depuis son menu [Paramétrage établissement] [Mode d\'identification].<br />Veuillez consulter <a href="'.SERVEUR_GUIDE_ENT.'#toggle_partenariats" target="_blank">cette documentation pour davantage d\'explications</a> et <a href="'.SERVEUR_GUIDE_ENT.'#toggle_gestion_convention" target="_blank">cette documentation pour la marche à suivre</a>.' ; exit_error( 'Absence de convention valide' /*titre*/ , $message_introduction.$message_explication /*contenu*/ ); } } } // Connecter l'utilisateur SessionUser::initialiser_utilisateur($BASE,$auth_DB_ROW); // Pas de redirection (passage possible d'infos en POST à conserver), on peut laisser le code se poursuivre. return; // Ne pas exécuter la suite de ce fichier inclus. } // //////////////////////////////////////////////////////////////////////////////////////////////////// // Authentification assurée par Shibboleth
/** * verifier_taille_requetes * * @param int $fichier_taille_maximale * @return bool */ function verifier_taille_requetes($fichier_taille_maximale) { $DB_ROW = defined('SACOCHE_STRUCTURE_BD_NAME') ? DB_STRUCTURE_COMMUN::DB_recuperer_variable_MySQL('max_allowed_packet') : DB_WEBMESTRE_PUBLIC::DB_recuperer_variable_MySQL('max_allowed_packet'); return $fichier_taille_maximale < $DB_ROW['Value'] ? TRUE : FALSE; }
$TITRE = "Identifiants perdus"; // Pas de traduction car pas de choix de langue à ce niveau. // Récupération du profil $PROFIL = isset($_GET['profil']) ? Clean::texte($_GET['profil']) : ''; if (!in_array($PROFIL, array('structure', 'webmestre', 'partenaire'))) { exit_error('Information manquante', 'Profil incorrect ou non transmis dans l\'adresse.'); } // Récupération du numéro de base $BASE = isset($_GET['base']) ? Clean::entier($_GET['base']) : 0; if ($PROFIL == 'structure' && HEBERGEUR_INSTALLATION == 'multi-structures' && !$BASE) { exit_error('Information manquante', 'Numéro de base incorrect ou non transmis dans l\'adresse.'); } // Récupérer la dénomination de l'établissement if ($PROFIL == 'structure') { if (HEBERGEUR_INSTALLATION == 'multi-structures') { $structure_denomination = DB_WEBMESTRE_PUBLIC::DB_recuperer_structure_nom_for_Id($BASE); if ($structure_denomination === NULL) { exit_error('Établissement manquant', 'Établissement non trouvé dans la base d\'administration !'); } } else { $DB_TAB = DB_STRUCTURE_PUBLIC::DB_lister_parametres('"webmestre_denomination"'); if (!empty($DB_TAB)) { $structure_denomination = $DB_TAB[0]['parametre_valeur']; } else { exit_error('Base incomplète', 'Base de l\'établissement incomplète ou non encore installée !'); } } } // Protection contre les attaques par force brute des robots (piratage compte ou envoi intempestif de courriels) list($html_imgs, $captcha_soluce) = captcha(); $_SESSION['FORCEBRUTE'][$PAGE] = array('TIME' => $_SERVER['REQUEST_TIME'], 'DELAI' => 5, 'CAPTCHA' => $captcha_soluce);
/** * group_concat_max_len * La taille maximale de la chaîne résultat de GROUP_CONCAT(). * Voir http://dev.mysql.com/doc/refman/5.0/fr/server-system-variables.html * Pour lever cette limitation on peut effectuer la pré-requête DB::query(SACOCHE_STRUCTURE_BD_NAME , 'SET group_concat_max_len = ...'); * * @param void * @return string */ private static function group_concat_max_len() { $DB_ROW = defined('SACOCHE_STRUCTURE_BD_NAME') ? DB_STRUCTURE_COMMUN::DB_recuperer_variable_MySQL('group_concat_max_len') : DB_WEBMESTRE_PUBLIC::DB_recuperer_variable_MySQL('group_concat_max_len') ; $val = $DB_ROW['Value']; return InfoServeur::cellule_centree( number_format($val,0,'',' ') ); }
// Affichage du retour $affichage .= '<p><label class="valide">Les tables de la base de données ont été installées.</label></p>'.NL; $affichage .= '<span class="astuce">Le premier compte administrateur a été créé avec votre identité :</span>'.NL; $affichage .= '<ul class="puce">'; $affichage .= '<li>nom d\'utilisateur " admin "</li>'; $affichage .= '<li>mot de passe " '.$password.' "</li>'; $affichage .= '</ul>'.NL; $affichage .= '<label class="alerte">Notez ces identifiants avant de poursuivre !</label>'.NL; $affichage .= '<hr />'.NL; $affichage .= '<h2>Installation logicielle terminée</h2>'.NL; $affichage .= '<p>Se connecter avec le compte webmestre : <a href="'.URL_DIR_SACOCHE.'?webmestre">'.URL_DIR_SACOCHE.'?webmestre</a></p>'.NL; $affichage .= '<p>Se connecter avec le compte administrateur : <a href="'.URL_DIR_SACOCHE.'">'.URL_INSTALL_SACOCHE.'</a></p>'.NL; } elseif(HEBERGEUR_INSTALLATION=='multi-structures') { DB_WEBMESTRE_PUBLIC::DB_creer_remplir_tables_webmestre(); $affichage .= '<p><label class="valide">Les tables de la base de données du webmestre ont été installées.</label></p>'.NL; $affichage .= '<hr />'.NL; $affichage .= '<h2>Installation logicielle terminée</h2>'.NL; $affichage .= '<p>Se connecter avec le compte webmestre pour gérer les structures hébergées : <a href="'.URL_DIR_SACOCHE.'?webmestre">'.URL_DIR_SACOCHE.'?webmestre</a></p>'.NL; } } echo $affichage; exit(); } // //////////////////////////////////////////////////////////////////////////////////////////////////// // On ne devrait pas en arriver là ! // //////////////////////////////////////////////////////////////////////////////////////////////////// echo'Erreur avec les données transmises !';
/** * group_concat_max_len * La taille maximale de la chaîne résultat de GROUP_CONCAT(). * Voir http://dev.mysql.com/doc/refman/5.0/fr/server-system-variables.html * Pour lever cette limitation on peut effectuer la pré-requête DB::query(SACOCHE_STRUCTURE_BD_NAME , 'SET group_concat_max_len = ...'); * * @param void * @return string */ function group_concat_max_len() { $DB_ROW = defined('SACOCHE_STRUCTURE_BD_NAME') ? DB_STRUCTURE_COMMUN::DB_recuperer_variable_MySQL('group_concat_max_len') : DB_WEBMESTRE_PUBLIC::DB_recuperer_variable_MySQL('group_concat_max_len') ; $val = $DB_ROW['Value']; return number_format($val,0,'',' '); }
'DELAI' => 3, // en secondes, est ensuite incrémenté en cas d'erreur ); ?> <h1 class="identification"><?php echo $h1_identification ?><?php echo $liens_autres_profils ?></h1> <form id="form_auth" action="#" method="post"> <fieldset id="fieldset_auth"> <input id="f_base" name="f_base" type="hidden" value="<?php echo $BASE ?>" /> <input id="f_profil" name="f_profil" type="hidden" value="<?php echo $profil ?>" /> <label id="ajax_msg" class="loader">Chargement en cours...</label> </fieldset> </form> <hr /> <h1 class="hebergement">Hébergement</h1> <ul class="puce"> <li><em>SACoche</em> peut être téléchargé et installé sur différents serveurs.</li> <li>Cette installation (<?php echo (HEBERGEUR_INSTALLATION=='mono-structure') ? HEBERGEUR_INSTALLATION : DB_WEBMESTRE_PUBLIC::DB_compter_structure() ; ?>) a été effectuée par : <?php echo (HEBERGEUR_ADRESSE_SITE) ? '<a target="_blank" href="'.html(HEBERGEUR_ADRESSE_SITE).'">'.html(HEBERGEUR_DENOMINATION).'</a>' : html(HEBERGEUR_DENOMINATION); ?> (<?php echo HtmlMail::to(WEBMESTRE_COURRIEL,'SACoche - Remplacer ce texte par l\'objet de votre message !!!','webmestre','Attention ! Si vous êtes élève, parent, professeur ou directeur, alors il ne faut pas contacter le webmestre du serveur, mais l\'administrateur de votre établissement qui a créé les comptes utilisateurs.'); ?>).</li> <li><a target="_blank" href="<?php echo SERVEUR_CNIL ?>">Informations CNIL</a>. Déclaration <?php echo intval(CNIL_NUMERO) ? 'n°'.CNIL_NUMERO : 'non renseignée' ; ?>.</li> </ul> <hr /> <h1 class="informations">Informations</h1> <ul class="puce"> <li><em>SACoche</em> est un logiciel <span class="b">gratuit</span>, <span class="b">libre</span>, développé avec le soutien de <a target="_blank" href="<?php echo SERVEUR_ASSO ?>"><em>Sésamath</em></a>.</li> <li class="b">Consulter <a href="<?php echo SERVEUR_PROJET ?>" target="_blank">le site officiel du projet <em>SACoche</em></a> pour tout renseignement.</li> <li>Version installée <em><?php echo VERSION_PROG ?></em>.<label id="ajax_version"></label></li> </ul>