diff --git a/build/api/core/AuthSystemDefault.php b/build/api/core/AuthSystemDefault.php index e6b5814..73715d1 100644 --- a/build/api/core/AuthSystemDefault.php +++ b/build/api/core/AuthSystemDefault.php @@ -13,18 +13,92 @@ use \error\core\Err; use \error\core\Error; +use router\controller\redirect; - class AuthSystemDefault implements AuthSystem{ +class AuthSystemDefault implements AuthSystem { - /* VERIFICATION DES ACCES EN FONCTION DE PERMISSIONS ATTENDUES - * - * @expected Liste des permissions attendues - * - * @return error Erreur associée à la permission (Success/PermissionError/TokenError/etc) - * - */ - public static function permission($expected){ - return new Error(Err::Success); + /** AUTHENTIFICATION VIA LE PROTOCOLE CAS AU PORTAIL DE L'UNIVERSITÉ + * + * AuthSystemDefault constructor. + */ + public function __construct() { + if (strpos($_SERVER['REQUEST_URI'], '/logout/') !== false) { + unset($_SESSION['idCAS']); + + header('Location : https://www.google.fr/'); + +// // ce qu'il faudrait faire pour se déconnecter +// header("Location : https://sso.univ-pau.fr/cas/logout?service=$_SERVER[REQUEST_SCHEME]://$_SERVER[HTTP_HOST]/"); +// // ce qu'il faudrait faire pour faire la redirection sans se déconnecter du portail CAS +// header("Location : $_SERVER[REQUEST_SCHEME]://$_SERVER[HTTP_HOST]/"); + +// // ce qu'on aurait pu faire pour se déconnecter mais la requête tourne dans le vide +// echo ""; + + // ce qu'il reste à faire pour au moins ne pas charger la page logout qui n'existe pas + echo ""; + die(); + } + + if (empty($_SESSION['idCAS'])) { + // lorsque $_GET est miraculeusement vide + $parts = parse_url($_SERVER['REQUEST_URI']); + parse_str($parts['query'], $query); + $ticket = $query['ticket']; +// $ticket = $_GET['ticket']; + + // connexion + if (empty($ticket)) { + // ce qu'il faut faire et que l'on fait parce qu'ici le header fonctionne + header("Location: https://sso.univ-pau.fr/cas/login?service=$_SERVER[REQUEST_SCHEME]://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"); + +// // ce qu'il faut faire si la solution du dessus ne fonctionne pas +// echo ''; +// die(); + } + // vérification du ticket + else { + // on retire les paramètres GET de l'URI + $uri = strstr($_SERVER['REQUEST_URI'], '?', true); + $currentPage = "$_SERVER[REQUEST_SCHEME]://$_SERVER[HTTP_HOST]$uri"; + $page = "https://sso.univ-pau.fr/cas/serviceValidate?ticket=$ticket&service=$currentPage"; + + // create curl resource + $ch = curl_init(); + // set url + curl_setopt($ch, CURLOPT_URL, $page); + //return the transfer as a string + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + // $output contains the output string + $output = curl_exec($ch); + $message = trim(strip_tags($output)); + // close curl resource to free up system resources + curl_close($ch); + + // si l'authentification est validée + if (strpos($output, 'user') !== false) { + $_SESSION['idCAS'] = $message; + echo ""; + die(); + } + // redirection en cas de pépin mais normalement ça n'arrive pas + else { + echo ""; + die(); + } + } + } + } + + /* VERIFICATION DES ACCÈS EN FONCTION DE PERMISSIONS ATTENDUES + * + * @expected Liste des permissions attendues + * + * @return error Erreur associée à la permission (Success/PermissionError/TokenError/etc) + * + */ + public static function permission($expected) { + return new Error(Err::Success); } } diff --git a/webpack/data/common.js b/webpack/data/common.js index a83c0af..ebca82a 100644 --- a/webpack/data/common.js +++ b/webpack/data/common.js @@ -40,17 +40,15 @@ gstore.add('menu_item', { label: 'Fiches', url: 'fiche', icon: 'fiche' + }, logout: { + label: 'Déconnexion', + url: 'logout', + icon: 'logout' } }); -/* (3) Gestion du login/logout */ -if( _SERVER.session.connected ) gstore.get.menu_item.logout = { label: 'Déconnexion', url: 'logout', icon: 'logout' }; -else gstore.get.menu_item.login = { label: 'Connexion', url: 'login', icon: 'login' }; - - - -/* (4) Set current page active in menu */ +/* (3) Set current page active in menu */ if( gstore.get.URI.length > 0 && gstore.get.menu_item.hasOwnProperty(gstore.get.URI[0]) ) gstore.add('menu_item_active', gstore.get.menu_item[gstore.get.URI[0]].url); else