lemonldap-ng/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Auth/Radius.pm
2022-01-02 22:56:46 +01:00

75 lines
1.5 KiB
Perl

package Lemonldap::NG::Portal::Auth::Radius;
use strict;
use Mouse;
use Authen::Radius;
use Lemonldap::NG::Portal::Main::Constants qw(
PE_OK
PE_BADCREDENTIALS
PE_RADIUSCONNECTFAILED
);
extends qw(Lemonldap::NG::Portal::Auth::_WebForm);
our $VERSION = '2.0.14';
# PROPERTIES
has radius => ( is => 'rw' );
has authnLevel => (
is => 'rw',
lazy => 1,
default => sub {
$_[0]->conf->{radiusAuthnLevel};
}
);
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');
}
return $self->Lemonldap::NG::Portal::Auth::_WebForm::init();
}
# RUNNING METHODS
sub authenticate {
my ( $self, $req ) = @_;
$self->initRadius unless $self->radius;
unless ( $self->radius ) {
$self->setSecurity($req);
return PE_RADIUSCONNECTFAILED;
}
$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} );
unless ( $res == 1 ) {
$self->userLogger->warn("Unable to authenticate $req->{user}!");
$self->setSecurity($req);
return PE_BADCREDENTIALS;
}
return PE_OK;
}
sub authLogout {
return PE_OK;
}
1;