X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/0a37c45f32b6a0cf92eb046deabf933fb48ac197..0f8ea7ecca27a9e73af5c515f637f543912c7076:/IkiWiki/Plugin/attachment.pm?ds=sidebyside diff --git a/IkiWiki/Plugin/attachment.pm b/IkiWiki/Plugin/attachment.pm index 7af399fc0..6168ea589 100644 --- a/IkiWiki/Plugin/attachment.pm +++ b/IkiWiki/Plugin/attachment.pm @@ -8,7 +8,7 @@ use CGI; $CGI::DISABLE_UPLOADS=0; # TODO move to admin prefs -$config{valid_attachments}="(*.mp3 and maxsize(15mb)) or (* and maxsize(.50kb))"; +$config{valid_attachments}="(*.mp3 and maxsize(15mb)) or (!ispage() and maxsize(50kb))"; sub import { #{{{ hook(type => "formbuilder_setup", id => "attachment", call => \&formbuilder_setup); @@ -48,13 +48,15 @@ sub formbuilder (@) { #{{{ if (IkiWiki::file_pruned($filename, $config{srcdir})) { error(gettext("bad attachment filename")); } - - # Check that the attachment matches the configured - # pagespec. - my $result=pagespec_match($filename, $config{valid_attachments}, - tempfile => $tempfile); - if (! $result) { - error(gettext("attachment rejected")." ($result)"); + + # Use a pagespec to test that the attachment is valid. + if (exists $config{valid_attachments} && + length $config{valid_attachments}) { + my $result=pagespec_match($filename, $config{valid_attachments}, + file => $tempfile); + if (! $result) { + error(gettext("attachment rejected")." ($result)"); + } } my $fh=$q->upload('attachment'); @@ -75,20 +77,20 @@ sub parsesize { #{{{ no warnings; my $base=$size+0; # force to number use warnings; - my $exponent=1; + my $multiple=1; if ($size=~/kb?$/i) { - $exponent=10; + $multiple=2**10; } elsif ($size=~/mb?$/i) { - $exponent=20; + $multiple=2**20; } elsif ($size=~/gb?$/i) { - $exponent=30; + $multiple=2**30; } elsif ($size=~/tb?$/i) { - $exponent=40; + $multiple=2**40; } - return $base * 2**$exponent; + return $base * $multiple; } #}}} sub match_maxsize ($$;@) { #{{{ @@ -99,15 +101,15 @@ sub match_maxsize ($$;@) { #{{{ } my %params=@_; - if (! exists $params{tempfile}) { - return IkiWiki::FailReason->new("no tempfile specified"); + if (! exists $params{file}) { + return IkiWiki::FailReason->new("no file specified"); } - if (-s $params{tempfile} > $maxsize) { - return IkiWiki::FailReason->new("attachment too large"); + if (-s $params{file} > $maxsize) { + return IkiWiki::FailReason->new("file too large"); } else { - return IkiWiki::SuccessReason->new("attachment size ok"); + return IkiWiki::SuccessReason->new("file not too large"); } } #}}} @@ -119,15 +121,26 @@ sub match_minsize ($$;@) { #{{{ } my %params=@_; - if (! exists $params{tempfile}) { - return IkiWiki::FailReason->new("no tempfile specified"); + if (! exists $params{file}) { + return IkiWiki::FailReason->new("no file specified"); + } + + if (-s $params{file} < $minsize) { + return IkiWiki::FailReason->new("file too small"); } + else { + return IkiWiki::SuccessReason->new("file not too small"); + } +} #}}} + +sub match_ispage ($$;@) { #{{{ + my $filename=shift; - if (-s $params{tempfile} < $minsize) { - return IkiWiki::FailReason->new("attachment too small"); + if (IkiWiki::pagetype($filename)) { + return IkiWiki::SuccessReason->new("file is a wiki page"); } else { - return IkiWiki::SuccessReason->new("attachment size ok"); + return IkiWiki::FailReason->new("file is not a wiki page"); } } #}}}