From e6c8f9984b1a2dd371f15ecf367da05f0abf3923 Mon Sep 17 00:00:00 2001 From: Alex 'AdUser' Z Date: Mon, 14 Dec 2015 22:48:20 +1000 Subject: [PATCH] * ability to upload files to zerobin --- lib/LDV/Zerobin.pm | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/lib/LDV/Zerobin.pm b/lib/LDV/Zerobin.pm index dee86f4..25b5dc4 100644 --- a/lib/LDV/Zerobin.pm +++ b/lib/LDV/Zerobin.pm @@ -5,7 +5,7 @@ use warnings; use utf8; use JSON qw(encode_json decode_json); -use POSIX qw(strftime); +use POSIX qw(strftime tmpnam); use Mojo::Base 'Mojolicious::Controller'; use Mojo::Asset::File; use Mojo::Util qw(b64_encode b64_decode decode encode); @@ -61,10 +61,33 @@ sub save { my ($self) = @_; eval { + my $source = $self->req->param('source') || '-'; my $expire = $self->req->param('expire') || 30; # 1 month my $syntax = $self->req->param('syntax') || ''; - my $paste = $self->req->param('paste') || ''; - die("empty paste\n") unless $paste; + my $paste; + if ($source eq 'form') { + $paste = $self->req->param('paste') || ''; + die("empty paste\n") unless $paste; + } elsif ($source eq 'file') { + require File::MimeInfo::Magic; + my $tmpfile = tmpnam(); + my $maxsize = $self->app->config->{zerobin}->{maxsize}; + my $upload = $self->req->upload('file'); + die("empty uploaded file\n") + if $upload->size == 0; + die("uploaded file too large\n") + if $upload->size > $maxsize; + $upload->move_to($tmpfile); + $upload->asset->cleanup(1) + if $upload->asset->SUPER::can('cleanup'); + my $mime = File::MimeInfo::Magic::mimetype($tmpfile); + die("uploaded file not looks like text\n") + unless $mime =~ m{^text/}; + $paste = $upload->asset->slurp; + unlink $tmpfile; + } else { + die("unknown 'source'\n"); + } $expire = 30 unless ($expire =~ m|^\d+$|o); $syntax = 'auto' unless ($syntax =~ m|^[a-z0-9]+$|oi);