Welcome, Guest
Username: Password: Remember me

TOPIC: Intégration de LS dans un ENT

Intégration de LS dans un ENT 3 years 10 months ago #48767

  • fhebert
  • fhebert's Avatar
  • OFFLINE
  • Fresh Lemon
  • Posts: 5
  • Thank you received: 1
  • Karma: 1
Bonjour à tous,

je suis en train d'intégrer LS dans un ENT (Environnement Numérique de Travail) à savoir uPortal. J'ai réussi à cassifier correctement LS en utilisant la librairie phpCAS fournie avec LS (je mettrai le script en PJ pour ceux que cela intéresse).

Le dernier pb que je rencontre est l'intégration dans l'interface de l'ENT. Lorsque l'on utilise l'interface d'admin via l'ENT (un clique sur les icônes) on en est ejecté et redirigé vers l'interface d'admin de LS.

D'après ce que j'ai pu comprendre de l'interface l'ouverture des vues se fait via un window.open (pas d'ajax ?).

Quelqu'un a t'il réussi une intégration ENT ou connait t'il suffisamment l'interface d'admin pour m'orienter ?

merci beaucoup par avance.

Frédéric
The administrator has disabled public write access.

Re:Intégration de LS dans un ENT 3 years 10 months ago #48774

  • Nickko
  • Nickko's Avatar
  • OFFLINE
  • LimeSurvey Team
  • Posts: 2049
  • Thank you received: 246
  • Karma: 53
C'est une question très pointu, jamais entendu parler de ça ds l'univers francophone.

Sinon, à ma connaissance ds Limesurvey 1.xx il n'y a pas d'ajax dans l'admin.

Pour la v2, j'ai cru en voir mais comme je n'ai jamais trop réussi à le faire fonctionner...
Nickko
Ergonome / Usability expert
The administrator has disabled public write access.

Re:Intégration de LS dans un ENT 3 years 10 months ago #48813

  • DenisChenu
  • DenisChenu's Avatar
  • OFFLINE
  • Moderator Lime
  • Posts: 6226
  • Thank you received: 792
  • Karma: 238
Dans la version 1.90, il existe un peu d'ajax pour l'ordre des réponses. Mais sinon, l'interface d'admin n'est pas du tout prévue pour être incluse, déjà que pour la partie publique c'est assez souvent difficile.

Le script peut être super intéressant, n'hésite pas à le déposer sur le bug tracker pour que d'autres puisse s'en inspirer.

:)
The administrator has disabled public write access.

Re: Intégration de LS dans un ENT 3 years 6 months ago #55159

  • afrehel
  • afrehel's Avatar
  • OFFLINE
  • Fresh Lemon
  • Posts: 3
  • Thank you received: 2
  • Karma: 0
Salut Frédéric,

Je cherche moi aussi à intégrer LimeSurvey dans notre ENT, mais je bute sur l'authentification CAS. J'ai paramétré le CAS à partir de l'exemple dans config-default.php, mais ça boucle entre le CAS et LS. je crois que le problème vient de login_check_cas.php. Tu as fait comment ?
The administrator has disabled public write access.

Re: Intégration de LS dans un ENT 3 years 6 months ago #55161

  • fhebert
  • fhebert's Avatar
  • OFFLINE
  • Fresh Lemon
  • Posts: 5
  • Thank you received: 1
  • Karma: 1
afrehel comme Alain ?

Quoi de neuf ?

Voilà l'adresse de deux fichiers :

- un patch javascript de l'interface d'admin (admin_core.js) pour la *release 9160* de LS ; sans le patch toutes les actions ouvrent de nouvelles fenêtres et ne sont pas intégrées dans l'iframe de l'ENT

- un patch qui crée un fichier ehess_login_check_cas.php dans le répertoire d'admin. J'inclue ce fichier dans admin.php en remplaçant l'include de login_check_cas.php.


patch JS : filez.ehess.fr/3fe59i

patch ehess_login_check_cas.php : filez.ehess.fr/eykk88u


J'ai malheureusement peu de temps pour mettre à jour les scripts. Faudrait que je m'y colle.

PS. : faut que tu viennes voir nos nouveaux locaux et surtout notre bureau ... !

à plus
The administrator has disabled public write access.
The following user(s) said Thank You: afrehel

Re: Intégration de LS dans un ENT 3 years 6 months ago #55169

  • fhebert
  • fhebert's Avatar
  • OFFLINE
  • Fresh Lemon
  • Posts: 5
  • Thank you received: 1
  • Karma: 1
