add user and ip support to attachment pagespecs
parent
edfbd7e1aa
commit
ba707cdcd9
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue