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

(-)a/C4/Auth.pm (-9 / +8 lines)
Lines 2007-2014 sub checkpw { Link Here
2007
        my $ticket = $query->param('ticket');
2007
        my $ticket = $query->param('ticket');
2008
        $query->delete('ticket');                                         # remove ticket to come back to original URL
2008
        $query->delete('ticket');                                         # remove ticket to come back to original URL
2009
        my ( $retval, $retcard, $retuserid, $cas_ticket );
2009
        my ( $retval, $retcard, $retuserid, $cas_ticket );
2010
        ( $retval, $retcard, $retuserid, $cas_ticket, $patron ) =
2010
        ( $retval, $retcard, $retuserid, $cas_ticket, $patron ) = checkpw_cas( $ticket, $query, $type ); # EXTERNAL AUTH
2011
            checkpw_cas( $ticket, $query, $type );                        # EXTERNAL AUTH
2012
        if ($retval) {
2011
        if ($retval) {
2013
            @return = ( $retval, $retcard, $retuserid, $patron, $cas_ticket );
2012
            @return = ( $retval, $retcard, $retuserid, $patron, $cas_ticket );
2014
        } else {
2013
        } else {
Lines 2040-2061 sub checkpw { Link Here
2040
        $check_internal_as_fallback = 1;
2039
        $check_internal_as_fallback = 1;
2041
    }
2040
    }
2042
2041
2043
    if ( $check_internal_as_fallback ){
2042
    if ($check_internal_as_fallback) {
2044
    # INTERNAL AUTH
2043
        # INTERNAL AUTH
2045
        @return = checkpw_internal( $userid, $password, $no_set_userenv );
2044
        @return    = checkpw_internal( $userid, $password, $no_set_userenv );
2046
        $passwd_ok = 1 if $return[0] > 0;    # 1 or 2
2045
        $passwd_ok = 1                                                   if $return[0] > 0;    # 1 or 2
2047
        $patron = Koha::Patrons->find({ cardnumber => $return[1] }) if $passwd_ok;
2046
        $patron    = Koha::Patrons->find( { cardnumber => $return[1] } ) if $passwd_ok;
2048
        push @return, $patron if $patron;
2047
        push @return, $patron if $patron;
2049
    }
2048
    }
2050
2049
2051
     if ( defined $userid && !$patron ) {
2050
    if ( defined $userid && !$patron ) {
2052
        $patron = Koha::Patrons->find( { userid     => $userid } );
2051
        $patron = Koha::Patrons->find( { userid     => $userid } );
2053
        $patron = Koha::Patrons->find( { cardnumber => $userid } ) unless $patron;
2052
        $patron = Koha::Patrons->find( { cardnumber => $userid } ) unless $patron;
2054
        push @return, $patron if $check_internal_as_fallback;
2053
        push @return, $patron if $check_internal_as_fallback;
2055
    }
2054
    }
2056
2055
2057
    if ($patron) {
2056
    if ($patron) {
2058
        if( $patron->account_locked ){
2057
        if ( $patron->account_locked ) {
2059
            @return = ();
2058
            @return = ();
2060
        } elsif ($passwd_ok) {
2059
        } elsif ($passwd_ok) {
2061
            $patron->update( { login_attempts => 0 } );
2060
            $patron->update( { login_attempts => 0 } );
(-)a/t/db_dependent/Auth.t (-7 / +7 lines)
Lines 1570-1592 subtest 'checkpw for users with shared cardnumber / userid ' => sub { Link Here
1570
    plan tests => 8;
1570
    plan tests => 8;
1571
1571
1572
    t::lib::Mocks::mock_preference( 'RequireStrongPassword', 0 );
1572
    t::lib::Mocks::mock_preference( 'RequireStrongPassword', 0 );
1573
    my $library = $builder->build_object( { class => 'Koha::Libraries' } );
1573
    my $library  = $builder->build_object( { class => 'Koha::Libraries' } );
1574
    my $patron_1  = $builder->build_object( { class => 'Koha::Patrons' } );
1574
    my $patron_1 = $builder->build_object( { class => 'Koha::Patrons' } );
1575
    $patron_1->set_password( { password => "OnePassword" } );
1575
    $patron_1->set_password( { password => "OnePassword" } );
1576
    my $patron_2  = $builder->build_object( { class => 'Koha::Patrons', value => { userid => $patron_1->cardnumber } } );
1576
    my $patron_2 = $builder->build_object( { class => 'Koha::Patrons', value => { userid => $patron_1->cardnumber } } );
1577
    $patron_2->set_password( { password => "PasswordTwo" } );
1577
    $patron_2->set_password( { password => "PasswordTwo" } );
1578
1578
1579
    my ( $checkpw, $cardnumber, $userid, $patron ) = checkpw( $patron_1->cardnumber, "OnePassword", undef, undef, 1 );
1579
    my ( $checkpw, $cardnumber, $userid, $patron ) = checkpw( $patron_1->cardnumber, "OnePassword", undef, undef, 1 );
1580
    ok( $checkpw, 'checkpw returns true for right password when logging in via cardnumber' );
1580
    ok( $checkpw, 'checkpw returns true for right password when logging in via cardnumber' );
1581
    is( $cardnumber, $patron_1->cardnumber, 'checkpw returns correct cardnumber' );
1581
    is( $cardnumber, $patron_1->cardnumber, 'checkpw returns correct cardnumber' );
1582
    is( $userid, $patron_1->userid, 'checkpw returns correct userid' );
1582
    is( $userid,     $patron_1->userid,     'checkpw returns correct userid' );
1583
    is( $patron->id, $patron_1->id, 'checkpw returns correct patron' );
1583
    is( $patron->id, $patron_1->id,         'checkpw returns correct patron' );
1584
1584
1585
    ( $checkpw, $cardnumber, $userid, $patron ) = checkpw( $patron_2->userid, "PasswordTwo", undef, undef, 1 );
1585
    ( $checkpw, $cardnumber, $userid, $patron ) = checkpw( $patron_2->userid, "PasswordTwo", undef, undef, 1 );
1586
    ok( $checkpw, 'checkpw returns true for right password when logging in via userid' );
1586
    ok( $checkpw, 'checkpw returns true for right password when logging in via userid' );
1587
    is( $cardnumber, $patron_2->cardnumber, 'checkpw returns correct cardnumber' );
1587
    is( $cardnumber, $patron_2->cardnumber, 'checkpw returns correct cardnumber' );
1588
    is( $userid, $patron_2->userid, 'checkpw returns correct userid' );
1588
    is( $userid,     $patron_2->userid,     'checkpw returns correct userid' );
1589
    is( $patron->id, $patron_2->id, 'checkpw returns correct patron' );
1589
    is( $patron->id, $patron_2->id,         'checkpw returns correct patron' );
1590
1590
1591
};
1591
};
1592
1592
(-)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