bon je viens de vérifier les fichiers que j'ai envoyés, ce ne sont pas les bons.

Dès que j'ai accès au serveur de prod de LS je t'envoie les fichiers définitifs et non les patchs. Désolé pour le contre-temps.

Frédéric
The administrator has disabled public write access.

Re: Intégration de LS dans un ENT 3 years 6 months ago #55170

  • afrehel
  • afrehel's Avatar
  • OFFLINE
  • Fresh Lemon
  • Posts: 3
  • Thank you received: 2
  • Karma: 0
Salut,

Oui, j'ai dû un peu trifouiller dedans pour faire marcher l'authentification, mais ça l'a fait quand même. Je suis quand même preneur de votre version finale.

Merci en tout cas, ça m'a fait gagner un temps énorme. Je dois livrer LimeSurvey au plus vite et j'aurais vraiment été dégoûté de ne pas l'avoir intégré à notre authentification CAS.

À+,

-- Alain
The administrator has disabled public write access.

Re: Intégration de LS dans un ENT 3 years 6 months ago #55229

  • DenisChenu
  • DenisChenu's Avatar
  • OFFLINE
  • Moderator Lime
  • Posts: 6226
  • Thank you received: 792
  • Karma: 238
Salut,

Si il y a des modifications à faire pour l'intégration CAS ou pour faciliter la mise en place, n'hésitez à proposer des patchs sur le bug tracker :)

En plus si c'est dans le core de LimeSurvey, pas de problèmes de mise à jour ;)
The administrator has disabled public write access.

Re: Intégration de LS dans un ENT 2 years 4 months ago #77233

Bonjour,

Je souhaiterais moi aussi accéder à limesurvey via CAS.
J'ai donc configuré le fichier config.php:

$casEnabled = true;
$casAuthServer = 'cas-test.xxxxxxx.fr';
$casAuthPort = 8443;
$casAuthUri = 'cas';

Mais je n'ai aucune réaction concernant une connexion CAS quand je me connecte à limesurvey.
Même pas un message d'erreur de connexion à mon serveur CAS.
Pourtant le paramètre casEnabled devrait signifier qu'il faut chercher un serveur cas, non?
J'ai relancé mon serveur apache pour être sûr que les fichiers soient mis à jour et pris en compte.

Merci d'avance pour vos réponses.

Sébastien.
The administrator has disabled public write access.

Re: Intégration de LS dans un ENT 2 years 4 months ago #77234

  • afrehel
  • afrehel's Avatar
  • OFFLINE
  • Fresh Lemon
  • Posts: 3
  • Thank you received: 2
  • Karma: 0
Voici ce que j'ai dans config.php :
// CAS authentication
$casEnabled = true;
$casAuthServer = 'cas.domaine.fr';
$casAuthPort = 443;
$casAuthUri = '/cas/login?service=http://limesurvey.domaine.fr/admin';
 
# pour mon_login_check_cas.php (les variables de configuration n'ont pas le même nom).
$casAuthServerPort = 443;
$casAuthServerURI = '/cas';
$casAuthServiceURI = 'serviceUri';

Dans admin/admin.php :
if($casEnabled==true)
{
    include_once("mon_login_check_cas.php");
}
else
{
    include_once('login_check.php');
}

Et dans admin/mon_login_cas.php :
<?php
if (!isset($dbprefix) || isset($_REQUEST['dbprefix'])) {die("Cannot run this script directly");}
if (!isset($action)) {$action=returnglobal('action');}
 
openlog('phpCAS', LOG_NDELAY, LOG_LOCAL0);
 
// we need CAS client all the script along.
_init_cas_lib();
 
