Show get_attachment.html syntax highlighted
% # vim: set syntax=mason:
<%args>
$file => -1
$type => -1
$subtype => -1
$suggested_name => -1
</%args>
<%init>
my $user;
my $prefix;
my $username;
eval {
$user = Apache2::SiteControl->getCurrentUser($r);
$prefix = $config->getScratchDir($user);
$username = $user->getUsername();
};
if($@) {
$logger->error("Unable to get attachment: $@");
$m->redirect(build_url("$base/mail/index.html", { message => "Request failed" }));
}
$file =~ s/\\/\\\\/g; # Un-escape escapes
if($file == -1) {
$m->redirect(build_url("$base/mail/index.html", { message => "No filename for attachment." }));
} elsif($file =~ m!(^|/)\.\./!) {
$logger->error("Security Violation! $username attempted to view $file. Prefix was $prefix");
$m->redirect(build_url("$base/mail/index.html", { message => "Security violation on filename $file" }));
}
$file = "$prefix/$file"; # Full path to tmp file.
$logger->debug("Getting attachment $file ($type/$subtype)");
$r->content_type("$type/$subtype");
$r->headers_out()->set('Content-Disposition' => qq(attachment; filename="$suggested_name"));
$file =~ s!//!/!g;
open DATA, "<$file" or $logger->logcroak("Could not open file: $file");
my $line;
while($line = <DATA>) {
$m->print($line);
}
close DATA;
# Just in case a timeout occured...we don't want renew_session causing another
# download. [Bug 412]
$user->setAttribute($r, 'intended_dest', "$base/mail/index.html");
$user->setAttribute($r, 'intended_args', [ ]);
</%init>
<%once>
use AlphaMail::HTMLHelper qw(build_url);
our $logger = Log::Log4perl->get_logger('alphamail');
our $base = $config->get('base_uri');
</%once>
See more files for this project here