Evolution #19598
Plugin CAS: La base des users ne contient pas de displayName
0%
Description
Lors d'une authentification CAS, la base de user de owncloud ne se met pas à jour avec le displayName de l'utilisateur
Proposition
1) envole_cas/envole_cas.php
$this->updateUserData = OCP\Config::getAppValue('user_cas', 'cas_update_user_data', true);
$this->displayNameMapping = OCP\Config::getAppValue('user_cas', 'cas_displayName_mapping', 'displayName');
2) Créer le filtre SSO
[utilisateur]
user=uid
displayName=displayName
email=mail
3) envole_cas/lib/hooks.php, récupérer les éléments
mettre
$cas_attributes = $cas_attributes["utilisateur"];
if (array_key_exists($casBackend->displayNameMapping, $cas_attributes))
$attributes['cas_name'] = $cas_attributes[$casBackend->displayNameMapping][0];
Christophe
Associated revisions
mise à jour des users en fonction des attributs cas displayname et email (ref #19598)
ajout filtre owncloud pour displayname et email (ref #19598)
ajout paquet owncloud-sso (ref #19598)
History
#1 Updated by Christophe LEON over 6 years ago
MAJ DU mail:
dans envole_cas/envole_cas.php , mettre une valeur par défaut pour l'attribut mail
$this->mailMapping = OCP\Config::getAppValue('user_cas', 'cas_email_mapping', 'email');
dans apps/envole_cas/lib/hooks.php
idem que pour le displayName prendre le premier élément du tableau CAS
if (array_key_exists($casBackend->mailMapping, $cas_attributes))
$attributes['cas_email'] = $cas_attributes[$casBackend->mailMapping][0];
l'appel a update_mail
provoque
PHP Fatal error: Class 'OC_Preferences' not found in /var/www/html/owncloud/apps/envole_cas/lib/hooks.php on line 157
OC_Preferences n'est pas déclaré
je propose le code suivant
function update_mail($uid, $email) {
$ocConfig = \OC::$server->getConfig();
$ocConfig->setUserValue($uid, 'user_ldap', "email", $email);
}
et je propose que le displayName contienne le mail entre parenthèse pour que le mail apparaisse lors de la recherche d'un user
static public function update_user($uid, $attributes) {
$casBackend = OC_USER_CAS::getInstance();
$mail="";
if(isset($attributes['cas_email'])) {
update_mail($uid, $attributes['cas_email']);
$mail=" (" . $attributes['cas_email'] . ")";
}
if (isset($attributes['cas_name'])) {
update_name($uid, $attributes['cas_name'] . $mail);
}
if (isset($attributes['cas_groups'])) {
update_groups($uid, $attributes['cas_groups'], $casBackend->protectedGroups, false);
}
}
#2 Updated by Arnaud FORNEROT over 6 years ago
Alors quasi pareil
Je n'ai pas ajouté le mail dans le displayname par contre
J'ai modifié la fonction update_mail pour qu'elle fonctionne correctement
J'ai compilé un paquet de dev pour test.
#3 Updated by Arnaud FORNEROT over 6 years ago
- Status changed from Nouveau to Résolu
- Target version set to Envole 5.5
#4 Updated by Arnaud FORNEROT over 6 years ago
- Status changed from Résolu to Fermé