From: Joey Hess Date: Thu, 9 Jun 2011 14:08:02 +0000 (-0400) Subject: userlist: New plugin, lets admins see a list of users and their info. X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=cf707d16541c0f65519231c1ccc9a6c3a7ed8d62;p=ikiwiki.git userlist: New plugin, lets admins see a list of users and their info. --- diff --git a/IkiWiki/Plugin/userlist.pm b/IkiWiki/Plugin/userlist.pm new file mode 100644 index 000000000..f3e5cd462 --- /dev/null +++ b/IkiWiki/Plugin/userlist.pm @@ -0,0 +1,73 @@ +#!/usr/bin/perl +package IkiWiki::Plugin::userlist; + +use warnings; +use strict; +use IkiWiki 3.00; + +sub import { + hook(type => "getsetup", id => "userlist", call => \&getsetup); + hook(type => "sessioncgi", id => "userlist", call => \&sessioncgi); + hook(type => "formbuilder_setup", id => "userlist", + call => \&formbuilder_setup); +} + +sub getsetup () { + return + plugin => { + safe => 1, + rebuild => 0, + section => "web", + }, +} + +sub sessioncgi ($$) { + my $cgi=shift; + my $session=shift; + + if ($cgi->param("do") eq "userlist") { + showuserlist($cgi, $session); + exit; + } +} + +sub formbuilder_setup (@) { + my %params=@_; + + my $form=$params{form}; + if ($form->title eq "preferences" && + IkiWiki::is_admin($params{session}->param("name"))) { + push @{$params{buttons}}, "Users"; + if ($form->submitted && $form->submitted eq "Users") { + showuserlist($params{cgi}, $params{session}); + exit; + } + } +} + +sub showuserlist ($$) { + my $q=shift; + my $session=shift; + + IkiWiki::needsignin($q, $session); + if (! defined $session->param("name") || + ! IkiWiki::is_admin($session->param("name"))) { + error(gettext("you are not logged in as an admin")); + } + + my $h="\n"; + $h.="\n"; + my $info=IkiWiki::userinfo_retrieve(); + if (ref $info) { + foreach my $user (sort { $info->{$a}->{regdate} <=> $info->{$b}->{regdate} } keys %$info) { + my %i=%{$info->{$user}}; + $h.="\n"; + } + } + $h.="
".gettext("login")."".gettext("email")."
$user".(defined $i{email} ? $i{email} : "")."
\n"; + + IkiWiki::printheader($session); + print IkiWiki::cgitemplate(undef, gettext("Users"), $h); +} + +1 diff --git a/debian/changelog b/debian/changelog index 2a21cfe27..4b03db600 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +ikiwiki (3.20110609) UNRELEASED; urgency=low + + * userlist: New plugin, lets admins see a list of users and their info. + + -- Joey Hess Thu, 09 Jun 2011 10:06:44 -0400 + ikiwiki (3.20110608) unstable; urgency=high * ikiwiki-mass-rebuild: Fix tty hijacking vulnerability by using su. diff --git a/doc/plugins/userlist.mdwn b/doc/plugins/userlist.mdwn new file mode 100644 index 000000000..1d3d38303 --- /dev/null +++ b/doc/plugins/userlist.mdwn @@ -0,0 +1,6 @@ +[[!template id=plugin name=userlist core=0 author="[[Joey]]"]] +[[!tag type/web]] + +This plugin allows wiki admins to see a list of users who have recently +used the wiki. This can be helpful to find openids of users to grant +permissions, or in dealing with spam.