From 44cb0444feca523273e46f3a255464616accd106 Mon Sep 17 00:00:00 2001 From: Maxime Besson Date: Mon, 6 Sep 2021 23:05:47 +0200 Subject: [PATCH] Add field and accessor in portal for plugin session info (#2609) --- .../lib/Lemonldap/NG/Portal/Main/Display.pm | 15 +++++++++------ .../lib/Lemonldap/NG/Portal/Main/Init.pm | 7 +++++++ .../lib/Lemonldap/NG/Portal/Main/Plugin.pm | 9 +++++++++ .../lib/Lemonldap/NG/Portal/Main/Run.pm | 8 +++++--- 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Display.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Display.pm index 21f2df1a2..bd8a38799 100644 --- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Display.pm +++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Display.pm @@ -704,7 +704,13 @@ sub mkSessionArray { return "" unless ( ref $sessions eq "ARRAY" and @$sessions ); - my @fields = sort keys %{ $self->conf->{sessionDataToRemember} }; + # Merge user configuration with plugin self-configuration + my %rememberedData = %{ $self->pluginSessionDataToRemember }; + @rememberedData{ keys %{ $self->conf->{sessionDataToRemember} } } = + values %{ $self->conf->{sessionDataToRemember} }; + + my @fields = sort( keys %rememberedData ); + return $self->loadTemplate( $req, 'sessionArray', @@ -712,11 +718,8 @@ sub mkSessionArray { title => $title, displayUser => $displayUser, displayError => $displayError, - fields => [ - map { { name => $self->conf->{sessionDataToRemember}->{$_} } } - @fields - ], - sessions => [ + fields => [ map { { name => $rememberedData{$_} } } @fields ], + sessions => [ map { my $session = $_; { diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Init.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Init.pm index 49800b6f8..48b3da2fa 100644 --- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Init.pm +++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Init.pm @@ -94,6 +94,10 @@ has cors => ( is => 'rw' ); # Cookie SameSite value has cookieSameSite => ( is => 'rw' ); +# Plugins may declare the session data they want to store in login history here +has pluginSessionDataToRemember => + ( is => 'rw', isa => "HashRef", default => sub { {} } ); + # INITIALIZATION sub init { @@ -229,6 +233,9 @@ sub reloadConf { $self->spRules( {} ); $self->hook( {} ); + # Plugin history fields + $self->pluginSessionDataToRemember( {} ); + # Load conf in portal object foreach my $key ( keys %$conf ) { $self->{conf}->{$key} ||= $conf->{$key}; diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Plugin.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Plugin.pm index 53acfb041..4d65c9a2a 100644 --- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Plugin.pm +++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Plugin.pm @@ -161,6 +161,15 @@ sub canUpdateSfa { return $msg; } +sub addSessionDataToRemember { + my ( $self, $newData ) = @_; + for my $sessionAttr ( keys %{ $newData || {} } ) { + $self->p->pluginSessionDataToRemember->{$sessionAttr} = + $newData->{$sessionAttr}; + } + return; +} + 1; __END__ diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Run.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Run.pm index 5e42dde05..4045db396 100644 --- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Run.pm +++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Run.pm @@ -1120,9 +1120,11 @@ sub _sumUpSession { $withoutUser ? {} : { user => $session->{ $self->conf->{whatToTrace} } }; - $res->{$_} = $session->{$_} - foreach ( "_utime", "ipAddr", - keys %{ $self->conf->{sessionDataToRemember} } ); + $res->{$_} = $session->{$_} foreach ( + "_utime", "ipAddr", + keys %{ $self->conf->{sessionDataToRemember} }, + keys %{ $self->pluginSessionDataToRemember } + ); return $res; }