From 9b2226a649c48b268afa7acdee8330c43eb1609d Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Thu, 7 Jan 2021 12:36:42 -0300 Subject: [PATCH] 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 Signed-off-by: Kyle M Hall Signed-off-by: Jonathan Druart --- Koha/REST/V1/Auth.pm | 3 +++ .../api/v1/auth_authenticate_api_request.t | 24 ++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/Koha/REST/V1/Auth.pm b/Koha/REST/V1/Auth.pm index e773555d58..01eef3375e 100644 --- a/Koha/REST/V1/Auth.pm +++ b/Koha/REST/V1/Auth.pm @@ -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. diff --git a/t/db_dependent/api/v1/auth_authenticate_api_request.t b/t/db_dependent/api/v1/auth_authenticate_api_request.t index ef7edede95..10a61893e8 100755 --- a/t/db_dependent/api/v1/auth_authenticate_api_request.t +++ b/t/db_dependent/api/v1/auth_authenticate_api_request.t @@ -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; -- 2.39.5