accueilRessourcesLogiciels
 

ownCloud 5 : Customisation user_servervars


Ce bout de doc explique les modifications effectuées sur l’application (plugin oC) user_servervars afin d’intégrer au mieux oC dans notre SI, en particulier le SSO. On va ajouter :

  • Un bout de code pour gérer la fonction de logins alternatifs présent sur la page d’accueil oC.
  • Une page exit.php qui sera affichée quand l’utilisateur se déconnecte ou quand un utilisateur se connecte via la fédération mais que son compte n’est pas provisionné (autocreate=false).

Login alternatif

Par défaut, pour déclencher authentification fédération, il faut taper sur l’URL / ?app=user_servervars, il faut améliorer un peu l’ergonomie et oC propose justement un système de logins alternatifs (voir dans /core/templates/login.php).

Pour faire apparaitre ce bouton sur la page d’accueil, il est nécessaire de modifier l’app user_servervars. On édite le fichier app.php :

vim <owncloud_path>/apps/user_servervars/appinfo/app.php

Et on ajoute ce code à la fin du fichier (juste avant la dernière accolade fermante) :

$shibbolethLogin = array(
               'href'  => "/?app=user_servervars",
               'name'  => "<Ma_fédération_d'identité>",
       );
       OC_App::registerLogIn($shibbolethLogin);

La page exit.php

Dans l’app user_servervars, on configure une URL de logout, typiquement le logout global Shibboleth serait parfait ici. Mais dans notre cas, nous avons deux types d’utilisateurs connectés, ceux provenant de la fédération et ceux qui ont des comptes locaux. Donc pour que cela reste cohérent pour tous les types d’utilisateurs, on ajoute une page qui invite l’utilisateur, fraîchement déconnecté, à fermer son navigateur pour finaliser la déconnexion. On va aussi gérer le cas où un utilisateur s’authentifie fédération d’identité mais ne possède pas de compte sur ownCloud.

On crée le script :

vim <owncloud_path>/exit.php

Avec le contenu suivant :

<!DOCTYPE html>
<html class="ng-csp">
<head>
       <title>ownCloud</title>
       <link rel="stylesheet" href="/remote.php/core.css" type="text/css" media="screen" />
       <link rel="stylesheet" href="/remote.php/files.css" type="text/css" media="screen" />
       
</head>
<body id="body-login">

       <div id="login">
                       <header><div id="header">
                               <img src="/core/img/logo.svg" class="svg" alt="ownCloud" />
                       </div></header>

<?php
       if($_GET['action'] == "fail") {
               echo "<br/><center><font size=5>Cette application est r&eacute;serv&eacute;e aux utilisateurs inscrits.<br/>Pour demander un compte, merci de contacter <admin_mail-address>.</font></center>";

       }
       if($_GET['action'] == "logout") {
               echo "<br/><center><font size=5>D&eacute;connection locale.<br/>Vous devez fermer votre navigateur Internet pour finaliser la d&eacute;connexion.</font></center>";

       }


?>

       </div>
</body>

Gestion de la déconnexion

Dans le panneau d’administration de l’app user_servervars, il faut indiquer le chemin vers cette page.

Donc dans le champs “External URL to redirect on Logout”, ajouter l’URL :

https://<mon_cloud>.<mon_domaine>/exit.php?action=logout

Gestion compte non provisionné

Par défaut, si un utilisateur fédération se connecte à oC mais qu’il ne possède pas de compte et que la création automatique n’est pas active, alors il se retrouve sur la page d’accueil sans aucun message. On va modifier ce comportement pour que se soit explicitement affiché qu’il faut avoir un compte pour se connecter.

On édite le fichier hooks.php de l’application user_servervars :

vim /var/www/<mon_owncloud>/apps/user_servervars/lib/hooks.php

Rechercher la chaîne “if ($user_backend→autocreate)” en particulier le else correspondant :

               if ($user_backend->autocreate) {
                   [...]
               }
               else {
                   return false;
               }

En plus de retourner false, on va ajouter une redirection vers notre page :

               else {
                       // Si compte nexiste pas et pas le droit de autocreate
                       if(isset($uid) and $uid != "") {
                               header("Location:exit.php?action=fail");
                               exit(0);
                       }
                   return false;
               }


ARESU
Direction des Systèmes d'Information du CNRS

358 rue P.-G. de Gennes
31676 LABEGE Cedex

Bâtiment 1,
1 Place Aristide Briand
92195 MEUDON Cedex



 

 

Direction des Systèmes d'Information

Pôle ARESU

Accueil Imprimer Plan du site Credits