Lemonldap-NG-Portal
view release on metacpan or search on metacpan
lib/Lemonldap/NG/Portal/Lib/2fDevices.pm view on Meta::CPAN
package Lemonldap::NG::Portal::Lib::2fDevices;
=pod
=head1 NAME
Lemonldap::NG::Portal::Lib::2fDevices - Role for registrable second factors
=head1 DESCRIPTION
This role provides LemonLDAP::NG modules with a high-level interface to storing
information on registrable second factors into the persistent session.
It is recommended that _2fDevices is never accessed directly from code outside
of this module
=head1 METHODS
=over
=cut
use strict;
use Mouse::Role;
use Lemonldap::NG::Common::Util qw/display2F/;
use JSON;
requires qw(p conf logger);
our $VERSION = '2.23.0';
=item update2fDevice
Updates one field of a registered device
$self->update2fDevice($req, $info, $type, $key, $value, $update_key, $update_value);
=over 4
=item req: Current LemonLDAP::NG request
=item info: hashref of current session information
=item type: 'type' field of the device to update
=item key, value: update the device whose 'key' field equals value
=item update_key, update_value: set the matched devices' 'update_key' field to update_value
=back
Returns true if the update was sucessful
=cut
sub update2fDevice {
my ( $self, $req, $info, $type, $key, $value, $update_key, $update_value )
= @_;
my $user = $info->{ $self->conf->{whatToTrace} };
my $_2fDevices = $self->get2fDevices( $req, $info );
return 0 unless $_2fDevices;
my @found =
grep { $_->{type} eq $type and $_->{$key} eq $value } @{$_2fDevices};
for my $device (@found) {
$device->{$update_key} = $update_value;
}
if (@found) {
$self->p->updatePersistentSession( $req,
{ _2fDevices => to_json($_2fDevices) }, $user );
return 1;
}
return 0;
}
=item add2fDevice
Store a new device
$self->add2fDevice($req, $info, $device);
=over 4
=item req: Current LemonLDAP::NG request
=item info: hashref of current session information
=item device: hashref of device details. It must contain at least a 'type',
'name' and 'epoch' key
=back
Returns true if the update was sucessful
=cut
sub add2fDevice {
my ( $self, $req, $info, $device ) = @_;
my $_2fDevices = $self->get2fDevices( $req, $info );
push @{$_2fDevices}, $device;
my $uid = $info->{ $self->conf->{whatToTrace} };
$self->auditLog(
$req,
message => (
"User " . $uid . " registered 2F device: " . display2F($device)
),
code => "2FA_DEVICE_REGISTERED",
user => $uid,
device => display2F($device),
( run in 2.614 seconds using v1.01-cache-2.11-cpan-97f6503c9c8 )