[dancer-users] Why does send_file() require a path relative to pubdir?
Warren Young
warren at etr-usa.com
Mon Mar 24 13:55:45 GMT 2014
Dancer::send_file() gives a "No such file" error if you pass it an
absolute path or one that is not directly relative to $pubdir.
I'm using send_file() to send dynamically generated PDF files to the
client from behind pretty routes. That is, I want '/pdf/foo.pdf' to
generate and send:
/home/me/app/pdfbuild/foo-$user-$yymmdd-$hhmmss.pdf
The generated PDF file has the user name in it so that other users don't
clobber each others' generated PDFs. The file name contains a timestamp
because the data that goes into the PDF changes frequently, so a second
access of the URL needs to re-generate the PDF.
Because of all this dynamic generation, I'm doing the background work in
this pdfbuild directory, because I don't want to expose the intermediate
files.
I've fixed this by putting the intermediate files in pdfbuild and the
final output PDF in .../pdfbuild/../public/pdf but this effectively
exposes all generated PDFs: any user can pull up any other user's
dynamic PDF if they know another user name and can make sensible guesses
about the timestamp. Obviously I could add a nonce to the file name to
make guessing impossible, but that's solving the symptom, rather than
attacking the actual source of the problem.
Why doesn't send_file() just return a binary blob to Dancer, which it
recognizes and inserts literally into the response content body? Why
does it care where on the filesystem that data comes from?
More information about the dancer-users
mailing list