X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=t%2FToken.t;h=d7de3113cf5edc66fc2ef2d7f87794c338692625;hb=e926de5e8f359acf6b8beff541fe13ce2a5ac49e;hp=2314d2ebba76ea24d62147d7722da0b42fc348b6;hpb=7190593d9dd38001c2d101bcad5cddc222a45ebe;p=koha-ffzg.git diff --git a/t/Token.t b/t/Token.t old mode 100644 new mode 100755 index 2314d2ebba..d7de3113cf --- a/t/Token.t +++ b/t/Token.t @@ -6,27 +6,28 @@ # # This file is part of Koha. # -# Koha is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation; either version 3 of the License, or (at your option) any later -# version. +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. # -# Koha is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along -# with Koha; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . use Modern::Perl; -use Test::More tests => 10; +use Test::More tests => 12; +use Test::Exception; use Time::HiRes qw|usleep|; use C4::Context; use Koha::Token; C4::Context->_new_userenv('DUMMY SESSION'); -C4::Context->set_userenv(0,42,0,'firstname','surname', 'CPL', 'Library 1', 0, ', '); +C4::Context->set_userenv(0,42,0,'firstname','surname', 'CPL', 'Library 1', 0, ''); my $tokenizer = Koha::Token->new; is( length( $tokenizer->generate ), 1, "Generate without parameters" ); @@ -67,7 +68,7 @@ subtest 'Same id (cookie CGISESSID) with an other logged in user' => sub { session_id => $id, token => $csrftoken, }); is( $result, 1, "CSRF token verified" ); - C4::Context->set_userenv(0,43,0,'firstname','surname', 'CPL', 'Library 1', 0, ', '); + C4::Context->set_userenv(0,43,0,'firstname','surname', 'CPL', 'Library 1', 0, ''); $result = $tokenizer->check_csrf({ session_id => $id, token => $csrftoken, }); @@ -76,7 +77,7 @@ subtest 'Same id (cookie CGISESSID) with an other logged in user' => sub { subtest 'Same logged in user with another session (cookie CGISESSID)' => sub { plan tests => 2; - C4::Context->set_userenv(0,42,0,'firstname','surname', 'CPL', 'Library 1', 0, ', '); + C4::Context->set_userenv(0,42,0,'firstname','surname', 'CPL', 'Library 1', 0, ''); $csrftoken = $tokenizer->generate_csrf({ session_id => $id }); $result = $tokenizer->check_csrf({ session_id => $id, token => $csrftoken, @@ -89,3 +90,30 @@ subtest 'Same logged in user with another session (cookie CGISESSID)' => sub { }); is( $result, '', "CSRF token is not verified if another session is used" ); }; + +subtest 'Pattern parameter' => sub { + plan tests => 5; + my $id = $tokenizer->generate({ pattern => '\d\d', length => 8 }); + is( length($id), 2, 'Pattern overrides length' ); + ok( $id =~ /\d{2}/, 'Two digits found' ); + $id = $tokenizer->generate({ pattern => '[A-Z]{10}' }); + is( length($id), 10, 'Check length again' ); + ok( $id !~ /[^A-Z]/, 'Only uppercase letters' ); + throws_ok( sub { $tokenizer->generate({ pattern => 'abc{d,e}', }) }, 'Koha::Exceptions::Token::BadPattern', 'Exception should be thrown when wrong pattern is used'); +}; + +subtest 'JWT' => sub { + plan tests => 3; + + my $id = 42; + my $jwt = $tokenizer->generate_jwt({ id => $id }); + + my $is_valid = $tokenizer->check_jwt({ id => $id, token => $jwt }); + is( $is_valid, 1, 'valid token should return 1' ); + + $is_valid = $tokenizer->check_jwt({ id => 24, token => $jwt }); + isnt( $is_valid, 1, 'invalid token should not return 1' ); + + my $retrieved_id = $tokenizer->decode_jwt({ token => $jwt }); + is( $retrieved_id, $id, 'id stored in jwt should be correct' ); +};