X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/903213e63fd6c409046f66e73881aba33c3926de..69e35d3c515cd30c9baf82468008d0b0643e1e1f:/IkiWiki/Plugin/attachment.pm?ds=sidebyside diff --git a/IkiWiki/Plugin/attachment.pm b/IkiWiki/Plugin/attachment.pm index 404ca07fa..c78a1c177 100644 --- a/IkiWiki/Plugin/attachment.pm +++ b/IkiWiki/Plugin/attachment.pm @@ -18,13 +18,6 @@ sub getsetup () { #{{{ safe => 1, rebuild => 0, }, - virus_checker => { - type => "string", - example => "clamdscan -", - description => "virus checker program (reads STDIN, returns nonzero if virus found)", - safe => 0, # executed - rebuild => 0, - }, allowed_attachments => { type => "pagespec", example => "virusfree() and mimetype(image/*) and maxsize(50kb)", @@ -33,6 +26,13 @@ sub getsetup () { #{{{ safe => 1, rebuild => 0, }, + virus_checker => { + type => "string", + example => "clamdscan -", + description => "virus checker program (reads STDIN, returns nonzero if virus found)", + safe => 0, # executed + rebuild => 0, + }, } #}}} sub check_canattach ($$;$) { #{{{ @@ -42,7 +42,8 @@ sub check_canattach ($$;$) { #{{{ # Don't allow an attachment to be uploaded with the same name as an # existing page. - if (exists $pagesources{$dest} && $pagesources{$dest} ne $dest) { + if (exists $IkiWiki::pagesources{$dest} && + $IkiWiki::pagesources{$dest} ne $dest) { error(sprintf(gettext("there is already a page named %s"), $dest)); } @@ -143,7 +144,7 @@ sub formbuilder_setup (@) { #{{{ IkiWiki::userinfo_set($user_name, "allowed_attachments", $form->field("allowed_attachments")) || error("failed to set allowed_attachments"); - if (length $form->field("allowed_attachments")) { + if (! length $form->field("allowed_attachments")) { $form->field(name => "allowed_attachments", type => "hidden"); } } @@ -349,19 +350,20 @@ sub humansize ($) { #{{{ package IkiWiki::PageSpec; sub match_maxsize ($$;@) { #{{{ - shift; + my $page=shift; my $maxsize=eval{IkiWiki::Plugin::attachment::parsesize(shift)}; if ($@) { return IkiWiki::FailReason->new("unable to parse maxsize (or number too large)"); } my %params=@_; - if (! exists $params{file}) { + my $file=exists $params{file} ? $params{file} : $IkiWiki::pagesources{$page}; + if (! defined $file) { return IkiWiki::FailReason->new("no file specified"); } - if (-s $params{file} > $maxsize) { - return IkiWiki::FailReason->new("file too large (".(-s $params{file})." > $maxsize)"); + if (-s $file > $maxsize) { + return IkiWiki::FailReason->new("file too large (".(-s $file)." > $maxsize)"); } else { return IkiWiki::SuccessReason->new("file not too large"); @@ -369,18 +371,19 @@ sub match_maxsize ($$;@) { #{{{ } #}}} sub match_minsize ($$;@) { #{{{ - shift; + my $page=shift; my $minsize=eval{IkiWiki::Plugin::attachment::parsesize(shift)}; if ($@) { return IkiWiki::FailReason->new("unable to parse minsize (or number too large)"); } my %params=@_; - if (! exists $params{file}) { + my $file=exists $params{file} ? $params{file} : $IkiWiki::pagesources{$page}; + if (! defined $file) { return IkiWiki::FailReason->new("no file specified"); } - if (-s $params{file} < $minsize) { + if (-s $file < $minsize) { return IkiWiki::FailReason->new("file too small"); } else { @@ -389,11 +392,12 @@ sub match_minsize ($$;@) { #{{{ } #}}} sub match_mimetype ($$;@) { #{{{ - shift; + my $page=shift; my $wanted=shift; my %params=@_; - if (! exists $params{file}) { + my $file=exists $params{file} ? $params{file} : $IkiWiki::pagesources{$page}; + if (! defined $file) { return IkiWiki::FailReason->new("no file specified"); } @@ -403,7 +407,7 @@ sub match_mimetype ($$;@) { #{{{ if ($@) { return IkiWiki::FailReason->new("failed to load File::MimeInfo::Magic ($@); cannot check MIME type"); } - my $mimetype=File::MimeInfo::Magic::magic($params{file}); + my $mimetype=File::MimeInfo::Magic::magic($file); if (! defined $mimetype) { $mimetype="unknown"; } @@ -418,11 +422,12 @@ sub match_mimetype ($$;@) { #{{{ } #}}} sub match_virusfree ($$;@) { #{{{ - shift; + my $page=shift; my $wanted=shift; my %params=@_; - if (! exists $params{file}) { + my $file=exists $params{file} ? $params{file} : $IkiWiki::pagesources{$page}; + if (! defined $file) { return IkiWiki::FailReason->new("no file specified"); } @@ -436,7 +441,7 @@ sub match_virusfree ($$;@) { #{{{ # used, clamd would fail to read it. eval q{use IPC::Open2}; error($@) if $@; - open (IN, "<", $params{file}) || return IkiWiki::FailReason->new("failed to read file"); + open (IN, "<", $file) || return IkiWiki::FailReason->new("failed to read file"); binmode(IN); my $sigpipe=0; $SIG{PIPE} = sub { $sigpipe=1 };