2014-02-21 17:38:57 +01:00
|
|
|
|
|
|
|
package Lemonldap::NG::Common::Apache::Session::Store;
|
|
|
|
|
2020-12-19 00:01:49 +01:00
|
|
|
use strict;
|
|
|
|
|
2019-02-12 18:21:38 +01:00
|
|
|
our $VERSION = '2.1.0';
|
2014-02-21 17:38:57 +01:00
|
|
|
|
|
|
|
sub new {
|
|
|
|
my $class = shift;
|
|
|
|
return bless {}, $class;
|
|
|
|
}
|
|
|
|
|
|
|
|
sub insert {
|
|
|
|
my $self = shift;
|
|
|
|
my $session = shift;
|
|
|
|
$self->{args} = $session->{args};
|
|
|
|
|
2014-02-21 18:04:56 +01:00
|
|
|
# Store session in cache
|
|
|
|
my $id = $session->{data}->{_session_id};
|
2014-06-25 16:15:22 +02:00
|
|
|
$self->cache->set( $id, $session->{serialized} );
|
2014-02-21 18:04:56 +01:00
|
|
|
|
|
|
|
# Store in session backend
|
2014-02-21 17:38:57 +01:00
|
|
|
return $self->module->insert($session);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub update {
|
|
|
|
my $self = shift;
|
|
|
|
my $session = shift;
|
|
|
|
$self->{args} = $session->{args};
|
|
|
|
|
2014-07-03 11:33:19 +02:00
|
|
|
#TODO: remove cache on all LL::NG instances if updateCache == 1
|
|
|
|
|
2016-12-01 23:25:05 +01:00
|
|
|
unless ( defined( $session->{args}->{updateCache} )
|
|
|
|
and $session->{args}->{updateCache} == -1 )
|
|
|
|
{
|
2014-07-24 17:48:32 +02:00
|
|
|
|
2014-07-03 11:33:19 +02:00
|
|
|
# Update session in cache
|
|
|
|
my $id = $session->{data}->{_session_id};
|
|
|
|
$self->cache->remove($id) if ( $self->cache->get($id) );
|
2014-06-25 16:15:22 +02:00
|
|
|
$self->cache->set( $id, $session->{serialized} );
|
2014-02-21 18:04:56 +01:00
|
|
|
}
|
|
|
|
|
2016-12-01 23:25:05 +01:00
|
|
|
unless ( defined( $session->{args}->{updateCache} )
|
|
|
|
and $session->{args}->{updateCache} == 2 )
|
|
|
|
{
|
2014-07-24 17:48:32 +02:00
|
|
|
|
2014-07-03 11:33:19 +02:00
|
|
|
# Update session in backend
|
|
|
|
return $self->module->update($session);
|
|
|
|
}
|
2014-02-21 17:38:57 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
sub materialize {
|
|
|
|
my $self = shift;
|
|
|
|
my $session = shift;
|
|
|
|
$self->{args} = $session->{args};
|
|
|
|
|
2014-02-21 18:04:56 +01:00
|
|
|
# Get session from cache
|
|
|
|
my $id = $session->{data}->{_session_id};
|
|
|
|
if ( $self->cache->get($id) ) {
|
|
|
|
$session->{serialized} = $self->cache->get($id);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
# Get session from backend
|
2014-06-25 16:11:04 +02:00
|
|
|
$self->module->materialize($session);
|
|
|
|
|
|
|
|
# Store session in cache
|
2014-06-25 16:15:22 +02:00
|
|
|
$self->cache->set( $id, $session->{serialized} );
|
2014-06-25 16:11:04 +02:00
|
|
|
|
|
|
|
return;
|
2014-02-21 17:38:57 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
sub remove {
|
|
|
|
my $self = shift;
|
|
|
|
my $session = shift;
|
|
|
|
$self->{args} = $session->{args};
|
|
|
|
|
2014-07-03 11:33:19 +02:00
|
|
|
#TODO: remove cache on all LL::NG instances if updateCache == 1
|
|
|
|
|
2016-12-02 17:29:04 +01:00
|
|
|
unless ($session->{args}->{updateCache}
|
|
|
|
and $session->{args}->{updateCache} == -1 )
|
|
|
|
{
|
2014-07-24 17:48:32 +02:00
|
|
|
|
2014-07-03 11:33:19 +02:00
|
|
|
# Remove session from cache
|
|
|
|
my $id = $session->{data}->{_session_id};
|
|
|
|
$self->cache->remove($id) if ( $self->cache->get($id) );
|
2014-02-21 18:04:56 +01:00
|
|
|
}
|
|
|
|
|
2016-12-02 17:29:04 +01:00
|
|
|
unless ($session->{args}->{updateCache}
|
|
|
|
and $session->{args}->{updateCache} == 2 )
|
|
|
|
{
|
2014-07-24 17:48:32 +02:00
|
|
|
|
2014-07-03 11:33:19 +02:00
|
|
|
# Remove session from backend
|
|
|
|
return $self->module->remove($session);
|
|
|
|
}
|
2014-02-21 17:38:57 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
sub close {
|
|
|
|
my $self = shift;
|
|
|
|
my $session = shift;
|
|
|
|
$self->{args} = $session->{args};
|
|
|
|
|
|
|
|
return $self->module->close;
|
|
|
|
}
|
|
|
|
|
|
|
|
sub module {
|
|
|
|
my $self = shift;
|
|
|
|
return $self->{args}->{object_store};
|
|
|
|
}
|
|
|
|
|
2014-02-21 18:04:56 +01:00
|
|
|
sub cache {
|
|
|
|
my $self = shift;
|
|
|
|
|
|
|
|
return $self->{cache} if $self->{cache};
|
|
|
|
|
|
|
|
my $module = $self->{args}->{localStorage};
|
|
|
|
eval "use $module;";
|
|
|
|
$self->{cache} = $module->new( $self->{args}->{localStorageOptions} );
|
|
|
|
|
|
|
|
return $self->{cache};
|
|
|
|
}
|
|
|
|
|
2014-02-21 17:38:57 +01:00
|
|
|
1;
|