add user and ip support to attachment pagespecs

master
Joey Hess 2008-07-02 16:33:35 -04:00
parent edfbd7e1aa
commit ba707cdcd9
2 changed files with 54 additions and 6 deletions

View 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

View 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.