lemonldap-ng/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Auth/Radius.pm

75 lines
1.5 KiB
Perl
Raw Normal View History

2017-01-30 22:24:44 +01:00
package Lemonldap::NG::Portal::Auth::Radius;
use strict;
use Mouse;
use Authen::Radius;
use Lemonldap::NG::Portal::Main::Constants qw(
PE_OK
2021-11-24 14:12:48 +01:00
PE_BADCREDENTIALS
2017-01-30 22:24:44 +01:00
PE_RADIUSCONNECTFAILED
);
extends qw(Lemonldap::NG::Portal::Auth::_WebForm);
2021-11-24 14:12:48 +01:00
our $VERSION = '2.0.14';
2017-01-30 22:24:44 +01:00
# PROPERTIES
has radius => ( is => 'rw' );
2017-02-15 07:41:50 +01:00
has authnLevel => (
is => 'rw',
lazy => 1,
2017-02-15 07:41:50 +01:00
default => sub {
$_[0]->conf->{radiusAuthnLevel};
}
);
2017-01-30 22:24:44 +01:00
sub initRadius {
$_[0]->radius(
Authen::Radius->new(
Host => $_[0]->conf->{radiusServer},
Secret => $_[0]->conf->{radiusSecret}
)
);
}
# INITIALIZATION
sub init {
my $self = shift;
unless ( $self->initRadius ) {
$self->error('Radius initialisation failed');
2017-01-30 22:24:44 +01:00
}
2021-11-24 14:12:48 +01:00
return $self->Lemonldap::NG::Portal::Auth::_WebForm::init();
2017-01-30 22:24:44 +01:00
}
# RUNNING METHODS
sub authenticate {
my ( $self, $req ) = @_;
$self->initRadius unless $self->radius;
unless ( $self->radius ) {
$self->setSecurity($req);
return PE_RADIUSCONNECTFAILED;
}
2017-01-30 22:24:44 +01:00
$self->logger->debug(
"Send authentication request ($req->{user}) to Radius server ($self->{conf}->{radiusServer})"
);
my $res = $self->radius->check_pwd( $req->user, $req->data->{password} );
2017-02-15 07:41:50 +01:00
unless ( $res == 1 ) {
$self->userLogger->warn("Unable to authenticate $req->{user}!");
$self->setSecurity($req);
2017-01-30 22:24:44 +01:00
return PE_BADCREDENTIALS;
}
return PE_OK;
}
sub authLogout {
2021-02-01 22:30:37 +01:00
return PE_OK;
2017-01-30 22:24:44 +01:00
}
1;