Add some robustness against bogus parameters.

This commit is contained in:
barnold 2022-09-20 10:15:59 +01:00
parent a12aae81dc
commit d70f5d3a6d
2 changed files with 35 additions and 3 deletions

View File

@ -5,39 +5,70 @@ use MyModel::Author;
sub books ($self) { sub books ($self) {
my $page_number = $self->param('page_number') // 1; my $page_number = $self->param('page_number') // 1;
if ($page_number < 1) {
$self->redirect_to('not_found');
return;
}
my $book_model = MyModel::Book->new(rows_per_page => $self->rpp); my $book_model = MyModel::Book->new(rows_per_page => $self->rpp);
my $book_page = $book_model->get_page( my $book_page = $book_model->get_page(
$page_number, $page_number,
$self->param('title_like'), $self->param('title_like'),
); );
my $pager = $book_page->pager;
if ($page_number > $pager->last_page) {
$self->redirect_to('not_found');
return;
}
$self->render( $self->render(
book_page => $book_page, book_page => $book_page,
pager => $book_page->pager, pager => $pager,
); );
} }
sub authors ($self) { sub authors ($self) {
my $page_number = $self->param('page_number') // 1; my $page_number = $self->param('page_number') // 1;
if ($page_number < 1) {
$self->redirect_to('not_found');
return;
}
my $author_model = MyModel::Author->new(rows_per_page => $self->rpp);; my $author_model = MyModel::Author->new(rows_per_page => $self->rpp);;
my $author_page = $author_model->get_page( my $author_page = $author_model->get_page(
$page_number, $page_number,
$self->param('name_like'), $self->param('name_like'),
); );
my $pager = $author_page->pager;
if ($page_number > $pager->last_page) {
$self->redirect_to('not_found');
return;
}
$self->render( $self->render(
author_page => $author_page, author_page => $author_page,
pager => $author_page->pager, pager => $pager,
); );
} }
sub author ($self) { sub author ($self) {
my ($id, $page_number) = ($self->param('id'), $self->param('page_number')); my ($id, $page_number) = ($self->param('id'), $self->param('page_number'));
if ($page_number < 1) {
$self->redirect_to('not_found');
return;
}
my ($author, $book_page) = MyModel::Author->new( my ($author, $book_page) = MyModel::Author->new(
rows_per_page => $self->rpp rows_per_page => $self->rpp
)->find_by_id($id, $page_number); )->find_by_id($id, $page_number);
if (!defined $author) {
$self->redirect_to('not_found');
return;
}
my $pager = $book_page->pager;
if ($page_number > $pager->last_page) {
$self->redirect_to('not_found');
return;
}
$self->render( $self->render(
author => $author, author => $author,
book_page => $book_page, book_page => $book_page,
pager => $book_page->pager, pager => $pager,
); );
} }

View File

@ -21,6 +21,7 @@ sub get_page ($self, $page_number = 1, $name_like = undef) {
sub find_by_id ($self, $id, $page_number = 1) { sub find_by_id ($self, $id, $page_number = 1) {
my $author = $self->schema->resultset('Author')->find({ id => $id }); my $author = $self->schema->resultset('Author')->find({ id => $id });
return (undef, undef) if (!defined $author);
my $book_page = $author->books_rs->search( my $book_page = $author->books_rs->search(
undef, undef,
{ order_by => [ "me.title" ], { order_by => [ "me.title" ],