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

(-)a/C4/Auth.pm (-1 / +15 lines)
Lines 40-45 use Koha::Library::Groups; Link Here
40
use Koha::Libraries;
40
use Koha::Libraries;
41
use Koha::Patrons;
41
use Koha::Patrons;
42
use Koha::Patron::Consents;
42
use Koha::Patron::Consents;
43
use Koha::Plugins;
43
use POSIX qw/strftime/;
44
use POSIX qw/strftime/;
44
use List::MoreUtils qw/ any /;
45
use List::MoreUtils qw/ any /;
45
use Encode qw( encode is_utf8);
46
use Encode qw( encode is_utf8);
Lines 1774-1783 sub checkpw { Link Here
1774
    my ( $dbh, $userid, $password, $query, $type, $no_set_userenv ) = @_;
1775
    my ( $dbh, $userid, $password, $query, $type, $no_set_userenv ) = @_;
1775
    $type = 'opac' unless $type;
1776
    $type = 'opac' unless $type;
1776
1777
1778
    if ( C4::Context->preference('UseKohaPlugins') && C4::Context->config("enable_plugins") ) {
1779
        my @plugins = Koha::Plugins->new()->GetPlugins({
1780
            method => 'checkpw',
1781
        });
1782
1783
        @plugins = sort { $a->retrieve_data('priority') <=> $b->retrieve_data('priority') } @plugins;
1784
        foreach my $plugin ( @plugins ) {
1785
            my ( $retval, $retcard, $retuserid ) = $plugin->checkpw(@_);
1786
            if ( $retval == 1 ) {
1787
                return ( $retval, $retcard, $retuserid );
1788
            }
1789
        }
1790
    }
1791
    
1777
    # Get shibboleth login attribute
1792
    # Get shibboleth login attribute
1778
    my $shib = C4::Context->config('useshibboleth') && shib_ok();
1793
    my $shib = C4::Context->config('useshibboleth') && shib_ok();
1779
    my $shib_login = $shib ? get_login_shib() : undef;
1794
    my $shib_login = $shib ? get_login_shib() : undef;
1780
1781
    my @return;
1795
    my @return;
1782
    my $patron = Koha::Patrons->find({ userid => $userid });
1796
    my $patron = Koha::Patrons->find({ userid => $userid });
1783
    my $check_internal_as_fallback = 0;
1797
    my $check_internal_as_fallback = 0;
(-)a/Koha/Plugins.pm (+1 lines)
Lines 82-87 sub GetPlugins { Link Here
82
            # Limit results by method or metadata
82
            # Limit results by method or metadata
83
            next if $method && !$plugin->can($method);
83
            next if $method && !$plugin->can($method);
84
            my $plugin_metadata = $plugin->get_metadata;
84
            my $plugin_metadata = $plugin->get_metadata;
85
85
            next if $plugin_metadata
86
            next if $plugin_metadata
86
                and %$req_metadata
87
                and %$req_metadata
87
                and any { !$plugin_metadata->{$_} || $plugin_metadata->{$_} ne $req_metadata->{$_} } keys %$req_metadata;
88
                and any { !$plugin_metadata->{$_} || $plugin_metadata->{$_} ne $req_metadata->{$_} } keys %$req_metadata;
(-)a/t/Koha/Plugin/TestAuth.pm (+75 lines)
Line 0 Link Here
1
package Koha::Plugin::TestAuth;
2
3
use Modern::Perl;
4
5
use base 'Koha::Plugins::Base';
6
7
our $VERSION = '1.0';
8
our $metadata = {
9
    name => 'Authentication test plugin',
10
    author => 'Alex Arnaud <alex.arnaud@biblibre.com>',
11
    description => 'Plugin for testing authentication plugin API',
12
    date_authored => '2018-02-28',
13
    date_updated => '2018-02-28',
14
    minimum_version => '17.05',
15
    maximum_version => undef,
16
    type => 'authentication',
17
    version => $VERSION,
18
};
19
20
=head1 METHODS
21
22
=head2 new
23
24
    Koha::Plugin::TestAuth->new();
25
26
    Create new object
27
28
=cut
29
30
sub new {
31
    my ($class, $args) = @_;
32
33
    $args->{metadata} = $metadata;
34
    $args->{metadata}->{class} = $class;
35
36
    my $self = $class->SUPER::new($args);
37
38
    return $self;
39
}
40
41
=head2 retrieve_data
42
43
Just return priority. It overrides the one in Koha::Plugin::Base for the test.
44
45
=cut
46
47
sub retrieve_data {
48
    my ( $self, $key ) = @_;
49
50
    if ( $key eq 'priority' ) {
51
        return 1;
52
    }
53
54
}
55
56
=head2 checkpw
57
58
  ($result, cardnumber, $userid) =
59
    checkpw($self, $dbh, $userid, $password, $query, $type, $no_set_userenv);
60
61
  Authenticate a patron using login/password.
62
63
=cut
64
65
sub checkpw {
66
    my ( $self, $dbh, $userid, $password, $query, $type, $no_set_userenv ) = @_;
67
68
    if ( $userid = 'test' && $password eq 'test' ) {
69
        return (1, 'test', 'test');
70
    }
71
72
    return (0, '', '');
73
}
74
75
1;
(-)a/t/db_dependent/Auth.t (-2 / +25 lines)
Lines 10-16 use CGI qw ( -utf8 ); Link Here
10
use Test::MockObject;
10
use Test::MockObject;
11
use Test::MockModule;
11
use Test::MockModule;
12
use List::MoreUtils qw/all any none/;
12
use List::MoreUtils qw/all any none/;
13
use Test::More tests => 20;
13
use Test::More tests => 26;
14
use Test::Warn;
14
use Test::Warn;
15
use t::lib::Mocks;
15
use t::lib::Mocks;
16
use t::lib::TestBuilder;
16
use t::lib::TestBuilder;
Lines 20-27 use C4::Members; Link Here
20
use Koha::AuthUtils qw/hash_password/;
20
use Koha::AuthUtils qw/hash_password/;
21
use Koha::Database;
21
use Koha::Database;
22
use Koha::Patrons;
22
use Koha::Patrons;
23
use File::Basename;
23
24
24
BEGIN {
25
BEGIN {
26
    push( @INC, dirname(__FILE__) . '/..' );
27
25
    use_ok('C4::Auth');
28
    use_ok('C4::Auth');
26
}
29
}
27
30
Lines 32-37 my $dbh = C4::Context->dbh; Link Here
32
# FIXME: SessionStorage defaults to mysql, but it seems to break transaction
35
# FIXME: SessionStorage defaults to mysql, but it seems to break transaction
33
# handling
36
# handling
34
t::lib::Mocks::mock_preference( 'SessionStorage', 'tmp' );
37
t::lib::Mocks::mock_preference( 'SessionStorage', 'tmp' );
38
t::lib::Mocks::mock_preference( 'UseKohaPlugins', 0 );
35
39
36
$schema->storage->txn_begin;
40
$schema->storage->txn_begin;
37
41
Lines 129-134 subtest 'no_set_userenv parameter tests' => sub { Link Here
129
    ok( checkpw( $dbh, $patron->userid, $password, undef, undef, 1 ), 'checkpw returns true' );
133
    ok( checkpw( $dbh, $patron->userid, $password, undef, undef, 1 ), 'checkpw returns true' );
130
    is( C4::Context->userenv, undef, 'Userenv should be undef as required' );
134
    is( C4::Context->userenv, undef, 'Userenv should be undef as required' );
131
    C4::Context->_new_userenv('DUMMY SESSION');
135
    C4::Context->_new_userenv('DUMMY SESSION');
136
<<<<<<< 41e0ff7cd6240c2c9ba2d1bec816b191ef091eb1
132
    C4::Context->set_userenv(0,0,0,'firstname','surname', $library->branchcode, 'Library 1', 0, '', '');
137
    C4::Context->set_userenv(0,0,0,'firstname','surname', $library->branchcode, 'Library 1', 0, '', '');
133
    is( C4::Context->userenv->{branch}, $library->branchcode, 'Userenv gives correct branch' );
138
    is( C4::Context->userenv->{branch}, $library->branchcode, 'Userenv gives correct branch' );
134
    ok( checkpw( $dbh, $patron->userid, $password, undef, undef, 1 ), 'checkpw returns true' );
139
    ok( checkpw( $dbh, $patron->userid, $password, undef, undef, 1 ), 'checkpw returns true' );
Lines 136-141 subtest 'no_set_userenv parameter tests' => sub { Link Here
136
    ok( checkpw( $dbh, $patron->userid, $password, undef, undef, 0 ), 'checkpw still returns true' );
141
    ok( checkpw( $dbh, $patron->userid, $password, undef, undef, 0 ), 'checkpw still returns true' );
137
    isnt( C4::Context->userenv->{branch}, $library->branchcode, 'Userenv branch is overwritten if no_set_userenv is false' );
142
    isnt( C4::Context->userenv->{branch}, $library->branchcode, 'Userenv branch is overwritten if no_set_userenv is false' );
138
};
143
};
144
=======
145
    C4::Context->set_userenv(0,0,0,'firstname','surname', $library->{branchcode}, 'Library 1', 0, '', '');
146
    is( C4::Context->userenv->{branch}, $library->{branchcode}, 'Userenv gives correct branch' );
147
    ok( checkpw( $dbh, $patron->{userid}, 'password', undef, undef, 1 ), 'checkpw returns true' );
148
    is( C4::Context->userenv->{branch}, $library->{branchcode}, 'Userenv branch is preserved if no_set_userenv is true' );
149
    ok( checkpw( $dbh, $patron->{userid}, 'password', undef, undef, 0 ), 'checkpw still returns true' );
150
    isnt( C4::Context->userenv->{branch}, $library->{branchcode}, 'Userenv branch is overwritten if no_set_userenv is false' );
151
152
    t::lib::Mocks::mock_preference( 'UseKohaPlugins', 1 );
153
    my @result = checkpw( $dbh, $patron->{userid}, 'wrong_password', undef, undef, 1 );
154
    is( $result[0], 0, 'With TestAuth plugin, checkpw returns 0' );
155
    is( $result[1], undef, 'With TestAuth plugin, checkpw returns empty cardnumber' );
156
    is( $result[2], undef, 'With TestAuth plugin, checkpw returns empty userid' );
157
    @result = checkpw( $dbh, 'test', 'test', undef, undef, 1 );
158
    is( $result[0], 1, 'With TestAuth plugin, checkpw returns 1' );
159
    is( $result[1], 'test', 'With TestAuth plugin, checkpw returns test cardnumber' );
160
    is( $result[2], 'test', 'With TestAuth plugin, checkpw returns test userid' );
161
}
162
>>>>>>> Bug 20340 - Ability to add and use authentication plugins
139
163
140
# get_template_and_user tests
164
# get_template_and_user tests
141
165
142
- 

Return to bug 20340