Wrap entry points (#595)

This commit is contained in:
Xavier Guimard 2016-06-28 21:27:57 +00:00
parent 72f486c1b6
commit daa100ca32

View File

@ -6,16 +6,46 @@ package Lemonldap::NG::Portal::Auth::Wrapper;
use strict;
use Mouse;
use Lemonldap::NG::Portal::Main::Constants qw(PE_OK);
our $VERSION = '2.0.0';
extends 'Lemonldap::NG::Portal::Auth::Base';
# Current underlying auth module
has current => ( is => 'rw' );
has availableModules => ( is => 'rw', default => sub { {} } );
# Wrappers for portal entry points: entry points are enabled only for active
# authentication module
#
# Note that "beforeAuth" can't be used here and must be wrapped in auth
# module
#
# Note also that auth module must store in $req->datas->{enabledMods} a ref
# to each enabled underlying auth modules
sub betweenAuthAndDatas { '_betweenAuthAndDatas' }
sub afterDatas { '_afterDatas' }
sub forAuthUser { '_forAuthUser' }
sub beforeLogout { '_beforeLogout' }
sub _betweenAuthAndDatas { _wrapEntryPoint( @_, 'betweenAuthAndDatas' ); }
sub _afterDatas { _wrapEntryPoint( @_, 'afterDatas' ); }
sub _forAuthUser { _wrapEntryPoint( @_, 'forAuthUser' ); }
sub _beforeLogout { _wrapEntryPoint( @_, 'beforeLogout' ); }
sub _wrapEntryPoint {
my ( $self, $req, $name ) = @_;
foreach ( @{ $req->datas->{enabledMods} } ) {
if ( $_->can($name) ) {
# Launch sub and break loop if result isn't PE_OK (==0)
if ( my $r = $_->$name($req) ) {
return $r;
}
}
}
return PE_OK;
}
# loadModule() fakes portal loadModule()
sub loadPlugin {
my ( $self, $name, $module ) = @_;
@ -24,6 +54,7 @@ sub loadPlugin {
}
sub AUTOLOAD {
no strict;
# Unknown methods are tried with real portal
my $self = shift;