if(!isset($_SESSION['CASauthenticated']) || (isset($_SESSION['CASauthenticated']) && $_SESSION['CASauthenticated']==FALSE) /* || isset($_REQUEST['action']) */) 
{
    if(phpCAS::isAuthenticated())
    {
		//global $PHPCAS_CLIENT;
        // $user = $_GET['user'];
 
        $action = getGet('action');
        $siddy = getGet('sid');
 
        $get = '?';
        if($action!=FALSE)
        $get .= "action=".$action."&";
        if($siddy!=FALSE)
        $get .= "sid=".$siddy."&";
 
        //if($user == verifyToken($token) && verifyToken($token) != null)
		setUserRightsCas(phpCAS::getUser());
		$_SESSION['CASauthenticated'] = TRUE;
		//header("Location: admin.php$get");
		return 0;
 
    }
 
	// if action is logout we do not need to do an authentication
	if ($action == 'logout')
		//return;
		die('You have to be logged in before to be logged out.');
 
	// if ticket is *NOT* valid we do an authentication.
	// we don't need to handle ST check here, it will be done the next request.
	phpCAS::setNoCasServerValidation();
	phpCAS::forceAuthentication();
 
 
}
else
{
	syslog(LOG_DEBUG, "Exiting CAS management");
}
// THERE IS an CAS authentication but we want to be logged out.
if (isset($_REQUEST['action']) && $_REQUEST['action']=='logout')
{
	//session_unset();
	session_destroy();
	session_write_close();
	phpCAS::logout();
}
 
 
function _init_cas_lib()
{
 
	require_once('classes/phpCAS/CAS.php');
	require_once('../config-defaults.php');
	global $casAuthServer, $casAuthServerPort, $casAuthServerURI, $casAuthServiceURI;
 
 
	if (empty($casAuthServer))
		die('CAS server is not defined. Set $casAuthServer in config-defaults.php');
 
	if (empty($casAuthServerPort))
		$casAuthServerPort = 443;
 
	if (empty($casAuthServerURI))
		$casAuthServerURI = '/';
 
	if (empty($casAuthDebug))
		$casAuthDebug = FALSE;
 
	/*
	CAS client find current URL by itself. So it is not necessary here.
	if (empty($casAuthServiceURI))
		//$casAuthServiceURI = $_SERVER['HTTP_SCHEME'] . '://' . $_SERVER['SERVER_NAME'] . '/' . $_SERVER['SCRIPT_NAME'] . '?' . $_SERVER['QUERY_STRING'];
		$casAuthServiceURI = 'http://' . $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'] . $_SERVER['REQUEST_URI'];
    */
 
	if ($casAuthDebug == TRUE)
	{
		phpCAS::setDebug();
	}
	elseif (is_writeable((string)$casAuthDebug))
	{
		phpCAS::setDebug((string)$casAuthDebug);
	}
	phpCAS::client(CAS_VERSION_2_0, $casAuthServer, $casAuthServerPort, $casAuthServerURI, false /* no session start */); 
	phpCAS::setNoCasServerValidation();
 
	return 0;
}
 
function getGet($var)
{
    switch ($var){
        case "all":
            foreach($_GET as $get)
            {
                return;
            }
            break;
        default:
            if(isset($_GET["$var"]))
            {
                return $_GET["$var"];
            }
            else return FALSE;
            break;
 
    }
}
 
function verifyTicket($ticket)
{
 
	return phpCAS::validateST($ticket);
 
}
 
#function verifyToken($token) {
#    global $singleSignOnService, $singleSignOnSharedSecret;
#
#    // check the configuration options in LocalSettings.php
#    //QISSingleSignOn::checkConfiguration();
#
#    //echo ('QISSingleSignOn: token:'.htmlspecialchars($token));

    // prepare token
#    $tokens = explode('/', $token, 4);
#    if ((count($tokens) != 4) or (strpos($tokens[3], '/') === false)) {
#        echo ('QISSingleSignOn: Token incomplete:'.htmlspecialchars($token));
#        return null;
#    }

    // find the _last_ '/' to split username and hash as the username may include '/'-chars.
#    $temp_pos = strrpos($tokens[3], '/');
#    $tokens[4] = substr($tokens[3], $temp_pos + 1);
#    $tokens[3] = substr($tokens[3], 0, $temp_pos);

    // check version
#    if ($tokens[0] != '1.0') {
#        echo ('QISSingleSignOn: Unknown version:'.htmlspecialchars($tokens));
#        return null;
#    }

    // check time
#    $currentTime = microtime();
#    $currentTime = substr($currentTime, strpos($currentTime, ' '));
#    if (intval($tokens[1]) > intval($currentTime) + 60) {
#        echo ('QISSingleSignOn: Token was created in the future (Check your clocks):'.htmlspecialchars($token));
#        return null;
#    }
#    if (intval($tokens[1]) + 60 < intval($currentTime)) {
#        echo ('QISSingleSignOn: Token expired:'.htmlspecialchars($token));
#        return null;
#    }

    // check service name
