Très bien joué ;-)
J'ai peut-etre raté quelque chose, mais pourquoi ne pas faire tout simplement pour ton fichier auto_id.php:
define('PHPWG_ROOT_PATH','./');
include_once( PHPWG_ROOT_PATH.'include/common.inc.php' );
if (isset($_GET['username'])
and try_log_user(mysql_real_escape_string($_GET['username']), '', false))
{
redirect(make_index_url());
}
else
{
redirect(get_root_url().'identification.php');
}
On remarquera l'utilisation de mysql_real_escape_string par précaution...
A mon avis, un petit code en plugin perso suffirai à faire la meme chose...
Je vous livre ca dans 5 minutes ;-)
Hors ligne
Voila donc l'équivalent en plugin perso:
add_event_handler('init', 'auto_log_user');
function auto_log_user()
{
if (isset($_GET['username']))
{
try_log_user(mysql_real_escape_string($_GET['username']), '', false);
redirect(make_index_url());
}
}
Pas besoin de fichier supplémentaire, l'utilisateur devra rentrer cette adrese pour etre loggué:
xxxx.fai.com/piwigo/index.php?username=lsdkjf
Dernière modification par P@t (2009-05-10 23:25:05)
Hors ligne
Moi, je le savais bien, qu'on me corrigerait...! ;-)
Super P@t, merci beaucoup !
J'expérimente ça dès que... boah, normalement, ce soir, quoi.
Merci encore !
Hors ligne
Pas de quoi ;-)
EDIT: je viens de modifier légèrement le code du plugin perso pour etre plus propre...
Vincent, je ne comprend pas ton problème de sécurité....
Dis-moi ce qui te chiffonne (en MP si possible!)
Dernière modification par P@t (2009-05-10 23:27:11)
Hors ligne
CTRL+C, CTRL+V, retour à la page d'accueil, déconnexion, envoi de l'URL... beuh, ça marche pas :-( ....
Attends... "plugin", ça me dit quelquechose... Oooh, dans la page des plugins, y'a mon mien que m'a écrit P@t, c'est chouette alors... mais il est pas activé, ça c'est triste...
Bon, donc, après activation, ça marche, super ! Merci encore... pour une petite modif : si on met un URL qui ne doit pas fonctionner (pas de username ou un mauvais), on reste à la page d'accueil de la galerie (qui ne contient rien, pour illustrer je mettrai un lien ici -- qui permettra de ne pas avoir à s'identifier !!! :-))) -- lorsque j'aurai fait un petit tutoriel). Mais j'eusse préféré que dans ce cas on tombe sur une page "accès interdit" ou "mauvaise identification". J'ai essayé de rajouter un
else { array_push($errors, l10n('access_forbiden')); }
mais bien évidemment ce n'est pas aussi simple et ça ne fonctionne pas.
Cette fonctionnalité est-elle possible à rajouter en moins de cinq minutes ? Cinq minutes parceque franchement si ça prend plus de temps, ce n'est vraiment pas grave, c'est déjà très bien comme ça.
Encoremerci ; à plus !
Hors ligne
LucMorizur a écrit:
Cette fonctionnalité est-elle possible à rajouter en moins de cinq minutes ? Cinq minutes parceque franchement si ça prend plus de temps, ce n'est vraiment pas grave, c'est déjà très bien comme ça.
30 secondes tout au plus! ;-)))
add_event_handler('init', 'auto_log_user');
function auto_log_user()
{
if (isset($_GET['username']))
{
if (try_log_user(mysql_real_escape_string($_GET['username']), '', false))
{
redirect(make_index_url());
}
else
{
access_denied();
}
}
}
Tu pourras eventuellement interdire toute ta galerie aux guest, en rajoutant simplement dans ton config_local.inc.php (premier onglet de LocalFiles Editor):
$conf['guest_access'] = false;
Dernière modification par P@t (2009-05-11 02:17:19)
Hors ligne
Je viens de penser à une solution beaucoup plus interessante...
Afin d'éviter de mettre un nom d'utilisateur dans l'adresse, on peut utiliser un code...
Voila ce que ca donnera en plugin perso:
add_event_handler('init', 'auto_log_user');
function auto_log_user()
{
global $conf;
if (isset($_GET['log']) and isset($conf['auto_log']))
{
if ($_GET['log'] == $conf['auto_log']['code'])
{
try_log_user($conf['auto_log']['username'], $conf['auto_log']['password'], false);
redirect(make_index_url());
}
else
{
access_denied();
}
}
}
Ensuite, tu paramètres tout ca dans ton config_local.inc.php (premier onglet de LocalFiles Editor) ainsi:
$conf['auto_log'] = array(
'code' => 'f71dbe52628a3f83a77ab494817525c6',
'username' => 'Toto',
'password' => 'tata',
);
Ainsi, pour se connecter, on rentrera l'adresse suivante:
xxxx.fai.com/piwigo/index.php?log=f71dbe52628a3f83a77ab494817525c6
C'est alors l'utilisateur Toto avec le mot de passe tata qui sera automatiquement loggué.
Bien évidemment, il faudra que Toto soit un utilisateur générique...
Le top serait meme de retirer complètement le bloc identification du menubar (panneau d'admin -> Configuration -> Menu)
Dernière modification par P@t (2009-05-11 18:02:20)
Hors ligne
!!!
Alors là... j'en ai rêvé, P@t l'a fait.
Pour ce qui est de retirer le bloc identification du menubar, ça j'avais déjà fait (comme quoi tout n'est pas perdu en ce qui me concerne ;-) !).
Ce que tu écris, qui est extrêmement intéressant, car évidemment la sécurité est renforcée etc, pose les questions suivantes :
_ ai-je bien compris, si je dis que le "code" est une chaîne définie par l'admin qui sert juste à vérifier une corrspondance (pas un code genre celui du champ password de la table <prefix>_users) ?
_ je ne suis vraiment pas très familier avec PHP ; cette façon de faire permet-elle de définir
$conf['auto_log'] = array( 'code' => 'f71dbe52628a3f83a77ab494817525c6', 'username' => 'Toto', 'password' => 'tata', 'code' => 'f71dbed5g56d5t5hcx7ab494817525c6', 'username' => 'Tutu', 'password' => 'titi', /* et ainsi de suite avec plein d'utilisateurs */ );
?
Sinon j'ai un peu réfléchi aussi, et je me demande s'il y a là matière à un "vrai" plugin :
_ y aurait-il d'autres utilisateurs de Piwigo à part moi qui seraient suffisemment intéressés pour que ça vaille la peine d'y consacrer le temps de la création d'un vrai plugin (sachant que moi,...... je connais pas toutes les fonctions de Piwigo.......) ?
_ "un vrai plugin" car il y a d'autres aspects à considérer : il ne faut pas d'affichage à plat, de calendrier, de "voir les nouveautés"... pour ne pas donner d'aperçu aux utilisateurs des autres catégories. J'ai édité des templates perso et utilisé des plugins pour retirer les liens vers ces fonctionnalités, mais elles sont encore là en fait, et un petit malin repérant les URLs sur une autre galerie Piwigo, n'aurait aucun mal à voir ce qu'on veut cacher. Ce serait donc intéressant de faire un "package" effectuant tout cela.
Il faut vraiment que je propose un lien pour illustrer ici le peu que j'ai déjà fait, je vais essayer de faire ça ce soir.
En tous cas merci ton intérêt P@t (et VDigital aussi :-) !).
A plus tard !
Luc
Dernière modification par LucMorizur (2009-05-11 18:59:09)
Hors ligne
Non ça ne marchera pas comme ça.
Par contre comme ceci :
$conf['auto_log'] = array( 'f71dbe52628a3f83a77ab494817525c6' => array( 'username' => 'Toto', 'password' => 'tata' ), 'f71dbed5g56d5t5hcx7ab494817525c6' => array( 'username' => 'Tutu', 'password' => 'titi' ), /* et ainsi de suite avec plein d'utilisateurs */ );
et
add_event_handler('init', 'auto_log_user'); function auto_log_user() { global $conf; if (isset($_GET['log']) and isset($conf['auto_log'])) { if (isset($conf['auto_log'][$_GET['log']])) { $theUser = $conf['auto_log'][$_GET['log']]; try_log_user($theUser['username'], $theUser['password'], false); redirect(make_index_url()); } else { access_denied(); } } }
Ca devrait mieux marcher (à confirmer bien sûr)
Dernière modification par Criss (2009-05-11 19:11:49)
Hors ligne
La solution de Criss est bonne si tu veux avoir plusieurs utilisateurs (avec différents droits). C'est justement ce que j'allais proposer! ;-)
LucMorizur, je ne suis pas sur que tu ais bien saisis le principe des catégories privées...
Si tu as une catégorie A accessible à l'utilisateur Toto et une catégorie B accessible à l'utilisateur Tutu, l'utilisateur Toto ne verra pas les images de la catégorie B meme s'il clique sur Eléments à plat, clendrier, etc... Idem pour l'utilisateur Tutu qui ne pourra rien voir de la catégorie A. Est-ce que cela répond à ta question?
LucMorizur a écrit:
ai-je bien compris, si je dis que le "code" est une chaîne définie par l'admin qui sert juste à vérifier une corrspondance (pas un code genre celui du champ password de la table <prefix>_users) ?
En effet, tu peux choisir n'importe quel code... rien à voir avec la colonne password de la table des utilisateurs.
Pour faire un plugin à part entière, pourquoi pas, ca ne serait pas très compliqué...
Dernière modification par P@t (2009-05-11 19:28:32)
Hors ligne
Pour fignoler, une petite simplification du code qui évite de mettre les mots de passe
add_event_handler('init', 'auto_log_user');
function auto_log_user()
{
global $conf;
if (isset($_GET['log']) and isset($conf['auto_log']))
{
if (isset($conf['auto_log'][$_GET['log']]) and ($userid = get_userid($conf['auto_log'][$_GET['log']])))
{
log_user($userid, false);
redirect(make_index_url());
}
else
{
access_denied();
}
}
}
Et dans le config_local.inc.php:
$conf['auto_log'] = array(
'f71dbe52628a3f83a77ab494817525c6' => 'Toto',
'i51dbefd5g56d5t5hcx7ab494817525c6' => 'Tutu',
);
Dernière modification par P@t (2009-05-11 20:03:47)
Hors ligne
P@t a écrit:
La solution de Criss est bonne si tu veux avoir plusieurs utilisateurs (avec différents droits). C'est justement ce que j'allais proposer! ;-)
Décidément, il n'y a que des grands esprits ici ;-) !
Oui, j'imaginais plusieurs utilisateurs : le principe est de pouvoir proposer un URL par évènement, en gros. Le mariage de ma nièce : xxxx.fai.com/pwg/[code untel]... ; le concert du cousin : xxxx.fai.com/piwigo/[second code].... Avoir à "se loguer" (comment on dit ça de façon courte, en français ?!) pour profiter d'une catégorie n'est quasiment pas plus compliqué, mais ça change quand même les choses pour certaines personnes, qui sont apeurées s'il faut faire autre chose que cliquer.
LucMorizur, je ne suis pas sur que tu ais bien saisis le principe des catégories privées...
(...)
Est-ce que cela répond à ta question?
Tout-à-fait. Je n'avais effectivement pas compris cela (comme quoi tout n'est pas gagné en ce qui me concerne :-( ...). Dès lors, le principe d'une seconde galerie Piwigo, où toute la navigation de base est supprimée, est fortement remise en cause.
Pour faire un plugin à part entière, pourquoi pas, ca ne serait pas très compliqué...
D'autant qu'a priori, tous les .tpl perso que je m'étais fait, sont inutiles. Il y aurait juste, apparemment, le petit bout de code qui a été donné plus haut, plus l'explication concernant la table d'utiisateurs avec code.
Je dois faire qulques tests pour mieux cerner mes besoins, et je reviens ici.
Encore merci !
Luc
Hors ligne
D'autres réflexions/questions :
_ si plusieurs personnes parcourent une galerie en même temps, toutes connectées sous le même compte générique, est-ce que tout le monde est affecté si l'une d'elles choisit la langue anglaise par exemple (plugin Language Switch), ou change de thème (plugin Theme Switch) ? (Mais peut-être faudrait-il que je pose la question dans les topics de ces plugins ? J'ai cherché "générique" dans le forum extensions, je n'ai rien trouvé qui réponde à cette question. Mais le test est facile à faire (mais pas ce soir !).)
_ Les catégories privées, autorisées aux seuls comptes génériques qui y sont associés, c'est mon besoin. Ca, c'est déjà dans Piwigo. Se loguer sur un simple URL, c'est résolu.
Donc pour moi cette partie-là est OK.
Je rajoute deux besoins :
_ dans l'URL qu'on propose, une catégorie pour que le compte générique y soit redirigé immédiatement. Ca, c'est rien : l'URL serait
xxxx.fai.com/piwigo/index.php?cat=6&log=f71dbe52628a
et la méthode redirect intégrerait le paramètre cat ci-dessus.
_ que la personne qui utilise le compte générique sous lequel elle est identifiée grâce à l'URL fourni, ait la possibilité de se créer un nouveau compte, personnel celui-là, et auquel serait immédiatement affectés les droits du compte générique. En fait, c'est la possibilité d'hériter les droits du compte avec lequel on est identifié à un moment donné, lorsqu'on en crée un nouveau. Et personnellement j'aurais tendance à laisser ce lien actif pour tous les comptes : qu'une personne connue puisse créer un nouveau compte avec exactement les mêmes droits. Je pense qu'en réalisant un perso_index.tpl sur le modèle de index.tpl bien sûr, on doit pouvoir trouver le menu identification et y rajouter un lien vers la page register.php avec un paramètre genre user_id=. Par contre je serais étonné qu'il existe un register.tpl et qu'on puisse y intégrer le bout de code correspondant, qui ne serait pas trop compliqué, puisqu'il s'agirait d'une requête SQL lisant les droits du compte émetteur, et les recopiant dans les champs du compte destinataire (mais je mettrais quand même du temps à le faire si j'essayais !). Ah ben si tiens, y'a un register.tpl. Faudra que je le regadre de plus près çui-là. Et tiens, ben bien sûr, dans la discussion sur [Plugin] nbc UserAdvManager, on parle d'héritage...
Bon, ben j'ai du boulot pour demain soir...
Bonne nuit à tous !
Luc
Hors ligne
LucMorizur a écrit:
_ si plusieurs personnes parcourent une galerie en même temps, toutes connectées sous le même compte générique, est-ce que tout le monde est affecté si l'une d'elles choisit la langue anglaise par exemple (plugin Language Switch), ou change de thème (plugin Theme Switch) ? (Mais peut-être faudrait-il que je pose la question dans les topics de ces plugins ? J'ai cherché "générique" dans le forum extensions, je n'ai rien trouvé qui réponde à cette question. Mais le test est facile à faire (mais pas ce soir !).)
A priori, pas de soucis avec ces deux plugins si ton utilisateur est générique.
LucMorizur a écrit:
_ dans l'URL qu'on propose, une catégorie pour que le compte générique y soit redirigé immédiatement. Ca, c'est rien : l'URL serait
xxxx.fai.com/piwigo/index.php?cat=6&log=f71dbe52628a
et la méthode redirect intégrerait le paramètre cat ci-dessus.
Ca peut se faire... il faut adapter le code du plugin perso...
Par exemple comme ca:
add_event_handler('init', 'auto_log_user'); function auto_log_user() { global $conf; if (isset($_GET['log']) and isset($conf['auto_log'])) { if (isset($conf['auto_log'][$_GET['log']]) and ($userid = get_userid($conf['auto_log'][$_GET['log']]))) { log_user($userid, false); if (isset($_GET['cat']) and is_numeric($_GET['cat'])) { redirect(PHPWG_ROOT_PATH.'index.php?/category/'.$_GET['cat']); } else { redirect(make_index_url()); } } else { access_denied(); } } }
Il te suffira donc de rajouter dans l'URL un &cat=6 pour etre redirigé sur la catégorie 6.
LucMorizur a écrit:
_ que la personne qui utilise le compte générique sous lequel elle est identifiée grâce à l'URL fourni, ait la possibilité de se créer un nouveau compte, personnel celui-là, et auquel serait immédiatement affectés les droits du compte générique. En fait, c'est la possibilité d'hériter les droits du compte avec lequel on est identifié à un moment donné, lorsqu'on en crée un nouveau. Et personnellement j'aurais tendance à laisser ce lien actif pour tous les comptes : qu'une personne connue puisse créer un nouveau compte avec exactement les mêmes droits.
Il suffit de laisser quelque part un lien vers register.php. Par exemple dans le menubar, dans l'édito, etc...
Ensuite, il faudra lors de la création du nouvel utilisateur faire le transfert des droits, c'est à dire ce qui concerne la table user_access et la table user_group.
Cela nous donnera simplement en plugin perso:
add_event_handler('register_user', 'assign_perm_for_new_user'); function assign_perm_for_new_user($new_user) { global $user; if (!is_a_guest()) { // User access $query = 'SELECT cat_id FROM '.USER_ACCESS_TABLE.' WHERE user_id = '.$user['id'].';'; $result = pwg_query($query); $insert = array(); while ($row = mysql_fetch_assoc($result)) { $insert[] = '('.$new_user['id'].','.$row['cat_id'].')'; } if (!empty($insert)) { pwg_query('INSERT INTO '.USER_ACCESS_TABLE.' VALUES '.implode(',', $insert).';'); } // User groups $query = 'SELECT group_id FROM '.USER_GROUP_TABLE.' WHERE user_id = '.$user['id'].';'; $result = pwg_query($query); $insert = array(); while ($row = mysql_fetch_assoc($result)) { $insert[] = '('.$new_user['id'].','.$row['group_id'].')'; } if (!empty($insert)) { pwg_query('INSERT INTO '.USER_GROUP_TABLE.' VALUES '.implode(',', $insert).';'); } } }
Ainsi, un utilisateur générique qui s'enregistre via la page register.php aura automatiquement les meme droit avec le nouvel utilisateur créé.
Dernière modification par P@t (2009-05-12 01:57:51)
Hors ligne
... et enfin, juste le code pour gagner au loto. (Mais ça, en MP, stp P@t.)
Fantastique. J'essaie ça dès que je peux (faudrait quand même que je bosse un peu pour mon employeur, aussi...).
Merci énormément, P@t.
A très bientôt !
Luc
Hors ligne