diff -Nru libapache-session-browseable-perl-1.3.4/Build.PL libapache-session-browseable-perl-1.3.5/Build.PL --- libapache-session-browseable-perl-1.3.4/Build.PL 2019-11-20 19:40:46.000000000 +0000 +++ libapache-session-browseable-perl-1.3.5/Build.PL 2020-01-21 10:18:37.000000000 +0000 @@ -8,7 +8,7 @@ requires => { 'Apache::Session' => 0, 'JSON' => 0, }, recommends => { 'DBI' => 0, 'Net::LDAP' => 0.38, }, test_requires => { DBI => 0, 'DBD::SQLite' => 0, }, - dist_version => '1.3.4', + dist_version => '1.3.5', autosplit => [qw(lib/Apache/Session/Browseable/_common.pm)], configure_requires => { 'Module::Build' => 0, }, meta_merge => { diff -Nru libapache-session-browseable-perl-1.3.4/Changes libapache-session-browseable-perl-1.3.5/Changes --- libapache-session-browseable-perl-1.3.4/Changes 2019-11-20 19:40:46.000000000 +0000 +++ libapache-session-browseable-perl-1.3.5/Changes 2020-01-21 10:18:37.000000000 +0000 @@ -1,5 +1,9 @@ Revision history for Perl extension Apache::Session::Browseable. +1.3.5 + - Update cast syntax for vanilla MySQL (#21) + - Redis: doc and tests improvements (#23) + 1.3.4 - Don't stop parsing sessions when one is bad diff -Nru libapache-session-browseable-perl-1.3.4/debian/changelog libapache-session-browseable-perl-1.3.5/debian/changelog --- libapache-session-browseable-perl-1.3.4/debian/changelog 2019-11-24 07:43:41.000000000 +0000 +++ libapache-session-browseable-perl-1.3.5/debian/changelog 2020-01-21 10:24:56.000000000 +0000 @@ -1,3 +1,10 @@ +libapache-session-browseable-perl (1.3.5-1) unstable; urgency=medium + + * Import upstream version 1.3.5 + * Declare compliance with policy 4.5.0 + + -- Xavier Guimard Tue, 21 Jan 2020 11:24:56 +0100 + libapache-session-browseable-perl (1.3.4-1) unstable; urgency=medium * Import upstream version 1.3.4 diff -Nru libapache-session-browseable-perl-1.3.4/debian/control libapache-session-browseable-perl-1.3.5/debian/control --- libapache-session-browseable-perl-1.3.4/debian/control 2019-11-24 07:43:29.000000000 +0000 +++ libapache-session-browseable-perl-1.3.5/debian/control 2020-01-21 10:22:42.000000000 +0000 @@ -14,7 +14,7 @@ libjson-perl, libnet-ldap-perl, libredis-perl -Standards-Version: 4.4.1 +Standards-Version: 4.5.0 Vcs-Browser: https://salsa.debian.org/perl-team/modules/packages/libapache-session-browseable-perl Vcs-Git: https://salsa.debian.org/perl-team/modules/packages/libapache-session-browseable-perl.git Homepage: https://metacpan.org/release/Apache-Session-Browseable diff -Nru libapache-session-browseable-perl-1.3.4/lib/Apache/Session/Browseable/DBI.pm libapache-session-browseable-perl-1.3.5/lib/Apache/Session/Browseable/DBI.pm --- libapache-session-browseable-perl-1.3.4/lib/Apache/Session/Browseable/DBI.pm 2019-11-20 19:40:46.000000000 +0000 +++ libapache-session-browseable-perl-1.3.5/lib/Apache/Session/Browseable/DBI.pm 2020-01-21 10:18:37.000000000 +0000 @@ -6,7 +6,7 @@ use Apache::Session; use Apache::Session::Browseable::_common; -our $VERSION = '1.3.4'; +our $VERSION = '1.3.5'; our @ISA = qw(Apache::Session Apache::Session::Browseable::_common); sub searchOn { @@ -100,13 +100,17 @@ ? $args->{Index} : [ split /\s+/, $args->{Index} ]; if ( $rule->{or} ) { - $query = join ' OR ', - map { $fields{$_}++; "cast($_ as integer) < $rule->{or}->{$_}" } + $query = join ' OR ', map { + $fields{$_}++; + $class->_buildLowerThanExpression( $_, $rule->{or}->{$_} ) + } keys %{ $rule->{or} }; } elsif ( $rule->{and} ) { - $query = join ' AND ', - map { $fields{$_}++; "cast($_ as integer) < $rule->{or}->{$_}" } + $query = join ' AND ', map { + $fields{$_}++; + $class->_buildLowerThanExpression( $_, $rule->{or}->{$_} ) + } keys %{ $rule->{or} }; } if ( $rule->{not} ) { @@ -124,6 +128,12 @@ return 1; } +# Let specialized modules override this syntax if they need to +sub _buildLowerThanExpression { + my ( $class, $field, $value ) = @_; + return "cast($field as integer) < $value"; +} + sub get_key_from_all_sessions { my $class = shift; my $args = shift; diff -Nru libapache-session-browseable-perl-1.3.4/lib/Apache/Session/Browseable/File.pm libapache-session-browseable-perl-1.3.5/lib/Apache/Session/Browseable/File.pm --- libapache-session-browseable-perl-1.3.4/lib/Apache/Session/Browseable/File.pm 2019-11-20 19:40:46.000000000 +0000 +++ libapache-session-browseable-perl-1.3.5/lib/Apache/Session/Browseable/File.pm 2020-01-21 10:18:37.000000000 +0000 @@ -11,7 +11,7 @@ use constant SL => ( $^O and $^O =~ /(?:MSWin|Windows)/i ? '\\' : '/' ); -our $VERSION = '1.3.4'; +our $VERSION = '1.3.5'; our @ISA = qw(Apache::Session Apache::Session::Browseable::_common); sub populate { diff -Nru libapache-session-browseable-perl-1.3.4/lib/Apache/Session/Browseable/MySQLJSON.pm libapache-session-browseable-perl-1.3.5/lib/Apache/Session/Browseable/MySQLJSON.pm --- libapache-session-browseable-perl-1.3.4/lib/Apache/Session/Browseable/MySQLJSON.pm 2019-11-20 19:40:46.000000000 +0000 +++ libapache-session-browseable-perl-1.3.5/lib/Apache/Session/Browseable/MySQLJSON.pm 2020-01-21 10:18:37.000000000 +0000 @@ -9,7 +9,7 @@ use Apache::Session::Serialize::JSON; use Apache::Session::Browseable::DBI; -our $VERSION = '1.3.4'; +our $VERSION = '1.3.5'; our @ISA = qw(Apache::Session::Browseable::DBI Apache::Session); sub populate { diff -Nru libapache-session-browseable-perl-1.3.4/lib/Apache/Session/Browseable/MySQL.pm libapache-session-browseable-perl-1.3.5/lib/Apache/Session/Browseable/MySQL.pm --- libapache-session-browseable-perl-1.3.4/lib/Apache/Session/Browseable/MySQL.pm 2019-11-20 19:40:46.000000000 +0000 +++ libapache-session-browseable-perl-1.3.5/lib/Apache/Session/Browseable/MySQL.pm 2020-01-21 10:18:37.000000000 +0000 @@ -25,6 +25,12 @@ return $self; } +# Override default CAST syntax from DBI.pm +sub _buildLowerThanExpression { + my ( $class, $field, $value ) = @_; + return "CAST($field AS SIGNED INTEGER) < $value"; +} + 1; __END__ diff -Nru libapache-session-browseable-perl-1.3.4/lib/Apache/Session/Browseable/PgHstore.pm libapache-session-browseable-perl-1.3.5/lib/Apache/Session/Browseable/PgHstore.pm --- libapache-session-browseable-perl-1.3.4/lib/Apache/Session/Browseable/PgHstore.pm 2019-11-20 19:40:46.000000000 +0000 +++ libapache-session-browseable-perl-1.3.5/lib/Apache/Session/Browseable/PgHstore.pm 2020-01-21 10:18:37.000000000 +0000 @@ -8,7 +8,7 @@ use Apache::Session::Generate::SHA256; use Apache::Session::Serialize::Hstore; -our $VERSION = '1.3.4'; +our $VERSION = '1.3.5'; our @ISA = qw(Apache::Session); sub populate { diff -Nru libapache-session-browseable-perl-1.3.4/lib/Apache/Session/Browseable/PgJSON.pm libapache-session-browseable-perl-1.3.5/lib/Apache/Session/Browseable/PgJSON.pm --- libapache-session-browseable-perl-1.3.4/lib/Apache/Session/Browseable/PgJSON.pm 2019-11-20 19:40:46.000000000 +0000 +++ libapache-session-browseable-perl-1.3.5/lib/Apache/Session/Browseable/PgJSON.pm 2020-01-21 10:18:37.000000000 +0000 @@ -8,7 +8,7 @@ use Apache::Session::Generate::SHA256; use Apache::Session::Serialize::JSON; -our $VERSION = '1.3.4'; +our $VERSION = '1.3.5'; our @ISA = qw(Apache::Session); sub populate { diff -Nru libapache-session-browseable-perl-1.3.4/lib/Apache/Session/Browseable/Redis.pm libapache-session-browseable-perl-1.3.5/lib/Apache/Session/Browseable/Redis.pm --- libapache-session-browseable-perl-1.3.4/lib/Apache/Session/Browseable/Redis.pm 2019-11-20 19:40:46.000000000 +0000 +++ libapache-session-browseable-perl-1.3.5/lib/Apache/Session/Browseable/Redis.pm 2020-01-21 10:18:37.000000000 +0000 @@ -9,7 +9,7 @@ use Apache::Session::Serialize::JSON; use Apache::Session::Browseable::_common; -our $VERSION = '1.3.4'; +our $VERSION = '1.3.5'; our @ISA = qw(Apache::Session); our $redis = $Apache::Session::Browseable::Store::Redis::redis; @@ -159,6 +159,9 @@ my $args = { server => '127.0.0.1:6379', + # Select database (optional) + #database => 0, + # Choose your browseable fileds Index => 'uid mail', }; @@ -181,14 +184,15 @@ # 2) Parse all sessions # a. get all sessions - my $hash = Apache::Session::Browseable::Redis->get_key_from_all_sessions(); + my $hash = Apache::Session::Browseable::Redis->get_key_from_all_sessions($args); # b. get some fields from all sessions - my $hash = Apache::Session::Browseable::Redis->get_key_from_all_sessions('uid', 'mail') + my $hash = Apache::Session::Browseable::Redis->get_key_from_all_sessions($args, 'uid', 'mail') # c. execute something with datas from each session : # Example : get uid and mail if mail domain is my $hash = Apache::Session::Browseable::Redis->get_key_from_all_sessions( + $args, sub { my ( $session, $id ) = @_; if ( $session->{mail} =~ /mydomain.com$/ ) { diff -Nru libapache-session-browseable-perl-1.3.4/lib/Apache/Session/Browseable.pm libapache-session-browseable-perl-1.3.5/lib/Apache/Session/Browseable.pm --- libapache-session-browseable-perl-1.3.4/lib/Apache/Session/Browseable.pm 2019-11-20 19:40:46.000000000 +0000 +++ libapache-session-browseable-perl-1.3.5/lib/Apache/Session/Browseable.pm 2020-01-21 10:18:37.000000000 +0000 @@ -1,6 +1,6 @@ package Apache::Session::Browseable; -our $VERSION = '1.3.4'; +our $VERSION = '1.3.5'; print STDERR "Use a sub module of Apache::Session::Browseable such as Apache::Session::Browseable::File"; diff -Nru libapache-session-browseable-perl-1.3.4/META.json libapache-session-browseable-perl-1.3.5/META.json --- libapache-session-browseable-perl-1.3.4/META.json 2019-11-20 19:40:46.000000000 +0000 +++ libapache-session-browseable-perl-1.3.5/META.json 2020-01-21 10:18:37.000000000 +0000 @@ -39,15 +39,15 @@ "provides" : { "Apache::Session::Browseable" : { "file" : "lib/Apache/Session/Browseable.pm", - "version" : "v1.3.4" + "version" : "v1.3.5" }, "Apache::Session::Browseable::DBI" : { "file" : "lib/Apache/Session/Browseable/DBI.pm", - "version" : "v1.3.4" + "version" : "v1.3.5" }, "Apache::Session::Browseable::File" : { "file" : "lib/Apache/Session/Browseable/File.pm", - "version" : "v1.3.4" + "version" : "v1.3.5" }, "Apache::Session::Browseable::Informix" : { "file" : "lib/Apache/Session/Browseable/Informix.pm", @@ -63,7 +63,7 @@ }, "Apache::Session::Browseable::MySQLJSON" : { "file" : "lib/Apache/Session/Browseable/MySQLJSON.pm", - "version" : "v1.3.4" + "version" : "v1.3.5" }, "Apache::Session::Browseable::Oracle" : { "file" : "lib/Apache/Session/Browseable/Oracle.pm", @@ -71,11 +71,11 @@ }, "Apache::Session::Browseable::PgHstore" : { "file" : "lib/Apache/Session/Browseable/PgHstore.pm", - "version" : "v1.3.4" + "version" : "v1.3.5" }, "Apache::Session::Browseable::PgJSON" : { "file" : "lib/Apache/Session/Browseable/PgJSON.pm", - "version" : "v1.3.4" + "version" : "v1.3.5" }, "Apache::Session::Browseable::Postgres" : { "file" : "lib/Apache/Session/Browseable/Postgres.pm", @@ -83,7 +83,7 @@ }, "Apache::Session::Browseable::Redis" : { "file" : "lib/Apache/Session/Browseable/Redis.pm", - "version" : "v1.3.4" + "version" : "v1.3.5" }, "Apache::Session::Browseable::SQLite" : { "file" : "lib/Apache/Session/Browseable/SQLite.pm", @@ -155,6 +155,6 @@ "url" : "https://github.com/LemonLDAPNG/Apache-Session-Browseable" } }, - "version" : "v1.3.4", + "version" : "v1.3.5", "x_serialization_backend" : "JSON::PP version 4.02" } diff -Nru libapache-session-browseable-perl-1.3.4/META.yml libapache-session-browseable-perl-1.3.5/META.yml --- libapache-session-browseable-perl-1.3.4/META.yml 2019-11-20 19:40:46.000000000 +0000 +++ libapache-session-browseable-perl-1.3.5/META.yml 2020-01-21 10:18:37.000000000 +0000 @@ -17,13 +17,13 @@ provides: Apache::Session::Browseable: file: lib/Apache/Session/Browseable.pm - version: v1.3.4 + version: v1.3.5 Apache::Session::Browseable::DBI: file: lib/Apache/Session/Browseable/DBI.pm - version: v1.3.4 + version: v1.3.5 Apache::Session::Browseable::File: file: lib/Apache/Session/Browseable/File.pm - version: v1.3.4 + version: v1.3.5 Apache::Session::Browseable::Informix: file: lib/Apache/Session/Browseable/Informix.pm version: v1.2.2 @@ -35,22 +35,22 @@ version: v1.2.5 Apache::Session::Browseable::MySQLJSON: file: lib/Apache/Session/Browseable/MySQLJSON.pm - version: v1.3.4 + version: v1.3.5 Apache::Session::Browseable::Oracle: file: lib/Apache/Session/Browseable/Oracle.pm version: v1.2.2 Apache::Session::Browseable::PgHstore: file: lib/Apache/Session/Browseable/PgHstore.pm - version: v1.3.4 + version: v1.3.5 Apache::Session::Browseable::PgJSON: file: lib/Apache/Session/Browseable/PgJSON.pm - version: v1.3.4 + version: v1.3.5 Apache::Session::Browseable::Postgres: file: lib/Apache/Session/Browseable/Postgres.pm version: v1.3.1 Apache::Session::Browseable::Redis: file: lib/Apache/Session/Browseable/Redis.pm - version: v1.3.4 + version: v1.3.5 Apache::Session::Browseable::SQLite: file: lib/Apache/Session/Browseable/SQLite.pm version: v1.2.2 @@ -105,5 +105,5 @@ resources: license: http://dev.perl.org/licenses/ repository: https://github.com/LemonLDAPNG/Apache-Session-Browseable -version: v1.3.4 +version: v1.3.5 x_serialization_backend: 'CPAN::Meta::YAML version 0.018' diff -Nru libapache-session-browseable-perl-1.3.4/rpm/Apache-Session-Browseable.spec libapache-session-browseable-perl-1.3.5/rpm/Apache-Session-Browseable.spec --- libapache-session-browseable-perl-1.3.4/rpm/Apache-Session-Browseable.spec 2019-11-20 19:40:46.000000000 +0000 +++ libapache-session-browseable-perl-1.3.5/rpm/Apache-Session-Browseable.spec 2020-01-21 10:18:37.000000000 +0000 @@ -3,7 +3,7 @@ #============================================================================== %define real_name Apache-Session-Browseable -%define real_version 1.3.3 +%define real_version 1.3.5 #============================================================================== # Main package @@ -65,6 +65,8 @@ %{perl_vendorlib}/auto/Apache/Session/* %changelog +* Fri Jan 17 2020 Clement Oudot - 1.3.5-1 +- Update to 1.3.5 * Thu Sep 19 2019 Clement Oudot - 1.3.3-1 - Update to 1.3.3 * Thu Jul 04 2019 Clement Oudot - 1.3.2-1 diff -Nru libapache-session-browseable-perl-1.3.4/t/Apache-Session-Browseable-Redis.t libapache-session-browseable-perl-1.3.5/t/Apache-Session-Browseable-Redis.t --- libapache-session-browseable-perl-1.3.4/t/Apache-Session-Browseable-Redis.t 2019-11-20 19:40:46.000000000 +0000 +++ libapache-session-browseable-perl-1.3.5/t/Apache-Session-Browseable-Redis.t 2020-01-21 10:18:37.000000000 +0000 @@ -1,13 +1,131 @@ use Test::More; +use JSON qw/from_json/; +use utf8; + +our $test_dburl = $ENV{REDIS_URL} || 'localhost:6379'; +our $test_dbnum = $ENV{REDIS_DBNUM} || 15; +our $r; # Redis handle used for asserts plan skip_all => "Optional modules (Redis) not installed" + unless eval { require Redis; }; + +plan skip_all => "Redis error : $@" unless eval { - require Redis; + $r = Redis->new( server => $test_dburl ); + $r->select($test_dbnum); + $r->flushall(); }; -plan tests => 1; +plan tests => 19; $package = 'Apache::Session::Browseable::Redis'; use_ok($package); +my $args = { + server => $test_dburl, + database => $test_dbnum, + + # Choose your browseable fileds + Index => 'uid sn mail', +}; + +use Data::Dumper; +my $id; +my $json; + +is( keys %{ $r->keys('*') }, 0, "Make sure database is empty" ); + +# Create new session +my %session; +tie %session, 'Apache::Session::Browseable::Redis', $id, $args; +$session{uid} = 'mé'; +$session{mail} = 'mé@me.com'; +$session{color} = 'zz'; +$id = $session{_session_id}; +untie %session; + +# Make sure it was stored: +ok( $r->exists($id), "Test if new session id exists as a key in Redis" ); +ok( $r->exists("uid_mé"), "Test if index exists" ); +ok( $json = from_json( $r->get($id) ), "Parse redis value as JSON" ); +is( $json->{mail}, 'mé@me.com', + "Test if session subkey was correctly stored" ); + +# Read existing session +tie %session, 'Apache::Session::Browseable::Redis', $id, $args; +is( $session{mail}, 'mé@me.com', "Test if session subkey can be read" ); + +# Delete session; +tied(%session)->delete; + +ok( !$r->exists($id), "Test if new session id was removed" ); +ok( !$r->exists("uid_mé"), "Test if index was removed" ); + +is( keys %{ $r->keys('*') }, 0, "Make sure database is empty after removal" ); +untie %session; + +# Create a bunch of sessions to search on +my %session1, %session2, %session3, %session4, %session5; +my $id1, $id2, $id3, $id4, $id5; + +tie %session1, 'Apache::Session::Browseable::Redis', undef, $args; +$session1{uid} = 'obiwan'; +$session1{sn} = 'Kenobi'; +$session1{color} = 'blue'; +$id1 = $session1{_session_id}; +untie %session1; + +tie %session2, 'Apache::Session::Browseable::Redis', undef, $args; +$session2{uid} = 'darthvader'; +$session2{sn} = 'Skywalker'; +$session2{color} = 'red'; +$id2 = $session2{_session_id}; +untie %session2; + +tie %session3, 'Apache::Session::Browseable::Redis', undef, $args; +$session3{uid} = 'luke'; +$session3{sn} = 'Skywalker'; +$session3{color} = 'green'; +$id3 = $session3{_session_id}; +untie %session3; + +tie %session4, 'Apache::Session::Browseable::Redis', undef, $args; +$session4{uid} = 'mace'; +$session4{sn} = 'Windu'; +$session4{color} = 'purple'; +$id4 = $session4{_session_id}; +untie %session4; + +tie %session5, 'Apache::Session::Browseable::Redis', undef, $args; +$session5{uid} = 'yoda'; +$session5{sn} = 'Yoda'; +$session5{color} = 'green'; +$id5 = $session5{_session_id}; +untie %session5; + +# Search all keys + +my $hash = + Apache::Session::Browseable::Redis->get_key_from_all_sessions( $args, "uid" ); + +is( keys %$hash, 5, "Found all 5 session" ); +ok( exists( $hash->{$id4} ), "Found 'mace' in result" ); +is( $hash->{$id4}->{uid}, 'mace', "Correct value in session 4" ); + +# Search on indexed field +my $hash = + Apache::Session::Browseable::Redis->searchOn( $args, 'sn', 'Skywalker' ); + +is( keys %$hash, 2, "Found 2 session" ); +is( $hash->{$id2}->{uid}, 'darthvader', "Correct value" ); +is( $hash->{$id3}->{uid}, 'luke', "Correct value" ); + +# Search on unindexed field +my $hash = + Apache::Session::Browseable::Redis->searchOn( $args, 'color', 'green' ); +is( keys %$hash, 2, "Found 2 session" ); +is( $hash->{$id3}->{uid}, 'luke', "Correct value" ); +is( $hash->{$id5}->{uid}, 'yoda', "Correct value" ); + +$r->flushall;