#    if ($tokens[2] != $singleSignOnService) {
#        echo ('QISSingleSignOn: Wrong service:'.htmlspecialchars($token));
#        return null;
#    }

    // check username name (using Title::newFormText as in User::newFromName)
#    $userinfo = explode('/', urldecode($tokens[3]));

    // Andere Methode wie bei tokens: find the _last_ '/' to split username and hash as the username may include '/'-chars.
    //               $temp_pos = strrpos($tokens[3], '/');
    //               $userinfo[1] = substr($tokens[3], $temp_pos + 1);
    //               $userinfo[0] = substr($tokens[3], 0, $temp_pos);
 
    //				echo ('QISSingleSignOn: userinfo-0:'.$userinfo[0]."\n");
    //				echo ('QISSingleSignOn: userinfo-1:'.$userinfo[1]."\n");
 
    //$t = Title::newFromText($userinfo[0]);
 
#    $user = $userinfo[0];
#    if ($user == null) {
#        echo ('QISSingleSignOn: Invalid character in user name: '.htmlspecialchars($userinfo[0]));
#        return null;
#    }

    // check hash
#    $toHash = $tokens[0].'/'.$tokens[1].'/'.$tokens[2].'/'.$tokens[3].'/'.$singleSignOnSharedSecret;
#    $hash =  md5($toHash);
#    if ($hash != $tokens[4]) {
#        echo ('QISSingleSignOn: Hash verification failed:'.htmlspecialchars($token).' Should be: ' . $hash);
#        return null;
#    }

    // copy _ridlist to session for WikiRights (if present)
#    if (count($userinfo) > -1) {
        //session_start();
#        setUserRightsCas($user, $user);
        //$_SESSION['_ridlist'] = $userinfo[1];
#    }

    // welcome, you passed all tests.
#    return $user;
#}

function setUserRightsCas($user, $role="")
{
    include_once("../config-defaults.php");
    //include("../config.php"); //Not needed since config-defaults includes config.php
	$sql = 'SELECT * FROM lime_users WHERE users_name = \'' . $user .'\'';
	$db_set = db_execute_assoc($sql);
 
	$uid = $db_set->Fields('uid');
 
	if (!$uid)
	{
		mail('limesurvey@domaine.fr', '[limesurvey.domaine.fr] Tentative de connexion d\'un utilisateur non autorisé.', 'L\'utilisateur ' . $user . ' a tenté de se connecter sans être inscrit dans la base des utilisateurs de LimeSurvey.', "From: limesurvey@domaine.fr\r\nContent-Type: text/plain; charset=utf-8\r\n");
		die('Vous devez auparavant contacter l\'administrateur (limesurvey@domaine.fr) avant de pouvoir accèder à l\'interface d\'administration de LimeSurvey.');
	}
 
    $_SESSION['user'] = $user;
    $_SESSION['loginID'] = $uid;
    $_SESSION['dateformat'] = $db_set->Fields('dateformat');
 
    $_SESSION['adminlang'] = $db_set->Fields('lang');
    $_SESSION['htmleditormode'] = $db_set->Fields('htmleditormode');
 
    //$_SESSION['checksessionpost'] = randomkey(10);
    $_SESSION['checksessionpost'] = sRandomChars(10);
    $_SESSION['pw_notify']=false;
 
	$_SESSION['USER_RIGHT_CREATE_SURVEY'] = $db_set->Fields('create_survey');
	$_SESSION['USER_RIGHT_CONFIGURATOR'] = $db_set->Fields('configurator');
	$_SESSION['USER_RIGHT_CREATE_USER'] = $db_set->Fields('create_user');
	$_SESSION['USER_RIGHT_DELETE_USER'] = $db_set->Fields('delete_user');
	$_SESSION['USER_RIGHT_SUPERADMIN'] = $db_set->Fields('superadmin');
	$_SESSION['USER_RIGHT_MANAGE_TEMPLATE'] = $db_set->Fields('manage_template');
	$_SESSION['USER_RIGHT_MANAGE_LABEL'] = $db_set->Fields('manage_label');
 
}
 
closelog();
 

Il faut que curl soit installé (sinon on a une page blanche).

Ça marche sur notre LS en version 1.91+.

Cordialement,

Alain Fréhel
Last Edit: 2 years 4 months ago by afrehel.
The administrator has disabled public write access.
The following user(s) said Thank You: DenisChenu, sebcavaignac
Moderators: Nickko
Time to create page: 0.328 seconds
Donation Image