]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki/CGI.pm
work around strange problem with banned_users
[git.ikiwiki.info.git] / IkiWiki / CGI.pm
index 287b1f5aa65a573990fc910ee22a4d9dc6106982..cf72bfdb9f7205d73dea69c5612a0941fbe5c839 100644 (file)
@@ -18,7 +18,6 @@ sub printheader ($) { #{{{
        } else {
                print $session->header(-charset => 'utf-8');
        }
        } else {
                print $session->header(-charset => 'utf-8');
        }
-
 } #}}}
 
 sub showform ($$$$;@) { #{{{
 } #}}}
 
 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 => "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");
        
        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 (! 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)) {
        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");
                }
                        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 (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."));
        }
        
                $form->text(gettext("Preferences saved."));
        }
        
@@ -365,7 +377,6 @@ sub cgi_editpage ($$) { #{{{
                htmllink($page, $page, "ikiwiki/formatting",
                        noimageinline => 1,
                        linktext => "FormattingHelp"));
                htmllink($page, $page, "ikiwiki/formatting",
                        noimageinline => 1,
                        linktext => "FormattingHelp"));
-       $form->tmpl_param("message", "");
        
        if ($form->submitted eq "Cancel") {
                if ($form->field("do") eq "create" && defined $from) {
        
        if ($form->submitted eq "Cancel") {
                if ($form->field("do") eq "create" && defined $from) {
@@ -639,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;
 
 sub cgi_getsession ($) { #{{{
        my $q=shift;
@@ -723,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') {
        run_hooks(sessioncgi => sub { shift->($q, $session) });
 
        if ($do eq 'signin') {