<?php
//-----------------------------------------------------------------------------------------------------------
// E-Lyco CAS Connector
//-----------------------------------------------------------------------------------------------------------
// Copyright (c) 2011 SIREC Pays de la Loire
//-----------------------------------------------------------------------------------------------------------
// This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
// To view a copy of this license, visit http://c...content-available-to-author-only...s.org/licenses/by-nc-sa/3.0/ or send a letter to
// Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
//-----------------------------------------------------------------------------------------------------------
// Authors: Alexandre GAUVRIT - gauvrit.alexandre@gmail.com
//-----------------------------------------------------------------------------------------------------------
// Description : index.php - login page/redirection to CAS service
// Version : 0.2
require('../..//main/inc/global.inc.php');
require_once (api_get_path(LIBRARY_PATH).'events.lib.inc.php');
require_once('../..//main/auth/cas/authcas.php');
global $cas_auth_ver, $cas_auth_server, $cas_auth_port, $cas_auth_uri;
$debug = false;
phpCAS::client($cas_auth_ver,$cas_auth_server,$cas_auth_port,$cas_auth_uri);
phpCAS::setNoCasServerValidation();
if (!empty($_SESSION['_user']['user_id'])) { // Connecte sur Dokeos
$id_user_dokeos = trim($_SESSION['_user']['user_id']); // L'utilisateur existe-t-il dans la table de correspondance ?
$result = mysql_query("SELECT id_user_cas FROM user_ent_corresp where id_user_dokeos ='$id_user_dokeos'") or
die(mysql_error()); // Extraction de l'id CAS de la base
if(!empty($row['id_user_cas'])) { // La requete a retourné un resultat > l'utilisateur existe dans la table.
$id_user_cas = $row['id_user_cas'];
}
else
{ // L'utilisateur n'existe pas >> est-il connecté a CAS ?
if(phpCAS::checkAuthentication()){
$id_user_cas = trim(phpCAS
::getUser()); // Connecté a Dokeos + CAS -> Insertion possible }else
{
phpCAS::forceAuthentication(); // Redirection sur le CAS pour connexion
}
}
{
// Test si l'insertion est possible/nécéssaire -> Insertion d'une correspondance
if(!insert_corresp($id_user_dokeos,$id_user_cas))
{ // Insertion réussie / déjà connecté
Display::display_header('', 'dokeos');
echo "<div id=\"wrapper\">Vous etes maintenant connecte : <a href=\"../../index.php\">Retour acceuil</a></div>";
echo '<div><p>Deconnexion : <a href="https://'.$cas_auth_server.'/logout">Deconnexion CAS</a>'; // Deconnexion possible (CAS+Dokeos) << fonction a pondre
}
else
{
Display::display_header('', 'dokeos');
echo "<div id=\"wrapper\">Vous etes maintenant connecte : <a href=\"../../index.php\">Retour acceuil</a></div>";
echo '<div><p>Deconnexion : <a href="https://'.$cas_auth_server.'/logout">Deconnexion CAS</a>';
}
}
}
else
{ // N'est pas connecté sur Dokeos
if(phpCAS::checkAuthentication()) // Test - est-il connecté a CAS ?
{ // Pas connecté a Dokeos + Connecté a CAS
$id_user_cas = trim(phpCAS
::getUser()); // Récupération de l'id sso sur le serveur CAS
$result = mysql_query("SELECT id_user_dokeos FROM user_ent_corresp where id_user_cas ='$id_user_cas'") or
die(mysql_error()); // On cherche un enregistrement concernant cet id CAS dans la table de correspondance $id_user_dokeos = $row['id_user_dokeos'];
if(!empty($id_user_dokeos)) {
echo "cette blague..."; // On a trouvé une correspondance dans la table
$user_table = Database::get_main_table(TABLE_MAIN_USER);
$sql = "SELECT user_id, username, password, auth_source, active, expiration_date FROM $user_table WHERE user_id = '".$id_user_dokeos."'";
$result = Database::query($sql,__FILE__,__LINE__);
if (Database::num_rows($result) > 0) // Recherche de l'utilisateur dans la table user de Dokeos
{
$uData = Database::fetch_array($result);
$_user['user_id'] = $uData['user_id']; // Ultime bidouille
api_session_register('_user'); // On se connecte avec son profil Dokeos
event_login();
}
}
else // N'est pas connecté a Dokeos + Connecté a CAS + Pas d'enregistrement dans la base (mauvais cheminement)
{
Display::display_header('', 'dokeos');
echo "<h1>Connecter a CAS - Veuillez vous connecter a Dokeos..</h1>";
display_form_login();
display_warning_reclick();
}
}
else
{ // N'est connecté ni a Dokeos, ni a CAS
Display::display_header('', 'dokeos');
echo "<h1>Vous n'etes pas connecte. Veuillez vous enregistrer..</h1>";
display_form_login();
display_warning_reclick();
}
}
if($debug){echo "<h1><b>DEBUG</b></h1>";echo "<p> Identifiant CAS : ".$id_user_cas."</p>";echo "<p> Identifiant Dokeos : ".$id_user_dokeos."</p>";}
function insert_corresp($dokeos,$cas)
{
$result = mysql_query("SELECT id_user_dokeos,id_user_cas FROM user_ent_corresp where id_user_dokeos ='$dokeos'") or
die(mysql_error()); $_indb_cas = $cell['id_user_cas'];
$_indb_dokeos = $cell['id_user_dokeos'];
if( $_indb_dokeos != $dokeos )
{
$result = mysql_query("INSERT INTO user_ent_corresp (id_user_dokeos,id_user_cas) VALUES('$dokeos','$cas')") or
die(mysql_error()); return true;
}
else
{
return false;
}
}
function display_form_login()
{
echo '<div id="wrapper">';
echo '<form action="../../index.php" method="post" name="formLogin" id="formLogin"> ';
echo '<div><label>Login</label></div><div><input name="login" type="text" /></div>';
echo '<div><label>Passe</label></div><div><input name="password" type="password" /></div><div><label></label></div>';
echo '<div><button class="login" name="submitAuth" type="submit" >Entrer</button></form>';
echo '<ul class="menulist nobullets">';
echo '<li><a href="../../main/auth/inscription.php">Inscription</a></li>';
echo '<li><a href="../../main/auth/lostPassword.php">Perdu mot de passe</a></li>';
echo '</ul><input name="_qf__formLogin" type="hidden" value="" />';
echo '</div>';
}
function display_warning_reclick()
{
echo "<div><h1>Veuillez recliquer sur le lien Connexion E-Lyco apres validation de ce formulaire,<br/>sans quoi l'association entre vos 2 comptes ne peut se faire..</h1></div>";
}
?>