X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/335a6a59e66ee7c2cf0c68c659259b885f7e8a07..bf8558f346f8c8592526f9707541da7b22012bac:/IkiWiki/CGI.pm diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm index 4cb45895b..a05043478 100644 --- a/IkiWiki/CGI.pm +++ b/IkiWiki/CGI.pm @@ -18,7 +18,6 @@ sub printheader ($) { #{{{ } else { print $session->header(-charset => 'utf-8'); } - } #}}} sub showform ($$$$;@) { #{{{ @@ -227,20 +226,27 @@ sub cgi_prefs ($$) { #{{{ $form->field(name => "sid", type => "hidden", value => $session->id, force => 1); $form->field(name => "email", size => 50, fieldset => "preferences"); - $form->field(name => "banned_users", size => 50, - fieldset => "admin"); my $user_name=$session->param("name"); + + # XXX deprecated, should be removed eventually + $form->field(name => "banned_users", size => 50, fieldset => "admin"); if (! is_admin($user_name)) { $form->field(name => "banned_users", type => "hidden"); } - if (! $form->submitted) { $form->field(name => "email", force => 1, value => userinfo_get($user_name, "email")); if (is_admin($user_name)) { - $form->field(name => "banned_users", force => 1, - value => join(" ", get_banned_users())); + my $value=join(" ", get_banned_users()); + if (length $value) { + $form->field(name => "banned_users", force => 1, + value => join(" ", get_banned_users()), + comment => "deprecated; please move to banned_users in setup file"); + } + else { + $form->field(name => "banned_users", type => "hidden"); + } } } @@ -258,12 +264,18 @@ sub cgi_prefs ($$) { #{{{ userinfo_set($user_name, 'email', $form->field('email')) || error("failed to set email"); } + + # XXX deprecated, should be removed eventually if (is_admin($user_name)) { set_banned_users(grep { ! is_admin($_) } split(' ', $form->field("banned_users"))) || error("failed saving changes"); + if (! length $form->field("banned_users")) { + $form->field(name => "banned_users", type => "hidden"); + } } + $form->text(gettext("Preferences saved.")); } @@ -638,6 +650,25 @@ sub cgi_editpage ($$) { #{{{ } } } #}}} + +sub check_banned ($$) { #{{{ + my $q=shift; + my $session=shift; + + my $name=$session->param("name"); + if (defined $name) { + # XXX banned in userinfo is deprecated, should be removed + # eventually, and only banned_users be checked. + if (userinfo_get($session->param("name"), "banned") || + grep { $name eq $_ } @{$config{banned_users}}) { + print $q->header(-status => "403 Forbidden"); + $session->delete(); + print gettext("You are banned."); + cgi_savesession($session); + exit; + } + } +} sub cgi_getsession ($) { #{{{ my $q=shift; @@ -722,14 +753,8 @@ sub cgi (;$$) { #{{{ } } - if (defined $session->param("name") && - userinfo_get($session->param("name"), "banned")) { - print $q->header(-status => "403 Forbidden"); - $session->delete(); - print gettext("You are banned."); - cgi_savesession($session); - } - + check_banned($q, $session); + run_hooks(sessioncgi => sub { shift->($q, $session) }); if ($do eq 'signin') { @@ -750,7 +775,7 @@ sub cgi (;$$) { #{{{ } } #}}} -# Does not need tobe called directly; all errors will go through here. +# Does not need to be called directly; all errors will go through here. sub cgierror ($) { #{{{ my $message=shift;