From 954823a3282b4312aa40961148dcdc311be97f8f Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Thu, 7 Jan 2021 12:36:42 -0300 Subject: [PATCH] Bug 27358: 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 --- 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 a28fb5920c..4599b2f39d 100644 --- a/Koha/REST/V1/Auth.pm +++ b/Koha/REST/V1/Auth.pm @@ -148,6 +148,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 5bb68d2570..4c7f1d6b58 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 => 3; +use Test::More tests => 4; use Test::Mojo; use Module::Load::Conditional qw(can_load); @@ -192,6 +192,28 @@ subtest 'anonymous requests to public API' => 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.30.0