yearly/monthly history: return 404 for invalid dates

This commit is contained in:
Daniel Friesel 2022-12-26 15:35:33 +01:00
parent d0973a9d8d
commit f12bec530a
No known key found for this signature in database
GPG key ID: 100D5BFB5166E005
2 changed files with 63 additions and 54 deletions

View file

@ -1454,33 +1454,29 @@ sub yearly_history {
# -> Limit time range to avoid accidental DoS.
if ( not( $year =~ m{ ^ [0-9]{4} $ }x and $year > 1990 and $year < 2100 ) )
{
@journeys = $self->journeys->get(
uid => $self->current_user->{id},
with_datetime => 1
);
}
else {
my $interval_start = DateTime->new(
time_zone => 'Europe/Berlin',
year => $year,
month => 1,
day => 1,
hour => 0,
minute => 0,
second => 0,
);
my $interval_end = $interval_start->clone->add( years => 1 );
@journeys = $self->journeys->get(
uid => $self->current_user->{id},
after => $interval_start,
before => $interval_end,
with_datetime => 1
);
$stats = $self->journeys->get_stats(
uid => $self->current_user->{id},
year => $year
);
$self->render('not_found');
return;
}
my $interval_start = DateTime->new(
time_zone => 'Europe/Berlin',
year => $year,
month => 1,
day => 1,
hour => 0,
minute => 0,
second => 0,
);
my $interval_end = $interval_start->clone->add( years => 1 );
@journeys = $self->journeys->get(
uid => $self->current_user->{id},
after => $interval_start,
before => $interval_end,
with_datetime => 1
);
$stats = $self->journeys->get_stats(
uid => $self->current_user->{id},
year => $year
);
$self->respond_to(
json => {
@ -1519,34 +1515,30 @@ sub monthly_history {
and $month < 13 )
)
{
@journeys = $self->journeys->get(
uid => $self->current_user->{id},
with_datetime => 1
);
}
else {
my $interval_start = DateTime->new(
time_zone => 'Europe/Berlin',
year => $year,
month => $month,
day => 1,
hour => 0,
minute => 0,
second => 0,
);
my $interval_end = $interval_start->clone->add( months => 1 );
@journeys = $self->journeys->get(
uid => $self->current_user->{id},
after => $interval_start,
before => $interval_end,
with_datetime => 1
);
$stats = $self->journeys->get_stats(
uid => $self->current_user->{id},
year => $year,
month => $month
);
$self->render('not_found');
return;
}
my $interval_start = DateTime->new(
time_zone => 'Europe/Berlin',
year => $year,
month => $month,
day => 1,
hour => 0,
minute => 0,
second => 0,
);
my $interval_end = $interval_start->clone->add( months => 1 );
@journeys = $self->journeys->get(
uid => $self->current_user->{id},
after => $interval_start,
before => $interval_end,
with_datetime => 1
);
$stats = $self->journeys->get_stats(
uid => $self->current_user->{id},
year => $year,
month => $month
);
$self->respond_to(
json => {

View file

@ -3,7 +3,24 @@
% if (stash('statistics')) {
%= include '_history_stats', stats => stash('statistics');
% }
%
<div class="row">
% if (stash('have_review')) {
<div class="col s12 m12 l5 center-align">
<a href="/history/map?filter_after=1.1.<%= $year %>&amp;filter_before=31.12.<%= $year %>" class="waves-effect waves-light btn"><i class="material-icons left" aria-hidden="true">map</i> Karte</a>
</div>
<div class="col s12 m12 l2">&nbsp;</div>
<div class="col s12 m12 l5 center-align">
<a href="/history/<%= $year %>/review" class="waves-effect waves-light btn"><i class="material-icons left" aria-hidden="true">camera_roll</i> Rückblick</a>
</div>
% }
% else {
<div class="col s12 m12 l12 center-align">
<a href="/history/map?filter_after=1.1.<%= $year %>&amp;filter_before=31.12.<%= $year %>" class="waves-effect waves-light btn"><i class="material-icons left" aria-hidden="true">map</i> Karte</a>
</div>
% }
</div>
%= include '_history_months_for_year';
% if (stash('journeys')) {