View | Details | Raw Unified | Return to bug 23336
Collapse All | Expand All

(-)a/Koha/REST/V1/Checkouts.pm (-10 / +12 lines)
Lines 110-120 Controller function that handles retrieval of Checkout availability Link Here
110
110
111
sub get_availability {
111
sub get_availability {
112
    my $c = shift->openapi->valid_input or return;
112
    my $c = shift->openapi->valid_input or return;
113
    my $user = $c->stash('koha.user');
113
114
114
    my $patron = Koha::Patrons->find( $c->validation->param('patron_id') );
115
    my $patron = Koha::Patrons->find( $c->param('patron_id') );
115
    my $inprocess = 0; # What does this do?
116
    my $inprocess = 0; # What does this do?
116
    my $ignore_reserves = 0; # Don't ignore reserves
117
    my $ignore_reserves = 0; # Don't ignore reserves
117
    my $item   = Koha::Items->find( $c->validation->param('item_id') );
118
    my $item   = Koha::Items->find( $c->param('item_id') );
118
    my $params = {
119
    my $params = {
119
        item => $item
120
        item => $item
120
    };
121
    };
Lines 123-131 sub get_availability { Link Here
123
      C4::Circulation::CanBookBeIssued( $patron, undef, undef, $inprocess, $ignore_reserves,
124
      C4::Circulation::CanBookBeIssued( $patron, undef, undef, $inprocess, $ignore_reserves,
124
        $params );
125
        $params );
125
126
126
    my $confirm_keys = join( /:/, sort keys %{$confirmation} );
127
    my $confirm_keys = join( ":", sort keys %{$confirmation} );
127
    my $tokenizer = Koha::Token->new;
128
    $confirm_keys = $user->id . ":" . $item->id . ":" . $confirm_keys;
128
    my $token = $tokeniser->generate_jwt({ id => $confirm_keys });
129
    my $token = Koha::Token->new->generate_jwt( { id => $confirm_keys } );
129
130
130
    my $response = {
131
    my $response = {
131
        blockers           => $impossible,
132
        blockers           => $impossible,
Lines 145-152 Add a new checkout Link Here
145
146
146
sub add {
147
sub add {
147
    my $c = shift->openapi->valid_input or return;
148
    my $c = shift->openapi->valid_input or return;
149
    my $user = $c->stash('koha.user');
148
150
149
    my $body      = $c->validation->param('body');
151
    my $body      = $c->req->json;
150
    my $item_id   = $body->{item_id};
152
    my $item_id   = $body->{item_id};
151
    my $patron_id = $body->{patron_id};
153
    my $patron_id = $body->{patron_id};
152
    my $onsite    = $body->{onsite_checkout};
154
    my $onsite    = $body->{onsite_checkout};
Lines 205-214 sub add { Link Here
205
207
206
            # Check for existance of confirmation token
208
            # Check for existance of confirmation token
207
            # and if exists check validity
209
            # and if exists check validity
208
            if ( my $token = $c->validation->param('confirmation') ) {
210
            if ( my $token = $c->param('confirmation') ) {
209
                my $confirm_keys = join( /:/, sort keys %{$confirmation} );
211
                my $confirm_keys = join( ":", sort keys %{$confirmation} );
210
                my $tokenizer    = Koha::Token->new;
212
                $confirm_keys = $user->id . ":" . $item->id . ":" . $confirm_keys;
211
                $confirmed = $tokenizer->check_jwt(
213
                $confirmed = Koha::Token->new->check_jwt(
212
                    { id => $confirm_keys, token => $token } );
214
                    { id => $confirm_keys, token => $token } );
213
            }
215
            }
214
216
(-)a/t/db_dependent/api/v1/checkouts.t (-7 / +26 lines)
Lines 30-35 use C4::Circulation qw( AddIssue AddReturn CanBookBeIssued ); Link Here
30
30
31
use Koha::Database;
31
use Koha::Database;
32
use Koha::DateUtils qw( dt_from_string output_pref );
32
use Koha::DateUtils qw( dt_from_string output_pref );
33
use Koha::Token;
33
34
34
my $schema = Koha::Database->schema;
35
my $schema = Koha::Database->schema;
35
my $builder = t::lib::TestBuilder->new;
36
my $builder = t::lib::TestBuilder->new;
Lines 237-243 $schema->storage->txn_rollback; Link Here
237
238
238
subtest 'get_availability' => sub {
239
subtest 'get_availability' => sub {
239
240
240
    plan tests => 27;
241
    plan tests => 28;
241
242
242
    $schema->storage->txn_begin;
243
    $schema->storage->txn_begin;
243
    my $librarian = $builder->build_object(
244
    my $librarian = $builder->build_object(
Lines 294-300 subtest 'get_availability' => sub { Link Here
294
"//$userid:$password@/api/v1/checkouts/availability?item_id=$item1_id&patron_id=$patron_id"
295
"//$userid:$password@/api/v1/checkouts/availability?item_id=$item1_id&patron_id=$patron_id"
295
    )->status_is(200)->json_is( '/blockers' => {} )
296
    )->status_is(200)->json_is( '/blockers' => {} )
296
      ->json_is( '/confirms'           => {} )->json_is( '/warnings' => {} )
297
      ->json_is( '/confirms'           => {} )->json_is( '/warnings' => {} )
297
      ->json_is( '/confirmation_token' => undef );
298
      ->json_has( '/confirmation_token');
298
299
299
    # Blocked
300
    # Blocked
300
    %issuingimpossible = ( GNA => 1 );
301
    %issuingimpossible = ( GNA => 1 );
Lines 302-308 subtest 'get_availability' => sub { Link Here
302
"//$userid:$password@/api/v1/checkouts/availability?item_id=$item1_id&patron_id=$patron_id"
303
"//$userid:$password@/api/v1/checkouts/availability?item_id=$item1_id&patron_id=$patron_id"
303
    )->status_is(200)->json_is( '/blockers' => { GNA => 1 } )
304
    )->status_is(200)->json_is( '/blockers' => { GNA => 1 } )
304
      ->json_is( '/confirms'           => {} )->json_is( '/warnings' => {} )
305
      ->json_is( '/confirms'           => {} )->json_is( '/warnings' => {} )
305
      ->json_is( '/confirmation_token' => undef );
306
      ->json_has( '/confirmation_token');
306
    %issuingimpossible = ();
307
    %issuingimpossible = ();
307
308
308
    # Warnings/Info
309
    # Warnings/Info
Lines 314-331 subtest 'get_availability' => sub { Link Here
314
      ->json_is( '/confirms' => {} )
315
      ->json_is( '/confirms' => {} )
315
      ->json_is( '/warnings' =>
316
      ->json_is( '/warnings' =>
316
          { alert1 => "this is an alert", message1 => "this is a message" } )
317
          { alert1 => "this is an alert", message1 => "this is a message" } )
317
      ->json_is( '/confirmation_token' => undef );
318
      ->json_has( '/confirmation_token');
318
    %alerts   = ();
319
    %alerts   = ();
319
    %messages = ();
320
    %messages = ();
320
321
321
    # Needs confirm
322
    # Needs confirm
322
    %needsconfirmation = ( confirm1 => 1, confirm2 => 'please' );
323
    %needsconfirmation = ( confirm1 => 1, confirm2 => 'please' );
324
    my $token = Koha::Token->new->generate_jwt( { id => $librarian->id . ":" . $item1_id . ":confirm1:confirm2:please" });
323
    $t->get_ok(
325
    $t->get_ok(
324
"//$userid:$password@/api/v1/checkouts/availability?item_id=$item1_id&patron_id=$patron_id"
326
"//$userid:$password@/api/v1/checkouts/availability?item_id=$item1_id&patron_id=$patron_id"
325
    )->status_is(200)->json_is( '/blockers' => {} )
327
    )->status_is(200)->json_is( '/blockers' => {} )
326
      ->json_is( '/confirms' => { confirm1 => 1, confirm2 => 'please' } )
328
      ->json_is( '/confirms' => { confirm1 => 1, confirm2 => 'please' } )
327
      ->json_is( '/warnings' => {} )
329
      ->json_is( '/warnings' => {} )
328
      ->json_is( '/confirmation_token' => 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjb25maXJtMSI6MSwiY29uZmlybTIiOjF9.4QBpITwnIGOAfohyKjaFDoeBWnGmQTdyJrPn9pavArw' );
330
      ->json_has( '/confirmation_token');
331
    my $confirmation_token = $t->tx->res->json('/confirmation_token');
332
    ok(
333
        Koha::Token->new->check_jwt(
334
            {
335
                id => $librarian->id . ":"
336
                  . $item1_id
337
                  . ":confirm1:confirm2:please",
338
                token => $confirmation_token
339
            }
340
        ),
341
        'Correct token'
342
    );
329
343
330
    $schema->storage->txn_rollback;
344
    $schema->storage->txn_rollback;
331
};
345
};
Lines 397-403 subtest 'add checkout' => sub { Link Here
397
        }
411
        }
398
    )->status_is(412);
412
    )->status_is(412);
399
413
400
    my $token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjb25maXJtMSI6MSwiY29uZmlybTIiOjF9.4QBpITwnIGOAfohyKjaFDoeBWnGmQTdyJrPn9pavArw";
414
    my $token = Koha::Token->new->generate_jwt(
415
        {
416
                id => $librarian->id . ":"
417
              . $item1_id
418
              . ":confirm1:confirm2:please"
419
        }
420
    );
401
    $t->post_ok(
421
    $t->post_ok(
402
        "//$userid:$password@/api/v1/checkouts?confirmation=$token" => json => {
422
        "//$userid:$password@/api/v1/checkouts?confirmation=$token" => json => {
403
            item_id            => $item1_id,
423
            item_id            => $item1_id,
404
- 

Return to bug 23336