delete 2f device (#1392)

environments/ppa-mbqj77/deployments/1
Christophe Maudoux 7 years ago
parent 0daded373b
commit fe01c658c3
  1. 88
      lemonldap-ng-manager/lib/Lemonldap/NG/Manager/2ndFA.pm
  2. 2
      lemonldap-ng-manager/site/coffee/2ndfa.coffee
  3. 2
      lemonldap-ng-manager/site/htdocs/static/js/2ndfa.js
  4. 2
      lemonldap-ng-manager/site/htdocs/static/js/2ndfa.min.js
  5. 2
      lemonldap-ng-manager/site/templates/2ndfa.tpl

@ -36,23 +36,23 @@ sub addRoutes {
['GET']
)
# DELETE 2FA KEY
# DELETE 2FA DEVICE
->addRoute(
sfa => { ':sessionType' => { ':sessionId' => 'delete2FAKey' } },
sfa => { ':sessionType' => { ':sessionId' => 'delete2FA' } },
['DELETE']
)
);
# ADD 2FA KEY
->addRoute(
sfa => { ':sessionType' => { ':sessionId' => 'add2FAKey' } },
['PUT']
)
## ADD 2FA DEVICE
#->addRoute(
#sfa => { ':sessionType' => { ':sessionId' => 'add2FA' } },
#['PUT']
#)
# VERIFY 2FA KEY
->addRoute(
sfa => { ':sessionType' => { ':sessionId' => 'verify2FAKey' } },
['POST']
);
## VERIFY 2FA DEVICE
#->addRoute(
#sfa => { ':sessionType' => { ':sessionId' => 'verify2FA' } },
#['POST']
#);
$self->setTypes($conf);
@ -61,13 +61,14 @@ sub addRoutes {
$self->{hiddenAttributes} //= "_password";
$self->{TOTPCheck} = '1';
$self->{U2FCheck} = '1';
$self->{UBKCheck} = '1';
}
###################
# II. 2FA METHODS #
###################
sub delete2FAKey {
sub delete2FA {
my ( $self, $req, $session, $skey ) = @_;
@ -78,37 +79,41 @@ sub delete2FAKey {
my $Key = $params->{Key};
if ( $Key =~ /\bU2F\b/ ) {
$self->logger->debug("Call procedure deleteU2FKey");
return $self->deleteU2FKey( $req, $session, $skey );
$self->logger->debug("Call procedure deleteU2F");
return $self->deleteU2F( $req, $session, $skey );
}
elsif ( $Key =~ /\bTOTP\b/ ) {
$self->logger->debug("Call procedure deleteTOTPKey");
return $self->deleteTOTPKey( $req, $session, $skey );
$self->logger->debug("Call procedure deleteTOTP");
return $self->deleteTOTP( $req, $session, $skey );
}
elsif ( $Key =~ /\bUBK\b/ ) {
$self->logger->debug("Call procedure deleteUBK");
return $self->deleteUBK( $req, $session, $skey );
}
else {
return $self->sendError( $req, undef, 400 );
}
}
sub add2FAKey {
#sub add2FA {
my ( $self, $req, $session, $skey ) = @_;
#my ( $self, $req, $session, $skey ) = @_;
eval 'use Crypt::U2F::Server::Simple';
if ($@) {
$self->error("Can't load U2F library: $@");
return 0;
}
#eval 'use Crypt::U2F::Server::Simple';
#if ($@) {
#$self->error("Can't load U2F library: $@");
#return 0;
#}
return $self->addU2FKey( $req, $session, $skey );
}
#return $self->addU2FKey( $req, $session, $skey );
#}
sub verify2FAKey {
#sub verify2FA {
my ( $self, $req, $session, $skey ) = @_;
#my ( $self, $req, $session, $skey ) = @_;
return $self->addU2FKey( $req, $session, $skey );
}
#return $self->addU2FKey( $req, $session, $skey );
#}
########################
# III. DISPLAY METHODS #
@ -137,8 +142,7 @@ sub sfa {
# 2.1 Get fields to require
my @fields = (
'_httpSessionType', $self->{ipField},
$whatToTrace, '_u2fKeyHandle',
'_totp2fSecret'
$whatToTrace, '_2fDevices'
);
if ( my $groupBy = $params->{groupBy} ) {
$groupBy =~ s/^substr\((\w+)(?:,\d+(?:,\d+)?)?\)$/$1/;
@ -155,9 +159,10 @@ sub sfa {
$moduleOptions->{backend} = $mod->{module};
# Select 2FA sessions to display
if ( defined $params->{TOTPCheck} and defined $params->{TOTPCheck} ) {
if ( defined $params->{TOTPCheck} or defined $params->{U2FCheck} or defined $params->{UBKCheck}) {
$self->{TOTPCheck} = delete $params->{TOTPCheck};
$self->{U2FCheck} = delete $params->{U2FCheck};
$self->{UBKCheck} = delete $params->{UBKCheck};
}
my %filters = map {
@ -236,15 +241,22 @@ sub sfa {
if ( $self->{U2FCheck} eq '2' ) {
foreach my $session ( keys %$res ) {
delete $res->{$session}
unless ( defined $res->{$session}->{_u2fKeyHandle}
and length $res->{$session}->{_u2fKeyHandle} );
unless ( defined $res->{$session}->{_2fDevices}
and $res->{$session}->{_2fDevices} =~ /"type":\s*"U2F"/s );
}
}
if ( $self->{TOTPCheck} eq '2' ) {
foreach my $session ( keys %$res ) {
delete $res->{$session}
unless ( defined $res->{$session}->{_totp2fSecret}
and length $res->{$session}->{_totp2fSecret} );
unless ( defined $res->{$session}->{_2fDevices}
and $res->{$session}->{_2fDevices} =~ /"type":\s*"TOTP"/s );
}
}
if ( $self->{UBKCheck} eq '2' ) {
foreach my $session ( keys %$res ) {
delete $res->{$session}
unless ( defined $res->{$session}->{_2fDevices}
and $res->{$session}->{_2fDevices} =~ /"type":\s*"UBK"/s );
}
}

@ -306,7 +306,7 @@ llapp.controller 'SessionsExplorerCtrl', ['$scope', '$translator', '$location',
myDate = newDate.toLocaleString()
subres.push
title: title
value: "#{name} #{myDate}"
value: "#{name} --> #{myDate}"
delete session[attr]
else
subres.push

@ -344,7 +344,7 @@
}
subres.push({
title: title,
value: name + " " + myDate
value: name + " --> " + myDate
});
}
delete session[attr];

File diff suppressed because one or more lines are too long

@ -19,6 +19,8 @@
<label class="form-check-label" for="U2FCheck">U2F</label>&nbsp;&nbsp;
<input type="checkbox" ng-model="TOTPCheck" class="form-check-input" ng-true-value="'2'" ng-false-value="'1'" ng-change="search2FA()"/>
<label class="form-check-label" for="TOTPCheck">TOTP</label>
<input type="checkbox" ng-model="UBKCheck" class="form-check-input" ng-true-value="'2'" ng-false-value="'1'" ng-change="search2FA()"/>
<label class="form-check-label" for="UBKCheck">TOTP</label>
</div>
</form>
</ul>

Loading…
Cancel
Save