|
|
@ -4,9 +4,9 @@ use strict; |
|
|
|
use warnings; |
|
|
|
use warnings; |
|
|
|
use utf8; |
|
|
|
use utf8; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
use JSON qw(encode_json decode_json); |
|
|
|
use POSIX qw(strftime); |
|
|
|
use POSIX qw(strftime); |
|
|
|
use Mojo::Base 'Mojolicious::Controller'; |
|
|
|
use Mojo::Base 'Mojolicious::Controller'; |
|
|
|
use Mojo::JSON; |
|
|
|
|
|
|
|
use Mojo::Asset::File; |
|
|
|
use Mojo::Asset::File; |
|
|
|
use Mojo::Util qw(b64_encode b64_decode decode encode); |
|
|
|
use Mojo::Util qw(b64_encode b64_decode decode encode); |
|
|
|
|
|
|
|
|
|
|
@ -40,7 +40,7 @@ sub view |
|
|
|
my $path = $self->_paste_path($time); |
|
|
|
my $path = $self->_paste_path($time); |
|
|
|
die("paste not found\n") unless (-f $path); |
|
|
|
die("paste not found\n") unless (-f $path); |
|
|
|
my $asset = Mojo::Asset::File->new(path => $path); |
|
|
|
my $asset = Mojo::Asset::File->new(path => $path); |
|
|
|
my $json = Mojo::JSON->new->decode($asset->slurp()); |
|
|
|
my $json = decode_json($asset->slurp()); |
|
|
|
$json->{data} = decode('UTF-8', b64_decode($json->{data})); |
|
|
|
$json->{data} = decode('UTF-8', b64_decode($json->{data})); |
|
|
|
if (time() > $json->{expire}) { |
|
|
|
if (time() > $json->{expire}) { |
|
|
|
unlink($path); |
|
|
|
unlink($path); |
|
|
@ -78,7 +78,7 @@ sub save |
|
|
|
data => b64_encode(encode('UTF-8', $paste)), |
|
|
|
data => b64_encode(encode('UTF-8', $paste)), |
|
|
|
}; |
|
|
|
}; |
|
|
|
my $asset = Mojo::Asset::File->new; |
|
|
|
my $asset = Mojo::Asset::File->new; |
|
|
|
$asset->add_chunk(Mojo::JSON->new->encode($json)); |
|
|
|
$asset->add_chunk(encode_json($json)); |
|
|
|
$asset->move_to($self->_paste_path($time)); |
|
|
|
$asset->move_to($self->_paste_path($time)); |
|
|
|
$self->redirect_to("/zerobin2/$time"); 1; |
|
|
|
$self->redirect_to("/zerobin2/$time"); 1; |
|
|
|
} or do { |
|
|
|
} or do { |
|
|
@ -101,13 +101,12 @@ sub prune |
|
|
|
my $time = time(); |
|
|
|
my $time = time(); |
|
|
|
my $storage = $self->app->config->{zerobin}->{root}; |
|
|
|
my $storage = $self->app->config->{zerobin}->{root}; |
|
|
|
my $files = $self->app->home->list_files($storage); |
|
|
|
my $files = $self->app->home->list_files($storage); |
|
|
|
my $json = Mojo::JSON->new; |
|
|
|
|
|
|
|
foreach my $file (@$files) { |
|
|
|
foreach my $file (@$files) { |
|
|
|
next unless $file =~ m/^(\d+)\.json$/oi; |
|
|
|
next unless $file =~ m/^(\d+)\.json$/oi; |
|
|
|
my $time = $1; |
|
|
|
my $time = $1; |
|
|
|
my $path = $self->app->home->rel_file("$storage/$file"); |
|
|
|
my $path = $self->app->home->rel_file("$storage/$file"); |
|
|
|
my $asset = Mojo::Asset::File->new(path => $path); |
|
|
|
my $asset = Mojo::Asset::File->new(path => $path); |
|
|
|
my $data = $json->decode($asset->slurp); |
|
|
|
my $data = decode_json($asset->slurp); |
|
|
|
next if ($data->{expire} > $time); # not yet |
|
|
|
next if ($data->{expire} > $time); # not yet |
|
|
|
my $date = strftime("%Y-%m-%d %H:%M", localtime($data->{expire})); |
|
|
|
my $date = strftime("%Y-%m-%d %H:%M", localtime($data->{expire})); |
|
|
|
$self->app->log->info("Removing expired paste: $file ($date)"); |
|
|
|
$self->app->log->info("Removing expired paste: $file ($date)"); |
|
|
|