Bug 28948: Make is_public stashed on public routes

This patch makes the API authentication code stash the 'is_public' value
when public routes are hit.

This will be particularly useful to have $c->objects->search generically
pass this info down to the ->to_api method.

To test:
1. Apply this patch
2. Run:
   $ kshell
  k$ prove t/db_dependent/api/v1/auth_authenticate_api_request.t
=> SUCCESS: Tests pass! When a public route is reached, the controller
has the 'is_public' value stashed
3. Sign off :-D

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
Tomás Cohen Arazi 2021-01-07 12:36:42 -03:00 committed by Jonathan Druart
parent f6c2147ec7
commit 9b2226a649
2 changed files with 26 additions and 1 deletions

View file

@ -149,6 +149,9 @@ sub authenticate_api_request {
my $user;
$c->stash( 'is_public' => 1 )
if $params->{is_public};
# The following supports retrieval of spec with Mojolicious::Plugin::OpenAPI@1.17 and later (first one)
# and older versions (second one).
# TODO: remove the latter 'openapi.op_spec' if minimum version is bumped to at least 1.17.

View file

@ -17,7 +17,7 @@
use Modern::Perl;
use Test::More tests => 5;
use Test::More tests => 6;
use Test::Mojo;
use Module::Load::Conditional qw(can_load);
@ -296,6 +296,28 @@ subtest 'x-koha-override stash tests' => sub {
$schema->storage->txn_rollback;
};
subtest 'public routes have "is_public" info stashed' => sub {
plan tests => 2;
$schema->storage->txn_begin;
my $stash;
$t->app->hook(
after_dispatch => sub {
$stash = shift->stash;
}
);
$t->get_ok('/api/v1/public/biblios/1');
my $is_public = $stash->{is_public};
ok( $is_public, 'Correctly stashed the fact it is a public route' );
$schema->storage->txn_rollback;
};
sub create_user_and_session {
my $args = shift;