xref: /plugin/authssocas/action.php (revision d10b5556242e78d8a430c323b91984ec16415a46)
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