1*d10b5556SXylle<?php 2*d10b5556SXylle/** 3*d10b5556SXylle * CAS authentication plugin 4*d10b5556SXylle * 5*d10b5556SXylle * @licence GPL 2 (http://www.gnu.org/licenses/gpl.html) 6*d10b5556SXylle * @author Xylle, Fabian Bircher 7*d10b5556SXylle * @version 0.0.3 8*d10b5556SXylle * 9*d10b5556SXylle */ 10*d10b5556SXylle 11*d10b5556SXylle 12*d10b5556SXylleuse dokuwiki\Extension\ActionPlugin; 13*d10b5556SXylle 14*d10b5556SXylleclass action_plugin_authssocas extends ActionPlugin 15*d10b5556SXylle{ 16*d10b5556SXylle // https://www.dokuwiki.org/devel:plugins 17*d10b5556SXylle // https://www.dokuwiki.org/devel:plugin_file_structure 18*d10b5556SXylle // https://www.dokuwiki.org/devel:plugin_info 19*d10b5556SXylle // https://www.dokuwiki.org/devel:auth_plugins 20*d10b5556SXylle // https://www.dokuwiki.org/devel:events_list 21*d10b5556SXylle // https://www.dokuwiki.org/devel:common_plugin_functions 22*d10b5556SXylle // https://www.dokuwiki.org/devel:metadata 23*d10b5556SXylle 24*d10b5556SXylle 25*d10b5556SXylle 26*d10b5556SXylle public function register(Doku_Event_Handler $controller): void 27*d10b5556SXylle { 28*d10b5556SXylle // Gestion des événements 29*d10b5556SXylle // Création du formulaire de connexion 30*d10b5556SXylle $controller->register_hook('FORM_LOGIN_OUTPUT', 'BEFORE', $this, 'handle_login_form'); 31*d10b5556SXylle // Connexion et déconnexion 32*d10b5556SXylle $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handle_action'); 33*d10b5556SXylle } 34*d10b5556SXylle 35*d10b5556SXylle /** 36*d10b5556SXylle * 37*d10b5556SXylle * Suppression du formulaire par défaut et création de celui pour le CAS 38*d10b5556SXylle * 39*d10b5556SXylle * @param Doku_Event $event 40*d10b5556SXylle * @return void 41*d10b5556SXylle */ 42*d10b5556SXylle public function handle_login_form(Doku_Event $event): void 43*d10b5556SXylle { 44*d10b5556SXylle global $auth; 45*d10b5556SXylle global $lang; 46*d10b5556SXylle global $ID; 47*d10b5556SXylle 48*d10b5556SXylle if (!is_a($auth, 'auth_plugin_authssocas')) return; 49*d10b5556SXylle 50*d10b5556SXylle // Création du lien avec le logo. 51*d10b5556SXylle if ($this->getConf('logourl') != '') { 52*d10b5556SXylle $caslogo = '<img src="' . $this->getConf('logourl') . '" alt="" style="vertical-align: middle;" width="100"/> '; 53*d10b5556SXylle } else { 54*d10b5556SXylle $caslogo = ''; 55*d10b5556SXylle } 56*d10b5556SXylle 57*d10b5556SXylle /** @var dokuwiki\Form\Form $form */ 58*d10b5556SXylle /** @noinspection PhpUndefinedFieldInspection */ 59*d10b5556SXylle $form =& $event->data; 60*d10b5556SXylle 61*d10b5556SXylle 62*d10b5556SXylle // Suppression du formulaire de base 63*d10b5556SXylle for($i = $form->elementCount(); $i >= 0;){ 64*d10b5556SXylle $form->removeElement($i); 65*d10b5556SXylle $i--; 66*d10b5556SXylle } 67*d10b5556SXylle $login = wl($ID, 'do=caslogin', true, '&'); 68*d10b5556SXylle 69*d10b5556SXylle // Ajout du lien d'authentification pour le CAS 70*d10b5556SXylle $form->addFieldsetOpen($this->getConf('name')); 71*d10b5556SXylle $form->addHTML('<p style="text-align: center;"><a href="' . $login . '"><div>' . $caslogo . '</div>' . $lang['btn_login'] . '</a></p>'); 72*d10b5556SXylle $form->addFieldsetClose(); 73*d10b5556SXylle } 74*d10b5556SXylle 75*d10b5556SXylle 76*d10b5556SXylle /** 77*d10b5556SXylle * 78*d10b5556SXylle * Gestion des actions connexion et déconnexion 79*d10b5556SXylle * 80*d10b5556SXylle * @param Doku_Event $event 81*d10b5556SXylle * @return void 82*d10b5556SXylle */ 83*d10b5556SXylle public function handle_action(Doku_Event $event): void 84*d10b5556SXylle { 85*d10b5556SXylle global $auth; 86*d10b5556SXylle global $ID; 87*d10b5556SXylle 88*d10b5556SXylle /** @noinspection PhpUndefinedFieldInspection */ 89*d10b5556SXylle if ($event->data == 'caslogin') { 90*d10b5556SXylle $auth->logIn(); 91*d10b5556SXylle } 92*d10b5556SXylle 93*d10b5556SXylle /** @noinspection PhpUndefinedFieldInspection */ 94*d10b5556SXylle if ($event->data == 'logout') { 95*d10b5556SXylle $auth->logOff(); 96*d10b5556SXylle // Redirige vers la page d'acceuil du wiki, sinon le lien d'administration du wiki reste visible (pour les administrateurs). 97*d10b5556SXylle header('Location: '. wl($ID,'',true)); 98*d10b5556SXylle } 99*d10b5556SXylle } 100*d10b5556SXylle 101*d10b5556SXylle} 102