mirror of
https://framagit.org/fiat-tux/hat-softwares/lutim.git
synced 2026-07-06 09:51:01 +02:00
Fix #28
This commit is contained in:
+19
-4
@@ -27,6 +27,7 @@ sub startup {
|
||||
https => 0,
|
||||
default_delay => 0,
|
||||
max_delay => 0,
|
||||
token_length => 24,
|
||||
}
|
||||
});
|
||||
|
||||
@@ -117,7 +118,8 @@ sub startup {
|
||||
counter => 0,
|
||||
enabled => 1,
|
||||
delete_at_first_view => 0,
|
||||
delete_at_day => 0
|
||||
delete_at_day => 0,
|
||||
mod_token => $c->shortener($c->config->{token_length})
|
||||
);
|
||||
LutimModel->commit;
|
||||
}
|
||||
@@ -243,6 +245,15 @@ sub startup {
|
||||
}
|
||||
);
|
||||
|
||||
$self->helper(
|
||||
delete_image => sub {
|
||||
my $c = shift;
|
||||
my $image = shift;
|
||||
unlink $image->path();
|
||||
$image->update(enabled => 0);
|
||||
}
|
||||
);
|
||||
|
||||
$self->hook(
|
||||
before_dispatch => sub {
|
||||
my $c = shift;
|
||||
@@ -280,9 +291,9 @@ sub startup {
|
||||
}
|
||||
);
|
||||
|
||||
$self->asset('index.css' => 'css/bootstrap.min.css', 'css/fontello.css', 'css/animation.css', 'css/uploader.css', 'css/hennypenny.css', 'css/lutim.css');
|
||||
$self->asset('stats.css' => 'css/bootstrap.min.css', 'css/fontello.css', 'css/animation.css', 'css/morris-0.4.3.min.css', 'css/hennypenny.css', 'css/lutim.css');
|
||||
$self->asset('about.css' => 'css/bootstrap.min.css', 'css/fontello.css', 'css/animation.css', 'css/hennypenny.css', 'css/lutim.css');
|
||||
$self->asset('index.css' => 'css/bootstrap.min.css', 'css/fontello-embedded.css', 'css/animation.css', 'css/uploader.css', 'css/hennypenny.css', 'css/lutim.css');
|
||||
$self->asset('stats.css' => 'css/bootstrap.min.css', 'css/fontello-embedded.css', 'css/animation.css', 'css/morris-0.4.3.min.css', 'css/hennypenny.css', 'css/lutim.css');
|
||||
$self->asset('about.css' => 'css/bootstrap.min.css', 'css/fontello-embedded.css', 'css/animation.css', 'css/hennypenny.css', 'css/lutim.css');
|
||||
|
||||
$self->asset('index.js' => 'js/jquery-2.1.0.min.js', 'js/bootstrap.min.js', 'js/lutim.js', 'js/dmuploader.min.js');
|
||||
$self->asset('stats.js' => 'js/jquery-2.1.0.min.js', 'js/bootstrap.min.js', 'js/lutim.js', 'js/raphael-min.js', 'js/morris-0.4.3.min.js', 'js/stats.js');
|
||||
@@ -316,6 +327,10 @@ sub startup {
|
||||
to('Controller#add')->
|
||||
name('add');
|
||||
|
||||
$r->get('/d/:short/:token')->
|
||||
to('Controller#delete')->
|
||||
name('delete');
|
||||
|
||||
$r->get('/:short')->
|
||||
to('Controller#short')->
|
||||
name('short');
|
||||
|
||||
+52
-13
@@ -46,6 +46,41 @@ sub stats {
|
||||
);
|
||||
}
|
||||
|
||||
sub delete {
|
||||
my $c = shift;
|
||||
my $short = $c->param('short');
|
||||
my $token = $c->param('token');
|
||||
|
||||
my @images = LutimModel::Lutim->select('WHERE short = ? AND path IS NOT NULL', $short);
|
||||
if (scalar(@images)) {
|
||||
my $image = $images[0];
|
||||
my $msg;
|
||||
if ($image->mod_token() ne $token) {
|
||||
$msg = $c->l('invalid_token');
|
||||
} elsif ($image->enabled() == 0) {
|
||||
$msg = $c->l('already_deleted', $image->filename);
|
||||
} else {
|
||||
$c->app->log->info('[DELETION] someone made '.$image->filename.' removed with token method (path: '.$image->path.')');
|
||||
|
||||
$c->delete_image($image);
|
||||
$c->flash(
|
||||
success => $c->l('image_deleted', $image->filename)
|
||||
);
|
||||
return $c->redirect_to('/');
|
||||
}
|
||||
|
||||
$c->flash(
|
||||
msg => $msg
|
||||
);
|
||||
return $c->redirect_to('/');
|
||||
} else {
|
||||
$c->app->log->info('[UNSUCCESSFUL] someone tried to delete '.$short.' but it does\'nt exist.');
|
||||
|
||||
# Image never existed
|
||||
$c->render_not_found;
|
||||
}
|
||||
}
|
||||
|
||||
sub add {
|
||||
my $c = shift;
|
||||
my $upload = $c->param('file');
|
||||
@@ -133,7 +168,7 @@ sub add {
|
||||
|
||||
my $ip = $c->ip;
|
||||
|
||||
my ($msg, $short, $thumb);
|
||||
my ($msg, $short, $real_short, $token, $thumb);
|
||||
# Check file type
|
||||
if (index($mediatype, 'image/') >= 0) {
|
||||
# Create directory if needed
|
||||
@@ -190,8 +225,10 @@ sub add {
|
||||
$c->app->log->info('[CREATION] '.$ip.' pushed '.$filename.' (path: '.$path.')');
|
||||
|
||||
# Give url to user
|
||||
$short = $records[0]->short;
|
||||
$short .= '/'.$key if (defined($key));
|
||||
$short = $records[0]->short;
|
||||
$real_short = $short;
|
||||
$token = $records[0]->mod_token;
|
||||
$short .= '/'.$key if (defined($key));
|
||||
} else {
|
||||
# Houston, we have a problem
|
||||
$msg = $c->l('no_more_short', $c->config->{contact});
|
||||
@@ -205,9 +242,11 @@ sub add {
|
||||
if (defined($c->param('format')) && $c->param('format') eq 'json') {
|
||||
if (defined($short)) {
|
||||
$msg = {
|
||||
filename => $upload->filename,
|
||||
short => $short,
|
||||
thumb => $thumb
|
||||
filename => $upload->filename,
|
||||
short => $short,
|
||||
real_short => $real_short,
|
||||
token => $token,
|
||||
thumb => $thumb
|
||||
};
|
||||
} else {
|
||||
$msg = {
|
||||
@@ -227,9 +266,11 @@ sub add {
|
||||
$c->flash(filename => $upload->filename);
|
||||
return $c->redirect_to('/');
|
||||
} else {
|
||||
$c->stash(short => $short) if (defined($short));
|
||||
$c->stash(thumb => $thumb);
|
||||
$c->stash(filename => $upload->filename);
|
||||
$c->stash(short => $short) if (defined($short));
|
||||
$c->stash(real_short => $real_short);
|
||||
$c->stash(token => $token);
|
||||
$c->stash(thumb => $thumb);
|
||||
$c->stash(filename => $upload->filename);
|
||||
return $c->render(
|
||||
template => 'index',
|
||||
max_file_size => $c->req->max_message_size
|
||||
@@ -270,8 +311,7 @@ sub short {
|
||||
$c->app->log->info('[DELETION] someone tried to view '.$images[0]->filename.' but it has been removed by expiration (path: '.$images[0]->path.')');
|
||||
|
||||
# Delete image
|
||||
unlink $images[0]->path();
|
||||
$images[0]->update(enabled => 0);
|
||||
$c->delete_image($images[0]);
|
||||
|
||||
# Warn user
|
||||
$c->flash(
|
||||
@@ -318,8 +358,7 @@ sub short {
|
||||
$c->app->log->info('[DELETION] someone made '.$images[0]->filename.' removed (path: '.$images[0]->path.')');
|
||||
|
||||
# Delete image
|
||||
unlink $images[0]->path();
|
||||
$images[0]->update(enabled => 0);
|
||||
$c->delete_image($images[0]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -43,6 +43,7 @@ our %Lexicon = (
|
||||
'view-link' => 'View link',
|
||||
'download-link' => 'Download link',
|
||||
'twitter-link' => 'Link for put in a tweet',
|
||||
'delete-link' => 'Deletion link',
|
||||
'some-bad' => 'Something bad happened',
|
||||
'delete-first' => 'Delete at first view?',
|
||||
'delete-day' => 'Delete after 24 hours?',
|
||||
@@ -52,7 +53,7 @@ our %Lexicon = (
|
||||
'drag-n-drop' => 'Drag & drop images here',
|
||||
'or' => '-or-',
|
||||
'file-browser' => 'Click to open the file browser',
|
||||
'image_not_found' => 'Unable to find the image',
|
||||
'image_not_found' => 'Unable to find the image: it has been deleted.',
|
||||
'no_more_short' => 'There is no more available URL. Retry or contact the administrator. [_1]',
|
||||
'no_valid_file' => 'The file [_1] is not an image.',
|
||||
'file_too_big' => 'The file exceed the size limit ([_1])',
|
||||
@@ -77,6 +78,9 @@ our %Lexicon = (
|
||||
'max_delay' => 'Warning! The maximum time limit for an image is [_1] day(s), even if you choose "no time limit".',
|
||||
'crypt_image' => 'Encrypt the image (Lutim does not keep the key).',
|
||||
'always_encrypt' => 'The images are encrypted on the server (Lutim does not keep the key).',
|
||||
'image_deleted' => 'The image [_1] has been successfully deleted',
|
||||
'invalid_token' => 'The delete token is invalid.',
|
||||
'already_deleted' => 'The image [_1] has already been deleted.',
|
||||
);
|
||||
|
||||
1;
|
||||
|
||||
@@ -43,6 +43,7 @@ our %Lexicon = (
|
||||
'view-link' => 'Lien d\'affichage',
|
||||
'download-link' => 'Lien de téléchargement',
|
||||
'twitter-link' => 'Lien pour mettre dans un tweet',
|
||||
'delete-link' => 'Lien de suppression',
|
||||
'some-bad' => 'Un problème est survenu',
|
||||
'delete-first' => 'Supprimer au premier accès ?',
|
||||
'delete-day' => 'Supprimer après 24 heures ?',
|
||||
@@ -52,7 +53,7 @@ our %Lexicon = (
|
||||
'drag-n-drop' => 'Déposez vos images ici',
|
||||
'or' => '-ou-',
|
||||
'file-browser' => 'Cliquez pour utiliser le navigateur de fichier',
|
||||
'image_not_found' => 'Impossible de trouver l\'image',
|
||||
'image_not_found' => 'Impossible de trouver l\'image : elle a été supprimée.',
|
||||
'no_more_short' => 'Il n\'y a plus d\'URL disponible. Veuillez réessayer ou contactez l\'administrateur. [_1].',
|
||||
'no_valid_file' => 'Le fichier [_1] n\'est pas une image.',
|
||||
'file_too_big' => 'Le fichier dépasse la limite de taille ([_1])',
|
||||
@@ -77,6 +78,9 @@ our %Lexicon = (
|
||||
'max_delay' => 'Attention ! Le délai maximal de rétention d\'une image est de [_1] jour(s), même si vous choisissez « pas de limitation de durée ».',
|
||||
'crypt_image' => 'Chiffrer l\'image (Lutim ne stocke pas la clé).',
|
||||
'always_encrypt' => 'Les images sont chiffrées sur le serveur (Lutim ne stocke pas la clé).',
|
||||
'image_deleted' => 'L\'image [_1] a été supprimée avec succès.',
|
||||
'invalid_token' => 'Le jeton de suppression est invalide.',
|
||||
'already_deleted' => 'L\'image [_1] a déjà été supprimée.',
|
||||
);
|
||||
|
||||
1;
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ use ORLite {
|
||||
created_at INTEGER,
|
||||
created_by TEXT,
|
||||
last_access_at INTEGER,
|
||||
last_access_by INTEGER)'
|
||||
mod_token TEXT)'
|
||||
);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -13,8 +13,7 @@ sub run {
|
||||
my @images = LutimModel::Lutim->select('WHERE enabled = 1 AND (delete_at_day * 86400) < (? - created_at) AND delete_at_day != 0', $time);
|
||||
|
||||
for my $image (@images) {
|
||||
$image->update(enabled => 0);
|
||||
unlink $image->path();
|
||||
$c->app->delete_image($image);
|
||||
}
|
||||
|
||||
my $config = $c->app->plugin('Config');
|
||||
@@ -24,8 +23,7 @@ sub run {
|
||||
@images = LutimModel::Lutim->select('WHERE enabled = 1 AND last_access_at < ?', $time);
|
||||
|
||||
for my $image (@images) {
|
||||
$image->update(enabled => 0);
|
||||
unlink $image->path();
|
||||
$c->app->delete_image($image);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user