Bug 27342: Remove dbh from C4::Auth
We must not pass $dbh but retrieve it when needed instead Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
parent
4c44dd5eb4
commit
1b92fd78fd
24
C4/Auth.pm
24
C4/Auth.pm
|
|
@ -404,7 +404,6 @@ sub get_template_and_user {
|
|||
# we add them to the logged-in search history
|
||||
my @recentSearches = C4::Search::History::get_from_session( { cgi => $in->{'query'} } );
|
||||
if (@recentSearches) {
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $query = q{
|
||||
INSERT INTO search_history(userid, sessionid, query_desc, query_cgi, type, total, time )
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?)
|
||||
|
|
@ -837,7 +836,6 @@ sub checkauth {
|
|||
@allowed_scripts_for_private_opac;
|
||||
}
|
||||
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $timeout = _timeout_syspref();
|
||||
|
||||
my $cookie_mgr = Koha::CookieManager->new;
|
||||
|
|
@ -1045,7 +1043,7 @@ sub checkauth {
|
|||
my $retuserid;
|
||||
|
||||
# Do not pass password here, else shib will not be checked in checkpw.
|
||||
( $return, $cardnumber, $retuserid ) = checkpw( $dbh, $q_userid, undef, $query );
|
||||
( $return, $cardnumber, $retuserid ) = checkpw( $q_userid, undef, $query );
|
||||
$userid = $retuserid;
|
||||
$shibSuccess = $return;
|
||||
$info{'invalidShibLogin'} = 1 unless ($return);
|
||||
|
|
@ -1056,7 +1054,7 @@ sub checkauth {
|
|||
if ( $cas && $query->param('ticket') ) {
|
||||
my $retuserid;
|
||||
( $return, $cardnumber, $retuserid, $cas_ticket ) =
|
||||
checkpw( $dbh, $userid, $password, $query, $type );
|
||||
checkpw( $userid, $password, $query, $type );
|
||||
$userid = $retuserid;
|
||||
$info{'invalidCasLogin'} = 1 unless ($return);
|
||||
}
|
||||
|
|
@ -1125,7 +1123,7 @@ sub checkauth {
|
|||
{
|
||||
|
||||
( $return, $cardnumber, $retuserid, $cas_ticket ) =
|
||||
checkpw( $dbh, $q_userid, $password, $query, $type );
|
||||
checkpw( $q_userid, $password, $query, $type );
|
||||
$userid = $retuserid if ($retuserid);
|
||||
$info{'invalid_username_or_password'} = 1 unless ($return);
|
||||
}
|
||||
|
|
@ -1170,6 +1168,7 @@ sub checkauth {
|
|||
FROM borrowers
|
||||
LEFT JOIN branches on borrowers.branchcode=branches.branchcode
|
||||
";
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $sth = $dbh->prepare("$select where userid=?");
|
||||
$sth->execute($userid);
|
||||
unless ( $sth->rows ) {
|
||||
|
|
@ -1541,7 +1540,6 @@ sub check_api_auth {
|
|||
|
||||
my $query = shift;
|
||||
my $flagsrequired = shift;
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $timeout = _timeout_syspref();
|
||||
|
||||
unless ( C4::Context->preference('Version') ) {
|
||||
|
|
@ -1594,7 +1592,7 @@ sub check_api_auth {
|
|||
|
||||
# In case of a CAS authentication, we use the ticket instead of the password
|
||||
my $PT = $query->param('PT');
|
||||
( $return, $cardnumber, $userid, $cas_ticket ) = check_api_auth_cas( $dbh, $PT, $query ); # EXTERNAL AUTH
|
||||
( $return, $cardnumber, $userid, $cas_ticket ) = check_api_auth_cas( $PT, $query ); # EXTERNAL AUTH
|
||||
} else {
|
||||
|
||||
# User / password auth
|
||||
|
|
@ -1604,7 +1602,7 @@ sub check_api_auth {
|
|||
return ( "failed", undef, undef );
|
||||
}
|
||||
my $newuserid;
|
||||
( $return, $cardnumber, $newuserid, $cas_ticket ) = checkpw( $dbh, $userid, $password, $query );
|
||||
( $return, $cardnumber, $newuserid, $cas_ticket ) = checkpw( $userid, $password, $query );
|
||||
}
|
||||
|
||||
if ( $return and haspermission( $userid, $flagsrequired ) ) {
|
||||
|
|
@ -1626,6 +1624,7 @@ sub check_api_auth {
|
|||
$userflags, $branchcode, $branchname,
|
||||
$emailaddress
|
||||
);
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $sth =
|
||||
$dbh->prepare(
|
||||
"select borrowernumber, firstname, surname, flags, borrowers.branchcode, branches.branchname as branchname, email from borrowers left join branches on borrowers.branchcode=branches.branchcode where userid=?"
|
||||
|
|
@ -1891,7 +1890,7 @@ sub get_session {
|
|||
# Currently it's only passed from C4::SIP::ILS::Patron::check_password, but
|
||||
# not having a userenv defined could cause a crash.
|
||||
sub checkpw {
|
||||
my ( $dbh, $userid, $password, $query, $type, $no_set_userenv ) = @_;
|
||||
my ( $userid, $password, $query, $type, $no_set_userenv ) = @_;
|
||||
$type = 'opac' unless $type;
|
||||
|
||||
# Get shibboleth login attribute
|
||||
|
|
@ -1926,7 +1925,7 @@ sub checkpw {
|
|||
# In case of a CAS authentication, we use the ticket instead of the password
|
||||
my $ticket = $query->param('ticket');
|
||||
$query->delete('ticket'); # remove ticket to come back to original URL
|
||||
my ( $retval, $retcard, $retuserid, $cas_ticket ) = checkpw_cas( $dbh, $ticket, $query, $type ); # EXTERNAL AUTH
|
||||
my ( $retval, $retcard, $retuserid, $cas_ticket ) = checkpw_cas( $ticket, $query, $type ); # EXTERNAL AUTH
|
||||
if ( $retval ) {
|
||||
@return = ( $retval, $retcard, $retuserid, $cas_ticket );
|
||||
} else {
|
||||
|
|
@ -1958,7 +1957,7 @@ sub checkpw {
|
|||
|
||||
# INTERNAL AUTH
|
||||
if ( $check_internal_as_fallback ) {
|
||||
@return = checkpw_internal( $dbh, $userid, $password, $no_set_userenv);
|
||||
@return = checkpw_internal( $userid, $password, $no_set_userenv);
|
||||
$passwd_ok = 1 if $return[0] > 0; # 1 or 2
|
||||
}
|
||||
|
||||
|
|
@ -1984,11 +1983,12 @@ sub checkpw {
|
|||
}
|
||||
|
||||
sub checkpw_internal {
|
||||
my ( $dbh, $userid, $password, $no_set_userenv ) = @_;
|
||||
my ( $userid, $password, $no_set_userenv ) = @_;
|
||||
|
||||
$password = Encode::encode( 'UTF-8', $password )
|
||||
if Encode::is_utf8($password);
|
||||
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $sth =
|
||||
$dbh->prepare(
|
||||
"select password,cardnumber,borrowernumber,userid,firstname,surname,borrowers.branchcode,branches.branchname,flags from borrowers join branches on borrowers.branchcode=branches.branchcode where userid=?"
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ sub login_cas_url {
|
|||
# Checks for password correctness
|
||||
# In our case : is there a ticket, is it valid and does it match one of our users ?
|
||||
sub checkpw_cas {
|
||||
my ($dbh, $ticket, $query, $type) = @_;
|
||||
my ($ticket, $query, $type) = @_;
|
||||
my $retnumber;
|
||||
my ( $cas, $uri ) = _get_cas_and_service($query, undef, $type);
|
||||
|
||||
|
|
@ -117,6 +117,7 @@ sub checkpw_cas {
|
|||
# we should store the CAS ticekt too, we need this for single logout https://apereo.github.io/cas/4.2.x/protocol/CAS-Protocol-Specification.html#233-single-logout
|
||||
|
||||
# Does it match one of our users ?
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $sth = $dbh->prepare("select cardnumber from borrowers where userid=?");
|
||||
$sth->execute($userid);
|
||||
if ( $sth->rows ) {
|
||||
|
|
@ -147,7 +148,7 @@ sub checkpw_cas {
|
|||
|
||||
# Proxy CAS auth
|
||||
sub check_api_auth_cas {
|
||||
my ($dbh, $PT, $query, $type) = @_;
|
||||
my ($PT, $query, $type) = @_;
|
||||
my $retnumber;
|
||||
my ( $cas, $uri ) = _get_cas_and_service($query, undef, $type);
|
||||
|
||||
|
|
@ -164,6 +165,7 @@ sub check_api_auth_cas {
|
|||
# we should store the CAS ticket too, we need this for single logout https://apereo.github.io/cas/4.2.x/protocol/CAS-Protocol-Specification.html#233-single-logout
|
||||
|
||||
# Does it match one of our users ?
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $sth = $dbh->prepare("select cardnumber from borrowers where userid=?");
|
||||
$sth->execute($userid);
|
||||
if ( $sth->rows ) {
|
||||
|
|
|
|||
|
|
@ -109,7 +109,7 @@ sub search_method {
|
|||
}
|
||||
|
||||
sub checkpw_ldap {
|
||||
my ($dbh, $userid, $password) = @_;
|
||||
my ($userid, $password) = @_;
|
||||
my @hosts = split(',', $prefhost);
|
||||
my $db = Net::LDAP->new(\@hosts);
|
||||
unless ( $db ) {
|
||||
|
|
@ -355,7 +355,7 @@ sub _do_changepassword {
|
|||
#warn "changing local password for borrowernumber=$borrowerid to '$digest'\n";
|
||||
Koha::Patrons->find($borrowerid)->set_password({ password => $password, skip_validation => 1 });
|
||||
|
||||
my ($ok, $cardnum) = checkpw_internal(C4::Context->dbh, $userid, $password);
|
||||
my ($ok, $cardnum) = checkpw_internal($userid, $password);
|
||||
return $cardnum if $ok;
|
||||
|
||||
warn "Password mismatch after update to borrowernumber=$borrowerid";
|
||||
|
|
|
|||
|
|
@ -274,9 +274,8 @@ sub check_password {
|
|||
# If the record has a NULL password, accept '' as match
|
||||
return $pwd eq q{} unless $self->{password};
|
||||
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $ret = 0;
|
||||
($ret) = checkpw( $dbh, $self->{userid}, $pwd, undef, undef, 1 ); # dbh, userid, query, type, no_set_userenv
|
||||
($ret) = checkpw( $self->{userid}, $pwd, undef, undef, 1 ); # userid, query, type, no_set_userenv
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -505,8 +505,7 @@ sub _basic_auth {
|
|||
my $decoded_credentials = decode_base64( $credentials );
|
||||
my ( $user_id, $password ) = split( /:/, $decoded_credentials, 2 );
|
||||
|
||||
my $dbh = C4::Context->dbh;
|
||||
unless ( checkpw_internal($dbh, $user_id, $password ) ) {
|
||||
unless ( checkpw_internal($user_id, $password ) ) {
|
||||
Koha::Exceptions::Authorization::Unauthorized->throw( error => 'Invalid password' );
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -119,8 +119,7 @@ sub set_public {
|
|||
}
|
||||
|
||||
return try {
|
||||
my $dbh = C4::Context->dbh;
|
||||
unless ( checkpw_internal($dbh, $user->userid, $old_password ) ) {
|
||||
unless ( checkpw_internal($user->userid, $old_password ) ) {
|
||||
return $c->render(
|
||||
status => 400,
|
||||
openapi => { error => "Invalid password" }
|
||||
|
|
|
|||
|
|
@ -118,8 +118,7 @@ my $issuer = Koha::Patrons->find( $issuerid )->unblessed;
|
|||
my $patronid = $jwt ? Koha::Token->new->decode_jwt({ token => $jwt }) : undef;
|
||||
unless ( $patronid ) {
|
||||
if ( C4::Context->preference('SelfCheckoutByLogin') ) {
|
||||
my $dbh = C4::Context->dbh;
|
||||
( undef, $patronid ) = checkpw( $dbh, $patronlogin, $patronpw );
|
||||
( undef, $patronid ) = checkpw( $patronlogin, $patronpw );
|
||||
}
|
||||
else { # People should not do that unless they know what they are doing!
|
||||
# SelfCheckAllowByIPRanges MUST be configured
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@ BEGIN {
|
|||
|
||||
my $schema = Koha::Database->schema;
|
||||
my $builder = t::lib::TestBuilder->new;
|
||||
my $dbh = C4::Context->dbh;
|
||||
|
||||
# FIXME: SessionStorage defaults to mysql, but it seems to break transaction
|
||||
# handling
|
||||
|
|
@ -258,14 +257,14 @@ subtest 'no_set_userenv parameter tests' => sub {
|
|||
t::lib::Mocks::mock_preference( 'RequireStrongPassword', 0 );
|
||||
$patron->set_password({ password => $password });
|
||||
|
||||
ok( checkpw( $dbh, $patron->userid, $password, undef, undef, 1 ), 'checkpw returns true' );
|
||||
ok( checkpw( $patron->userid, $password, undef, undef, 1 ), 'checkpw returns true' );
|
||||
is( C4::Context->userenv, undef, 'Userenv should be undef as required' );
|
||||
C4::Context->_new_userenv('DUMMY SESSION');
|
||||
C4::Context->set_userenv(0,0,0,'firstname','surname', $library->branchcode, 'Library 1', 0, '', '');
|
||||
is( C4::Context->userenv->{branch}, $library->branchcode, 'Userenv gives correct branch' );
|
||||
ok( checkpw( $dbh, $patron->userid, $password, undef, undef, 1 ), 'checkpw returns true' );
|
||||
ok( checkpw( $patron->userid, $password, undef, undef, 1 ), 'checkpw returns true' );
|
||||
is( C4::Context->userenv->{branch}, $library->branchcode, 'Userenv branch is preserved if no_set_userenv is true' );
|
||||
ok( checkpw( $dbh, $patron->userid, $password, undef, undef, 0 ), 'checkpw still returns true' );
|
||||
ok( checkpw( $patron->userid, $password, undef, undef, 0 ), 'checkpw still returns true' );
|
||||
isnt( C4::Context->userenv->{branch}, $library->branchcode, 'Userenv branch is overwritten if no_set_userenv is false' );
|
||||
};
|
||||
|
||||
|
|
@ -280,15 +279,15 @@ subtest 'checkpw lockout tests' => sub {
|
|||
t::lib::Mocks::mock_preference( 'FailedLoginAttempts', 1 );
|
||||
$patron->set_password({ password => $password });
|
||||
|
||||
my ( $checkpw, undef, undef ) = checkpw( $dbh, $patron->cardnumber, $password, undef, undef, 1 );
|
||||
my ( $checkpw, undef, undef ) = checkpw( $patron->cardnumber, $password, undef, undef, 1 );
|
||||
ok( $checkpw, 'checkpw returns true with right password when logging in via cardnumber' );
|
||||
( $checkpw, undef, undef ) = checkpw( $dbh, $patron->userid, "wrong_password", undef, undef, 1 );
|
||||
( $checkpw, undef, undef ) = checkpw( $patron->userid, "wrong_password", undef, undef, 1 );
|
||||
is( $checkpw, 0, 'checkpw returns false when given wrong password' );
|
||||
$patron = $patron->get_from_storage;
|
||||
is( $patron->account_locked, 1, "Account is locked from failed login");
|
||||
( $checkpw, undef, undef ) = checkpw( $dbh, $patron->userid, $password, undef, undef, 1 );
|
||||
( $checkpw, undef, undef ) = checkpw( $patron->userid, $password, undef, undef, 1 );
|
||||
is( $checkpw, undef, 'checkpw returns undef with right password when account locked' );
|
||||
( $checkpw, undef, undef ) = checkpw( $dbh, $patron->cardnumber, $password, undef, undef, 1 );
|
||||
( $checkpw, undef, undef ) = checkpw( $patron->cardnumber, $password, undef, undef, 1 );
|
||||
is( $checkpw, undef, 'checkpw returns undefwith right password when logging in via cardnumber if account locked' );
|
||||
|
||||
};
|
||||
|
|
@ -488,7 +487,7 @@ subtest 'Check value of login_attempts in checkpw' => sub {
|
|||
$patron->password('123')->store; # yes, deliberately not hashed
|
||||
|
||||
is( $patron->account_locked, 0, 'Patron not locked' );
|
||||
my @test = checkpw( $dbh, $patron->userid, '123', undef, 'opac', 1 );
|
||||
my @test = checkpw( $patron->userid, '123', undef, 'opac', 1 );
|
||||
# Note: 123 will not be hashed to 123 !
|
||||
is( $test[0], 0, 'checkpw should have failed' );
|
||||
$patron->discard_changes; # refresh
|
||||
|
|
@ -496,7 +495,7 @@ subtest 'Check value of login_attempts in checkpw' => sub {
|
|||
is( $patron->account_locked, 1, 'Check locked status' );
|
||||
|
||||
# And another try to go over the limit: different return value!
|
||||
@test = checkpw( $dbh, $patron->userid, '123', undef, 'opac', 1 );
|
||||
@test = checkpw( $patron->userid, '123', undef, 'opac', 1 );
|
||||
is( @test, 0, 'checkpw failed again and returns nothing now' );
|
||||
$patron->discard_changes; # refresh
|
||||
is( $patron->login_attempts, 3, 'Login attempts not increased anymore' );
|
||||
|
|
@ -506,11 +505,11 @@ subtest 'Check value of login_attempts in checkpw' => sub {
|
|||
my $auth = Test::MockModule->new( 'C4::Auth' );
|
||||
$auth->mock( 'checkpw_hash', sub { return 1; } ); # not for production :)
|
||||
$patron->login_attempts(0)->store;
|
||||
@test = checkpw( $dbh, $patron->userid, '123', undef, 'opac', 1 );
|
||||
@test = checkpw( $patron->userid, '123', undef, 'opac', 1 );
|
||||
is( $test[0], 1, 'Build confidence in the mock' );
|
||||
$patron->login_attempts(-1)->store;
|
||||
is( $patron->account_locked, 1, 'Check administrative lockout' );
|
||||
@test = checkpw( $dbh, $patron->userid, '123', undef, 'opac', 1 );
|
||||
@test = checkpw( $patron->userid, '123', undef, 'opac', 1 );
|
||||
is( @test, 0, 'checkpw gave red' );
|
||||
$patron->discard_changes; # refresh
|
||||
is( $patron->login_attempts, -1, 'Still locked out' );
|
||||
|
|
|
|||
|
|
@ -28,8 +28,6 @@ use C4::Context;
|
|||
|
||||
use Koha::Patrons;
|
||||
|
||||
my $dbh = '';
|
||||
|
||||
# Start transaction
|
||||
my $schema = Koha::Database->new->schema;
|
||||
$schema->storage->txn_begin();
|
||||
|
|
@ -131,12 +129,11 @@ subtest 'checkpw_ldap tests' => sub {
|
|||
|
||||
plan tests => 4;
|
||||
|
||||
my $dbh = C4::Context->dbh;
|
||||
## Connection fail tests
|
||||
$desired_connection_result = 'error';
|
||||
warning_is {
|
||||
$ret =
|
||||
C4::Auth_with_ldap::checkpw_ldap( $dbh, 'hola', password => 'hey' );
|
||||
C4::Auth_with_ldap::checkpw_ldap( 'hola', password => 'hey' );
|
||||
}
|
||||
'LDAP connexion failed',
|
||||
'checkpw_ldap prints correct warning if LDAP conexion fails';
|
||||
|
|
@ -158,7 +155,7 @@ subtest 'checkpw_ldap tests' => sub {
|
|||
reload_ldap_module();
|
||||
|
||||
warning_like {
|
||||
$ret = C4::Auth_with_ldap::checkpw_ldap( $dbh, 'hola',
|
||||
$ret = C4::Auth_with_ldap::checkpw_ldap( 'hola',
|
||||
password => 'hey' );
|
||||
}
|
||||
qr/Anonymous LDAP bind failed: LDAP error #1: error_name/,
|
||||
|
|
@ -171,7 +168,7 @@ subtest 'checkpw_ldap tests' => sub {
|
|||
reload_ldap_module();
|
||||
|
||||
warning_like {
|
||||
$ret = C4::Auth_with_ldap::checkpw_ldap( $dbh, 'hola',
|
||||
$ret = C4::Auth_with_ldap::checkpw_ldap( 'hola',
|
||||
password => 'hey' );
|
||||
}
|
||||
qr/LDAP bind failed as kohauser hola: LDAP error #1: error_name/,
|
||||
|
|
@ -204,7 +201,7 @@ subtest 'checkpw_ldap tests' => sub {
|
|||
}
|
||||
);
|
||||
|
||||
C4::Auth_with_ldap::checkpw_ldap( $dbh, 'hola', password => 'hey' );
|
||||
C4::Auth_with_ldap::checkpw_ldap( 'hola', password => 'hey' );
|
||||
ok(
|
||||
Koha::Patrons->find($borrower->{borrowernumber})->extended_attributes->count,
|
||||
'Extended attributes are not deleted'
|
||||
|
|
@ -219,7 +216,7 @@ subtest 'checkpw_ldap tests' => sub {
|
|||
$patron->delete;
|
||||
reload_ldap_module();
|
||||
is(
|
||||
C4::Auth_with_ldap::checkpw_ldap( $dbh, 'hola', password => 'hey' ),
|
||||
C4::Auth_with_ldap::checkpw_ldap( 'hola', password => 'hey' ),
|
||||
0,
|
||||
'checkpw_ldap returns 0 if user lookup returns 0'
|
||||
);
|
||||
|
|
@ -228,7 +225,7 @@ subtest 'checkpw_ldap tests' => sub {
|
|||
reload_ldap_module();
|
||||
|
||||
warning_like {
|
||||
$ret = C4::Auth_with_ldap::checkpw_ldap( $dbh, 'hola',
|
||||
$ret = C4::Auth_with_ldap::checkpw_ldap( 'hola',
|
||||
password => 'hey' );
|
||||
}
|
||||
qr/LDAP bind failed as kohauser hola: LDAP error #1: error_name/,
|
||||
|
|
@ -246,7 +243,7 @@ subtest 'checkpw_ldap tests' => sub {
|
|||
reload_ldap_module();
|
||||
|
||||
warning_like {
|
||||
$ret = C4::Auth_with_ldap::checkpw_ldap( $dbh, 'hola',
|
||||
$ret = C4::Auth_with_ldap::checkpw_ldap( 'hola',
|
||||
password => 'hey' );
|
||||
}
|
||||
qr/LDAP bind failed as kohauser hola: LDAP error #1: error_name/,
|
||||
|
|
@ -271,7 +268,7 @@ subtest 'checkpw_ldap tests' => sub {
|
|||
reload_ldap_module();
|
||||
|
||||
warning_like {
|
||||
$ret = C4::Auth_with_ldap::checkpw_ldap( $dbh, 'hola',
|
||||
$ret = C4::Auth_with_ldap::checkpw_ldap( 'hola',
|
||||
password => 'hey' );
|
||||
}
|
||||
qr/LDAP bind failed as ldapuser cn=Manager,dc=metavore,dc=com: LDAP error #1: error_name/,
|
||||
|
|
@ -286,7 +283,7 @@ qr/LDAP bind failed as ldapuser cn=Manager,dc=metavore,dc=com: LDAP error #1: er
|
|||
reload_ldap_module();
|
||||
|
||||
warning_like {
|
||||
$ret = C4::Auth_with_ldap::checkpw_ldap( $dbh, 'hola',
|
||||
$ret = C4::Auth_with_ldap::checkpw_ldap( 'hola',
|
||||
password => 'hey' );
|
||||
}
|
||||
qr/LDAP Auth rejected : invalid password for user 'hola'./,
|
||||
|
|
@ -300,7 +297,7 @@ qr/LDAP Auth rejected : invalid password for user 'hola'./,
|
|||
reload_ldap_module();
|
||||
|
||||
warning_like {
|
||||
$ret = C4::Auth_with_ldap::checkpw_ldap( $dbh, 'hola',
|
||||
$ret = C4::Auth_with_ldap::checkpw_ldap( 'hola',
|
||||
password => 'hey' );
|
||||
}
|
||||
qr/LDAP bind failed as ldapuser cn=Manager,dc=metavore,dc=com: LDAP error #1: error_name/,
|
||||
|
|
@ -313,7 +310,7 @@ qr/LDAP bind failed as ldapuser cn=Manager,dc=metavore,dc=com: LDAP error #1: er
|
|||
reload_ldap_module();
|
||||
|
||||
warning_like {
|
||||
$ret = C4::Auth_with_ldap::checkpw_ldap( $dbh, 'hola',
|
||||
$ret = C4::Auth_with_ldap::checkpw_ldap( 'hola',
|
||||
password => 'hey' );
|
||||
}
|
||||
qr/LDAP Auth rejected : invalid password for user 'hola'./,
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@ use t::lib::TestBuilder;
|
|||
# Make sure we can rollback.
|
||||
our $schema = Koha::Database->new->schema;
|
||||
$schema->storage->txn_begin;
|
||||
our $dbh = C4::Context->dbh;
|
||||
|
||||
subtest 'Existing tests' => sub {
|
||||
plan tests => 3;
|
||||
|
|
@ -47,17 +46,15 @@ subtest 'Existing tests' => sub {
|
|||
ok($success, "logaction seemed to work");
|
||||
|
||||
# We want numbers to be the same between runs.
|
||||
$dbh->do("DELETE FROM action_logs;");
|
||||
Koha::ActionLogs->search->delete;
|
||||
|
||||
t::lib::Mocks::mock_preference('CronjobLog',0);
|
||||
cronlogaction();
|
||||
my $cronJobCount = $dbh->selectrow_array("SELECT COUNT(*) FROM action_logs WHERE module='CRONJOBS';",{});
|
||||
is($cronJobCount,0,"Cronjob not logged as expected.");
|
||||
is(Koha::ActionLogs->search({ module => 'CRONJOBS' })->count,0,"Cronjob not logged as expected.");
|
||||
|
||||
t::lib::Mocks::mock_preference('CronjobLog',1);
|
||||
cronlogaction();
|
||||
$cronJobCount = $dbh->selectrow_array("SELECT COUNT(*) FROM action_logs WHERE module='CRONJOBS';",{});
|
||||
is($cronJobCount,1,"Cronjob logged as expected.");
|
||||
is(Koha::ActionLogs->search({ module => 'CRONJOBS' })->count,0,"Cronjob logged as expected.");
|
||||
};
|
||||
|
||||
subtest 'logaction(): interface is correctly logged' => sub {
|
||||
|
|
@ -65,28 +62,28 @@ subtest 'logaction(): interface is correctly logged' => sub {
|
|||
plan tests => 4;
|
||||
|
||||
# No interface passed, using C4::Context->interface
|
||||
$dbh->do("DELETE FROM action_logs;");
|
||||
Koha::ActionLogs->search->delete;
|
||||
C4::Context->interface( 'commandline' );
|
||||
logaction( "MEMBERS", "MODIFY", 1, "test operation");
|
||||
my $log = Koha::ActionLogs->search->next;
|
||||
is( $log->interface, 'commandline', 'Interface correctly deduced (commandline)');
|
||||
|
||||
# No interface passed, using C4::Context->interface
|
||||
$dbh->do("DELETE FROM action_logs;");
|
||||
Koha::ActionLogs->search->delete;
|
||||
C4::Context->interface( 'opac' );
|
||||
logaction( "MEMBERS", "MODIFY", 1, "test operation");
|
||||
$log = Koha::ActionLogs->search->next;
|
||||
is( $log->interface, 'opac', 'Interface correctly deduced (opac)');
|
||||
|
||||
# Explicit interfaces
|
||||
$dbh->do("DELETE FROM action_logs;");
|
||||
Koha::ActionLogs->search->delete;
|
||||
C4::Context->interface( 'intranet' );
|
||||
logaction( "MEMBERS", "MODIFY", 1, 'test info', 'intranet');
|
||||
$log = Koha::ActionLogs->search->next;
|
||||
is( $log->interface, 'intranet', 'Passed interface is respected (intranet)');
|
||||
|
||||
# Explicit interfaces
|
||||
$dbh->do("DELETE FROM action_logs;");
|
||||
Koha::ActionLogs->search->delete;
|
||||
C4::Context->interface( 'sip' );
|
||||
logaction( "MEMBERS", "MODIFY", 1, 'test info', 'sip');
|
||||
$log = Koha::ActionLogs->search->next;
|
||||
|
|
@ -114,7 +111,7 @@ subtest 'GDPR logging' => sub {
|
|||
t::lib::Mocks::mock_preference('AuthFailureLog', 1);
|
||||
my $strong_password = 'N0tStr0ngAnyM0reN0w:)';
|
||||
$patron->set_password({ password => $strong_password });
|
||||
my @ret = checkpw( $dbh, $patron->userid, 'WrongPassword', undef, undef, 1);
|
||||
my @ret = checkpw( $patron->userid, 'WrongPassword', undef, undef, 1);
|
||||
is( $ret[0], 0, 'Authentication failed' );
|
||||
# Look for auth failure but NOT on patron id, pass userid in info parameter
|
||||
$logs = Koha::ActionLogs->search(
|
||||
|
|
@ -126,7 +123,7 @@ subtest 'GDPR logging' => sub {
|
|||
);
|
||||
is( $logs->count, 1, 'We should find one auth failure with this userid' );
|
||||
t::lib::Mocks::mock_preference('AuthFailureLog', 0);
|
||||
@ret = checkpw( $dbh, $patron->userid, 'WrongPassword', undef, undef, 1);
|
||||
@ret = checkpw( $patron->userid, 'WrongPassword', undef, undef, 1);
|
||||
$logs = Koha::ActionLogs->search(
|
||||
{
|
||||
module => 'AUTH',
|
||||
|
|
@ -136,7 +133,7 @@ subtest 'GDPR logging' => sub {
|
|||
);
|
||||
is( $logs->count, 1, 'Still only one failure with this userid' );
|
||||
t::lib::Mocks::mock_preference('AuthSuccessLog', 1);
|
||||
@ret = checkpw( $dbh, $patron->userid, $strong_password, undef, undef, 1);
|
||||
@ret = checkpw( $patron->userid, $strong_password, undef, undef, 1);
|
||||
is( $ret[0], 1, 'Authentication succeeded' );
|
||||
# Now we can look for patron id
|
||||
$logs = Koha::ActionLogs->search(
|
||||
|
|
|
|||
Loading…
Reference in New Issue