diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Lib/Choice.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Lib/Choice.pm index 329877779..155003779 100644 --- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Lib/Choice.pm +++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Lib/Choice.pm @@ -21,6 +21,11 @@ sub init { my ( $self, $type ) = @_; $self->type($type); + unless( $self->conf->{authChoiceModules} and %{ $self->conf->{authChoiceModules} } ) { + $self->error("'authChoiceModules' is empty"); + return 0; + } + foreach my $name ( keys %{ $self->conf->{authChoiceModules} } ) { my @mods = split( /[;\|]/, $self->conf->{authChoiceModules}->{$name} ); diff --git a/lemonldap-ng-portal/t/09-AuthChoice.t b/lemonldap-ng-portal/t/09-AuthChoice.t new file mode 100644 index 000000000..9df3194a9 --- /dev/null +++ b/lemonldap-ng-portal/t/09-AuthChoice.t @@ -0,0 +1,82 @@ +use Test::More; +use strict; +use IO::String; + +require 't/test-lib.pm'; + +my $res; + +eval { unlink 't/userdb.db' }; + +SKIP: { + eval { require DBI; require DBD::SQLite; }; + if ($@) { + skip 'DBD::SQLite not found', 3; + } + elsif ( !$ENV{LDAPSERVER} ) { + skip 'No LDAP server given', 3; + } + my $dbh = DBI->connect("dbi:SQLite:dbname=t/userdb.db"); + $dbh->do('CREATE TABLE users (user text,password text,name text)'); + $dbh->do("INSERT INTO users VALUES ('dwho','dwho','Doctor who')"); + + init( + { + logLevel => 'error', + useSafeJail => 1, + authentication => 'Choice', + userDB => 'Choice', + + authChoiceParam => 'test', + authChoiceModules => { + ldap => 'LDAP;LDAP;LDAP', + sql => 'DBI;DBI;DBI', + }, + + dbiAuthChain => 'dbi:SQLite:dbname=t/userdb.db', + dbiAuthUser => '', + dbiAuthPassword => '', + dbiAuthTable => 'users', + dbiAuthLoginCol => 'user', + dbiAuthPasswordCol => 'password', + dbiAuthPasswordHash => '', + + LDAPFilter => $ENV{LDAPFILTER} || '(cn=$user)', + ldapServer => $ENV{LDAPSERVER}, + ldapBase => $ENV{LDAPBASE}, + managerDn => $ENV{MANAGERDN} || '', + managerPassword => $ENV{MANAGERPASSWORD} || '', + } + ); + foreach my $postString ( + 'user=' + . ( $ENV{LDAPACCOUNT} || 'dwho' ) + . '&password=' + . ( $ENV{LDAPPWD} || 'dwho' ) + . '&test=ldap', + 'user=dwho&password=dwho&test=sql' + ) + { + + # Try yo authenticate + # ------------------- + ok( + $res = &client->_post( + '/', IO::String->new($postString), + length => length($postString) + ), + 'Auth query' + ); + ok( $res->[0] == 200, 'Response is 200' ) or explain( $res->[0], 200 ); + my $cookies = getCookies($res); + my $id; + ok( $id = $cookies->{lemonldap}, 'Get cookie' ) + or explain( $res, 'Set-Cookie: something' ); + logout($id); + } + + clean_sessions(); +} +count(3); +eval { unlink 't/userdb.db' }; +done_testing( count() );