]> sipb.mit.edu Git - ikiwiki.git/commitdiff
add user and ip support to attachment pagespecs
authorJoey Hess <joey@kodama.kitenet.net>
Wed, 2 Jul 2008 20:33:35 +0000 (16:33 -0400)
committerJoey Hess <joey@kodama.kitenet.net>
Wed, 2 Jul 2008 20:33:35 +0000 (16:33 -0400)
IkiWiki/Plugin/attachment.pm
doc/plugins/attachment.mdwn

index c1d1d1c6030f253d37c92a54731f7a256b090aae..a5c42d638a6651ac1796f6db973227a14482b371 100644 (file)
@@ -101,7 +101,10 @@ sub formbuilder (@) { #{{{
                            length $allowed_attachments) {
                                $allowed=pagespec_match($filename,
                                        $allowed_attachments,
-                                       file => $tempfile);
+                                       file => $tempfile,
+                                       user => $session->param("name"),
+                                       ip => $ENV{REMOTE_ADDR},
+                               );
                                last if $allowed;
                        }
                }
@@ -306,4 +309,38 @@ sub match_ispage ($$;@) { #{{{
        }
 } #}}}
 
+sub match_user ($$;@) { #{{{
+       shift;
+       my $user=shift;
+       my %params=@_;
+       
+       if (! exists $params{user}) {
+               return IkiWiki::FailReason->new("no user specified");
+       }
+
+       if (defined $params{user} && lc $params{user} eq lc $user) {
+               return IkiWiki::SuccessReason->new("user is $user");
+       }
+       else {
+               return IkiWiki::FailReason->new("user is $params{user}, not $user");
+       }
+} #}}}
+
+sub match_ip ($$;@) { #{{{
+       shift;
+       my $ip=shift;
+       my %params=@_;
+       
+       if (! exists $params{ip}) {
+               return IkiWiki::FailReason->new("no IP specified");
+       }
+
+       if (defined $params{ip} && lc $params{ip} eq lc $ip) {
+               return IkiWiki::SuccessReason->new("IP is $ip");
+       }
+       else {
+               return IkiWiki::FailReason->new("IP is $params{ip}, not $ip");
+       }
+} #}}}
+
 1
index 019d1c9e4c9bec9a4e62e84f5808c0ed35fb2293..184f5b5df55f2a71b1fa53281d8f931d16d45ee0 100644 (file)
@@ -22,13 +22,14 @@ Bear in mind that if you let anyone upload a particular kind of file
 
 To provide a way to combat these abuses, the wiki admin can specify a
 [[ikiwiki/PageSpec]] on their preferences page, to control what types of
-attachments can be uploaded. The regular [[ikiwiki/PageSpec]] syntax is
-expanded with additional tests.
+attachments can be uploaded, and by whom. The regular [[ikiwiki/PageSpec]]
+syntax is expanded with additional tests.
 
-For example, to limit arbitrary files to 50 kilobtes, but allow
-larger mp3 files to be uploaded, a test like this could be used:
+For example, to limit arbitrary files to 50 kilobytes, but allow
+larger mp3 files to be uploaded by joey, a test like this could be
+used:
   
-       (*.mp3 and maxsize(15mb)) or (!ispage() and maxsize(50kb))
+       (user(joey) and *.mp3 and maxsize(15mb)) or (!ispage() and maxsize(50kb))
 
 The following additional tests are available:
 
@@ -51,3 +52,13 @@ The following additional tests are available:
   So, if you don't want to allow wiki pages to be uploaded as attachments,
   use `!ispage()` ; if you only want to allow wiki pages to be uploaded
   as attachments, use `ispage()`.
+
+* user(username)
+
+  Tests whether the attachment is being uploaded by a user with the
+  specified username. If openid is enabled, an openid can also be put here.
+
+* ip(address)
+
+  Tests whether the attacment is being uploaded from the specified IP
+  address.