Ça c'est de la réponse !
Comment puis-je aider ? (parce que j'ai pas des compétences de dev' hyper developpées justement… j'ai quand même créée un logiciel web basique…)
Hors ligne
Je pense que ce serais bien d'essayer de faire un plugin avec ce que tu proposes
Pour faire un plugin le mieux c'est observer les plugins des autres !
Maintenant pour Piwigo tu peux participer dans plein de direction une petite page à lire ;-)
http://fr.piwigo.org/basics/contribute
Hors ligne
Bonjour
Je reprends mon plugin, il y a eu du temps, mais déménagement oblige...
J'essaye aujourd'hui de creer un trigger perso à l'endroit ad_hoc...
fichier include/functions_user.inc.php
/** * Tries to login a user given username and password (must be MySql escaped) * return true on success */ function try_log_user($username, $password, $remember_me) { // we force the session table to be clean pwg_session_gc(); global $conf; $success = trigger_event('try_login', $username, $password, $remember_me); // retrieving the encrypted password of the login submitted suite du fichier...
mon main.inc.php (dans le dossier du plugin) :
<?php /* Plugin Name: Ldap_Login Version: 0.1 Description: Permet de se logger via une authentification ldap Plugin URI: http://www.22decembre.eu */ if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!'); add_event_handler('try_login','ldap_login'); function ldap_login($success, $username, $password, $remember_me) { // we force the session table to be clean pwg_session_gc(); global $conf; // Vérification de l'authentification if (ldap_log($username,$password)) { log_user($row['id'], $remember_me); trigger_action('login_success', stripslashes($username)); return true; } else { trigger_action('login_failure', stripslashes($username)); return false; } } suite...
lorsque je teste, le systeme me dit qu'il lui manque les args 2, 3 et 4 de la fonction ldap_login (autrement dit, username et password) alors qu'il me semble bien avoir tout écrit correctement (le trigger dans la fonction native et dans mon main.inc.php).
Juste après, bien sûr, il me dit aussi que username et password ne sont pas définis (logique... :rolleyes: ).
J'ai quoi de faux ? Avez-vous des suggestions ?
Dernière modification par 22decembre (2012-08-15 17:18:43)
Hors ligne
par defaut add_event_handler ne prend que 1 paramètres
il faut faire
add_event_handler('try_login', 'ldap_login', EVENT_HANDLER_PRIORITY_NEUTRAL, 3);
(EVENT_HANDLER_PRIORITY_NEUTRAL est définie dans include/functions_plugins.inc.php)
Hors ligne
hmm j'ai compris ce que vous vouliez faire, voici une proposition de modif de Piwigo qui convient mieux je pense
function try_log_user($username, $password, $remember_me) { return trigger_event('try_login', $username, $password, $remember_me, false); } add_event_handler('try_login', 'common_login', EVENT_HANDLER_PRIORITY_NEUTRAL, 4); function common_login($username, $password, $remember_me, $success) { if ($success) { return true; } // we force the session table to be clean pwg_session_gc(); global $conf; // retrieving the encrypted password of the login submitted $query = ' SELECT '.$conf['user_fields']['id'].' AS id, '.$conf['user_fields']['password'].' AS password FROM '.USERS_TABLE.' WHERE '.$conf['user_fields']['username'].' = \''.pwg_db_real_escape_string($username).'\' ;'; $row = pwg_db_fetch_assoc(pwg_query($query)); if ($row['password'] == $conf['pass_convert']($password)) { log_user($row['id'], $remember_me); trigger_action('login_success', stripslashes($username)); return true; } trigger_action('login_failure', stripslashes($username)); return false; }
et dans votre plugin
add_event_handler('try_login','ldap_login', 0, 4); function ldap_login($username, $password, $remember_me, $success) { // we force the session table to be clean pwg_session_gc(); global $conf; // Vérification de l'authentification if (ldap_log($username,$password)) { log_user($row['id'], $remember_me); trigger_action('login_success', stripslashes($username)); return true; } else { trigger_action('login_failure', stripslashes($username)); return false; } }
(absouement pas testé, mais ça -//:---\spam comment utiliser les trigger_event)
Hors ligne
En gros, ce que tu propose (si tu veux bien le tutoiement) c'est de clairement créer une fonction "login classique" dans le code core de PWG, ce qui permettrait d'utiliser des fonctions de login alternatives dans des plugins.
Ceci répondrait à mon problème actuel et permettrait d'ouvrir la voie à d'autres login (login ssh, openid...)
Ais-je bien compris ?
On pourrait aussi voir si cela ne crée pas trop de débauche de fonctions (une fonction qui en appelle une autre qui en appelle encore une autre, façon poupées russes).
J'aime la simplicité et l’efficacité, donc si l'équipe de dev' pense que c'est la meilleure chose, je prend.
En attendant la réponse, je vais voir ce que je peux faire avec ta proposition. :-)
Merci !
Hors ligne
Je crois que l'admin des plugins a changé par rapport à la doc...
Pour l'instant je peux rien faire car l'ébauche de mon plugin fait planter l'admin générale (impossible de se logger, et quand je suis loggé, impossible d'administrer les plugins, le mini menu d'administration individuelle disparait).
Donc voili voulou ... :-)
Hors ligne
Ça y est, ça marche !
J'ai le trigger qui marche dans le functions_user.inc.php.
Le plugin m'authentifie bien sur le serveur ldap.
Par contre, le système n'aime pas avoir deux auth concurrents.
Je peux soit m'authentifier soit sur ldap, soit sur la base de piwigo, mais pas les deux à la fois. Et donc je dois soit commenter :
add_event_handler('try_login', 'common_login', EVENT_HANDLER_PRIORITY_NEUTRAL, 4); => dans functions_user.inc.php
soit
add_event_handler('try_login','ldap_login', 0, 4); => dans mon plugin.
Sinon, l'admin du plugin est moche. Et je ne sais pas si elle fonctionne.
Autrement dit, se serait cool de pouvoir faire du debbuggage avec un volontaire !
Hors ligne
sur ma base de travail j'ai modifié mon approche alors difficile de vous aider :)
quoi qu'il en soit j'espère bien rendre disponible la fonction pour la version 2.5
edit : quand je parle de fonction c'est tous les types d'authentification externe, pas seulement LDAP
Hors ligne
22decembre a écrit:
Sinon, l'admin du plugin est moche. Et je ne sais pas si elle fonctionne.
Autrement dit, se serait cool de pouvoir faire du debbuggage avec un volontaire !
Au boulot, j'ai un annuaire Active Directory. Si les requêtes LDAP sont compatibles, je veux bien essayer l'essayer. Mais il faudra être patient ;-)
Hors ligne
Le plugin est disponible ici :
http://www.22decembre.eu/downloads/ldap_login.zip
Je pense que c'est justement un bon moyen, une bonne occasion pour concevoir une authentification globale.
Hors ligne
Hello
Quelqu'un a testé le plugin ?
J'ai déjà quelques petites choses à ajouter, entre autre une option de test dans la page d'administration.
Mais sinon ? Des remarques ?
Je pense que le plugin n'est pas mur pour être intégré aux extensions du site fr.piwigo.org. Mais est-ce qu'il y a un truc à faire pour tout ça (intégration correcte du plugin...).
Hors ligne
Eric est le plus apte à tester. Je le notifie.
Tu es là le Valenciennois ?!
Hors ligne