Lemonldap-NG-Portal
view release on metacpan or search on metacpan
lib/Lemonldap/NG/Portal/Lib/OneTimeToken.pm view on Meta::CPAN
# Dereference $infos
my %h = %$infos;
$self->cache->set( $id, to_json( \%h ), $self->timeout . ' s' );
$self->logger->debug("Token $id created");
return $id;
}
else {
# Create a new session
my $tsession =
$self->p->getApacheSession( undef, info => $infos, kind => 'TOKEN' );
if ( $tsession->{id} ) {
$self->logger->debug("Token $tsession->{id} created");
return $tsession->id;
}
else {
$self->logger->error("NO token created");
return undef;
}
}
}
sub getToken {
my ( $self, $id, $keep ) = @_;
unless ($id) {
$self->logger->error('getToken called without id');
return undef;
}
$self->logger->debug("Trying to load token $id");
if ( $self->cache ) {
my $data;
my @t = split /_/, $id;
if ( $t[0] > time ) {
$self->logger->notice("Expired token $id");
$self->cache->remove($id);
return undef;
}
unless ( $data = $self->cache->get($id) ) {
$self->logger->notice("Bad (or expired) token $id");
return undef;
}
$self->cache->remove($id) unless ($keep);
return from_json( $data, { allow_nonref => 1 } );
}
else {
# Get token session
my $tsession = $self->p->getApacheSession( $id, kind => 'TOKEN' );
unless ($tsession) {
$self->logger->notice("Bad (or expired) token $id");
return undef;
}
my %h = %{ $tsession->{data} };
$tsession->remove unless ($keep);
return \%h;
}
}
sub updateToken {
my ( $self, $id, $k, $v ) = @_;
if ( $self->cache ) {
my $data;
unless ( $data = $self->cache->get($id) ) {
$self->logger->notice("Bad (or expired) token $id");
return undef;
}
my $h = from_json( $data, { allow_nonref => 1 } );
$h->{$k} = $v;
$self->cache->set( $id, to_json($h),
( $h->{tokenTimeoutTimestamp} - time ) . ' s' );
return $id;
}
else {
if (
$self->p->getApacheSession(
$id,
kind => "TOKEN",
info => { $k => $v }
)
)
{
return $id;
}
else {
return undef;
}
}
}
sub setToken {
my ( $self, $req, $info ) = @_;
$self->logger->debug('Prepare token');
$req->token( $self->createToken($info) );
}
1;
( run in 1.179 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )