Show view_attachment.html syntax highlighted
% # vim: set syntax=mason:
<%args>
$file
$type
$subtype
$mode => "normal"
</%args>
<%init>
my $user = Apache::SiteControl->getCurrentUser($r);
my $logger = Log::Log4perl->get_logger('alphamail');
my $sandbox = $config->get("sandbox_util");
my $sandbox_dir = $config->get("sandbox");
my $jpegtopnm = $config->get("jpegtopnm");
my $pnmtojpeg = $config->get("pnmtojpeg");
my $pnmscale = $config->get("pnmscale");
my $giftopnm = $config->get("giftopnm");
my $tifftopnm = $config->get("tifftopnm");
my $pngtopnm = $config->get("pngtopnm");
my $iconsize = $config->get("iconsize");
my $prefix = $config->get("message_tmpdir", '/tmp');
my $username = $user->getUsername();
my $cachetime = $config->get("message_tmpdir_cachetime", 10) . ' min';
my $legal_files = $user->getAttribute('imap') . "_" . $username;
if($file !~ m/^\/\Q$legal_files\E/i || $file =~ m!/\.\./!) {
$logger->logcroak("Security Violation! $username attempted to view $file. Prefix was $prefix");
}
$file = $prefix . $file; # Full path to tmp file.
$subtype = lc($subtype);
$subtype = "tiff" if $subtype eq 'tif';
my $line;
my %converters = ( jpeg => $jpegtopnm,
gif => $giftopnm,
tiff => $tifftopnm,
png => $pngtopnm,
pnm => "cat" # FIXME
);
my $converter = $converters{$subtype};
$logger->debug("Running in $mode mode with $type/$subtype on $file");
if($mode eq "shrink" && $type eq "image" && $converter) {
$r->content_type("$type/$subtype");
# cache icons
my $key = "${file}_${type}_${subtype}";
my $icon = $m->cache->get($key);
if(!defined($icon)) {
$logger->debug("tring to convert using: $sandbox $converter < '$file' | $sandbox $pnmscale -ysize $iconsize | $sandbox $pnmtojpeg|");
# The redirection happens before sandbox runs. That is OK, since the fds
# are passed along for the ride...no need to use the tmp dir in sandbox.
open DATA, "$sandbox $converter < '$file' | $sandbox $pnmscale -ysize $iconsize | $sandbox $pnmtojpeg|" or $logger->error("problem running: $sandbox $converter < $file | $sandbox $pnmscale -ysize $iconsize | $sandbox $pnmtojpeg|");
while($line = <DATA>) {
$icon .= $line;
$m->print($line);
}
close DATA;
$m->cache->set($key, $icon, $cachetime);
$logger->debug("Cached $file icon for later use.");
} else {
$logger->debug("Using cached icon for $file.");
$m->print($icon);
}
} elsif($type eq "image" && $converter && $subtype =~ m/^(tiff|png)$/) {
# Convert to better format for browser
$logger->debug("Converting $file to JPEG for browser compatibility");
$r->content_type("image/jpeg");
open DATA, "$sandbox $converter < '$file' | $sandbox $pnmtojpeg|" or $logger->error("problem converting file: $sandbox $converter < $file | $sandbox $pnmtojpeg|");
while($line = <DATA>) {
$m->print($line);
}
close DATA;
} else {
$logger->debug("Sending $file unmodified");
$r->content_type("$type/$subtype");
open DATA, "<$file" or $logger->error("No such file: $file");
while($line = <DATA>) {
$m->print($line);
}
close DATA;
}
</%init>
See more files for this project here