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

(-)a/C4/Auth.pm (-9 / +8 lines)
Lines 1990-1997 sub checkpw { Link Here
1990
        my $ticket = $query->param('ticket');
1990
        my $ticket = $query->param('ticket');
1991
        $query->delete('ticket');                                         # remove ticket to come back to original URL
1991
        $query->delete('ticket');                                         # remove ticket to come back to original URL
1992
        my ( $retval, $retcard, $retuserid, $cas_ticket );
1992
        my ( $retval, $retcard, $retuserid, $cas_ticket );
1993
        ( $retval, $retcard, $retuserid, $cas_ticket, $patron ) =
1993
        ( $retval, $retcard, $retuserid, $cas_ticket, $patron ) = checkpw_cas( $ticket, $query, $type ); # EXTERNAL AUTH
1994
            checkpw_cas( $ticket, $query, $type );                        # EXTERNAL AUTH
1995
        if ($retval) {
1994
        if ($retval) {
1996
            @return = ( $retval, $retcard, $retuserid, $patron, $cas_ticket );
1995
            @return = ( $retval, $retcard, $retuserid, $patron, $cas_ticket );
1997
        } else {
1996
        } else {
Lines 2023-2044 sub checkpw { Link Here
2023
        $check_internal_as_fallback = 1;
2022
        $check_internal_as_fallback = 1;
2024
    }
2023
    }
2025
2024
2026
    if ( $check_internal_as_fallback ){
2025
    if ($check_internal_as_fallback) {
2027
    # INTERNAL AUTH
2026
        # INTERNAL AUTH
2028
        @return = checkpw_internal( $userid, $password, $no_set_userenv );
2027
        @return    = checkpw_internal( $userid, $password, $no_set_userenv );
2029
        $passwd_ok = 1 if $return[0] > 0;    # 1 or 2
2028
        $passwd_ok = 1                                                   if $return[0] > 0;    # 1 or 2
2030
        $patron = Koha::Patrons->find({ cardnumber => $return[1] }) if $passwd_ok;
2029
        $patron    = Koha::Patrons->find( { cardnumber => $return[1] } ) if $passwd_ok;
2031
        push @return, $patron if $patron;
2030
        push @return, $patron if $patron;
2032
    }
2031
    }
2033
2032
2034
     if ( defined $userid && !$patron ) {
2033
    if ( defined $userid && !$patron ) {
2035
        $patron = Koha::Patrons->find( { userid     => $userid } );
2034
        $patron = Koha::Patrons->find( { userid     => $userid } );
2036
        $patron = Koha::Patrons->find( { cardnumber => $userid } ) unless $patron;
2035
        $patron = Koha::Patrons->find( { cardnumber => $userid } ) unless $patron;
2037
        push @return, $patron if $check_internal_as_fallback;
2036
        push @return, $patron if $check_internal_as_fallback;
2038
    }
2037
    }
2039
2038
2040
    if ($patron) {
2039
    if ($patron) {
2041
        if( $patron->account_locked ){
2040
        if ( $patron->account_locked ) {
2042
            @return = ();
2041
            @return = ();
2043
        } elsif ($passwd_ok) {
2042
        } elsif ($passwd_ok) {
2044
            $patron->update( { login_attempts => 0 } );
2043
            $patron->update( { login_attempts => 0 } );
(-)a/t/db_dependent/Auth.t (-7 / +7 lines)
Lines 1447-1469 subtest 'checkpw for users with shared cardnumber / userid ' => sub { Link Here
1447
    plan tests => 8;
1447
    plan tests => 8;
1448
1448
1449
    t::lib::Mocks::mock_preference( 'RequireStrongPassword', 0 );
1449
    t::lib::Mocks::mock_preference( 'RequireStrongPassword', 0 );
1450
    my $library = $builder->build_object( { class => 'Koha::Libraries' } );
1450
    my $library  = $builder->build_object( { class => 'Koha::Libraries' } );
1451
    my $patron_1  = $builder->build_object( { class => 'Koha::Patrons' } );
1451
    my $patron_1 = $builder->build_object( { class => 'Koha::Patrons' } );
1452
    $patron_1->set_password( { password => "OnePassword" } );
1452
    $patron_1->set_password( { password => "OnePassword" } );
1453
    my $patron_2  = $builder->build_object( { class => 'Koha::Patrons', value => { userid => $patron_1->cardnumber } } );
1453
    my $patron_2 = $builder->build_object( { class => 'Koha::Patrons', value => { userid => $patron_1->cardnumber } } );
1454
    $patron_2->set_password( { password => "PasswordTwo" } );
1454
    $patron_2->set_password( { password => "PasswordTwo" } );
1455
1455
1456
    my ( $checkpw, $cardnumber, $userid, $patron ) = checkpw( $patron_1->cardnumber, "OnePassword", undef, undef, 1 );
1456
    my ( $checkpw, $cardnumber, $userid, $patron ) = checkpw( $patron_1->cardnumber, "OnePassword", undef, undef, 1 );
1457
    ok( $checkpw, 'checkpw returns true for right password when logging in via cardnumber' );
1457
    ok( $checkpw, 'checkpw returns true for right password when logging in via cardnumber' );
1458
    is( $cardnumber, $patron_1->cardnumber, 'checkpw returns correct cardnumber' );
1458
    is( $cardnumber, $patron_1->cardnumber, 'checkpw returns correct cardnumber' );
1459
    is( $userid, $patron_1->userid, 'checkpw returns correct userid' );
1459
    is( $userid,     $patron_1->userid,     'checkpw returns correct userid' );
1460
    is( $patron->id, $patron_1->id, 'checkpw returns correct patron' );
1460
    is( $patron->id, $patron_1->id,         'checkpw returns correct patron' );
1461
1461
1462
    ( $checkpw, $cardnumber, $userid, $patron ) = checkpw( $patron_2->userid, "PasswordTwo", undef, undef, 1 );
1462
    ( $checkpw, $cardnumber, $userid, $patron ) = checkpw( $patron_2->userid, "PasswordTwo", undef, undef, 1 );
1463
    ok( $checkpw, 'checkpw returns true for right password when logging in via userid' );
1463
    ok( $checkpw, 'checkpw returns true for right password when logging in via userid' );
1464
    is( $cardnumber, $patron_2->cardnumber, 'checkpw returns correct cardnumber' );
1464
    is( $cardnumber, $patron_2->cardnumber, 'checkpw returns correct cardnumber' );
1465
    is( $userid, $patron_2->userid, 'checkpw returns correct userid' );
1465
    is( $userid,     $patron_2->userid,     'checkpw returns correct userid' );
1466
    is( $patron->id, $patron_2->id, 'checkpw returns correct patron' );
1466
    is( $patron->id, $patron_2->id,         'checkpw returns correct patron' );
1467
1467
1468
};
1468
};
1469
1469
(-)a/t/db_dependent/api/v1/password_validation.t (-11 / +14 lines)
Lines 248-254 subtest 'password validation - users with shared cardnumber / userid' => sub { Link Here
248
    my $patron_1 = $builder->build_object(
248
    my $patron_1 = $builder->build_object(
249
        {
249
        {
250
            class => 'Koha::Patrons',
250
            class => 'Koha::Patrons',
251
            value => { }
251
            value => {}
252
        }
252
        }
253
    );
253
    );
254
    my $patron_password_1 = 'thePassword123';
254
    my $patron_password_1 = 'thePassword123';
Lines 269-275 subtest 'password validation - users with shared cardnumber / userid' => sub { Link Here
269
    };
269
    };
270
270
271
    $t->post_ok( "//$userid:$password@/api/v1/auth/password/validation" => json => $json )->status_is(201)
271
    $t->post_ok( "//$userid:$password@/api/v1/auth/password/validation" => json => $json )->status_is(201)
272
        ->json_is({ cardnumber => $patron_1->cardnumber, patron_id => $patron_1->borrowernumber, userid => $patron_1->userid} );
272
        ->json_is(
273
        { cardnumber => $patron_1->cardnumber, patron_id => $patron_1->borrowernumber, userid => $patron_1->userid } );
273
274
274
    $json = {
275
    $json = {
275
        identifier => $patron_2->userid,
276
        identifier => $patron_2->userid,
Lines 277-299 subtest 'password validation - users with shared cardnumber / userid' => sub { Link Here
277
    };
278
    };
278
279
279
    $t->post_ok( "//$userid:$password@/api/v1/auth/password/validation" => json => $json )->status_is(201)
280
    $t->post_ok( "//$userid:$password@/api/v1/auth/password/validation" => json => $json )->status_is(201)
280
        ->json_is({ cardnumber => $patron_2->cardnumber, patron_id => $patron_2->borrowernumber, userid => $patron_2->userid} );
281
        ->json_is(
282
        { cardnumber => $patron_2->cardnumber, patron_id => $patron_2->borrowernumber, userid => $patron_2->userid } );
281
283
282
    my $json = {
284
    $json = {
283
        userid => $patron_1->cardnumber,
285
        userid   => $patron_1->cardnumber,
284
        password   => $patron_password_1,
286
        password => $patron_password_1,
285
    };
287
    };
286
288
287
    $t->post_ok( "//$userid:$password@/api/v1/auth/password/validation" => json => $json )->status_is(201)
289
    $t->post_ok( "//$userid:$password@/api/v1/auth/password/validation" => json => $json )->status_is(201)
288
        ->json_is({ cardnumber => $patron_1->cardnumber, patron_id => $patron_1->borrowernumber, userid => $patron_1->userid} );
290
        ->json_is(
291
        { cardnumber => $patron_1->cardnumber, patron_id => $patron_1->borrowernumber, userid => $patron_1->userid } );
289
292
290
    $json = {
293
    $json = {
291
        userid => $patron_2->userid,
294
        userid   => $patron_2->userid,
292
        password   => $patron_password_2,
295
        password => $patron_password_2,
293
    };
296
    };
294
297
295
    $t->post_ok( "//$userid:$password@/api/v1/auth/password/validation" => json => $json )->status_is(201)
298
    $t->post_ok( "//$userid:$password@/api/v1/auth/password/validation" => json => $json )->status_is(201)
296
        ->json_is({ cardnumber => $patron_2->cardnumber, patron_id => $patron_2->borrowernumber, userid => $patron_2->userid} );
299
        ->json_is(
300
        { cardnumber => $patron_2->cardnumber, patron_id => $patron_2->borrowernumber, userid => $patron_2->userid } );
297
301
298
    $schema->storage->txn_rollback;
302
    $schema->storage->txn_rollback;
299
};
303
};
300
- 

Return to bug 36575