Display login history in sessions manager (#389)

environments/ppa-mbqj77/deployments/1
Clément Oudot 14 years ago
parent 8213e940e7
commit c0108b17ba
  1. 39
      modules/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Sessions.pm
  2. 144
      modules/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/_i18n.pm

@ -587,6 +587,45 @@ sub session {
$res .= '</div>';
}
# Login history
if ( defined $session{loginHistory} ) {
$res .= '<div class="ui-corner-all ui-widget-content category">';
$res .= '<h2 class="ui-corner-all ui-widget-header">'
. ucfirst $self->translate('loginHistory') . '</h2>';
$res .= '<ul>';
# Get all login records
my $loginRecords = {};
if ( defined $session{loginHistory}->{successLogin} ) {
foreach ( @{ $session{loginHistory}->{successLogin} } ) {
$loginRecords->{ $_->{_utime} } =
"Success (IP " . $_->{ipAddr} . ")";
}
}
if ( defined $session{loginHistory}->{failedLogin} ) {
foreach ( @{ $session{loginHistory}->{failedLogin} } ) {
$loginRecords->{ $_->{_utime} } =
$_->{error} . " (IP " . $_->{ipAddr} . ")";
}
}
# Display records sorted by date
foreach my $utime ( sort keys %{$loginRecords} ) {
$res .=
"<li><strong>"
. localtime($utime)
. "</strong>: "
. $loginRecords->{$utime} . "</li>";
}
delete $session{loginHistory};
$res .= '</ul>';
$res .= '</div>';
}
# Other attributes
$res .= '<div class="ui-corner-all ui-widget-content category">';
$res .= '<h2 class="ui-corner-all ui-widget-header">'

@ -189,6 +189,7 @@ sub en {
ldapUsePasswordResetAttribute => 'Use reset attribute',
ldapVersion => 'Version',
loginDisplay => 'Login display',
loginHistory => 'Login history',
logoutServices => 'Logout forward',
logParams => 'Logs',
macros => 'Macros',
@ -577,53 +578,53 @@ sub fr {
error => 'Erreur',
exportedAttr => 'Attributs exportés par le portail (SOAP)',
exportedVars => 'Attributs à exporter',
failedLoginNumber => 'Nombre d\'échecs de connexion mémorisés',
generalParameters => 'Paramètres généraux',
globalStorage => 'Module Apache::Session',
globalStorageOptions => 'Paramètres du module Apache::Session',
grantSessionRules => "Conditions d'ouverture",
groups => 'Groupes',
headers => 'En-têtes HTTP',
hideOldPassword => "Masquer l'ancien mot de passe",
httpOnly => 'Protection contre javascript',
https => 'HTTPS',
internalReference => 'Référence interne ',
ipAddr => 'Adresse IP',
issuerParams => 'Modules fournisseur',
issuerDBSAML => 'SAML',
issuerDBSAMLActivation => 'Activation',
issuerDBSAMLPath => 'Chemin',
issuerDBSAMLRule => 'Règle d\'utilisation',
issuerDBCAS => 'CAS',
issuerDBCASActivation => 'Activation',
issuerDBCASPath => 'Chemin',
issuerDBCASRule => 'Règle d\'utilisation',
issuerDBCASOptions => 'Options',
issuerDBOpenID => 'OpenID',
issuerDBOpenIDActivation => 'Activation',
issuerDBOpenIDPath => 'Chemin',
issuerDBOpenIDRule => 'Règle d\'utilisation',
issuerDBOpenIDOptions => 'Options',
jsRedirect => 'Message de redirection',
key => 'Clef de chiffrement',
ldap => 'LDAP',
ldapAuthnLevel => 'Niveau d\'authentification',
ldapBase => 'Base de recherche des utilisateurs',
ldapChangePasswordAsUser => 'Changement en tant qu\'utilisateur',
ldapConnection => 'Connexion',
ldapFilters => 'Filtres',
LDAPFilter => 'Filtre par défaut',
ldapGroupAttributeName => 'Attribut cible',
ldapGroupAttributeNameGroup => 'Attribut source groupe',
ldapGroupAttributeNameSearch => 'Attributs recherchés',
ldapGroupAttributeNameUser => 'Attribut source utilisateur',
ldapGroupBase => 'Base de recherche',
ldapGroupObjectClass => 'Classe d\'objet',
ldapGroupRecursive => 'Récursif',
ldapGroups => 'Groupes',
ldapParams => 'Paramètres LDAP',
ldapPassword => 'Mot de passe',
ldapPasswordResetAttribute => 'Attribut de réinitialisation',
failedLoginNumber => 'Nombre d\'échecs de connexion mémorisés',
generalParameters => 'Paramètres généraux',
globalStorage => 'Module Apache::Session',
globalStorageOptions => 'Paramètres du module Apache::Session',
grantSessionRules => "Conditions d'ouverture",
groups => 'Groupes',
headers => 'En-têtes HTTP',
hideOldPassword => "Masquer l'ancien mot de passe",
httpOnly => 'Protection contre javascript',
https => 'HTTPS',
internalReference => 'Référence interne ',
ipAddr => 'Adresse IP',
issuerParams => 'Modules fournisseur',
issuerDBSAML => 'SAML',
issuerDBSAMLActivation => 'Activation',
issuerDBSAMLPath => 'Chemin',
issuerDBSAMLRule => 'Règle d\'utilisation',
issuerDBCAS => 'CAS',
issuerDBCASActivation => 'Activation',
issuerDBCASPath => 'Chemin',
issuerDBCASRule => 'Règle d\'utilisation',
issuerDBCASOptions => 'Options',
issuerDBOpenID => 'OpenID',
issuerDBOpenIDActivation => 'Activation',
issuerDBOpenIDPath => 'Chemin',
issuerDBOpenIDRule => 'Règle d\'utilisation',
issuerDBOpenIDOptions => 'Options',
jsRedirect => 'Message de redirection',
key => 'Clef de chiffrement',
ldap => 'LDAP',
ldapAuthnLevel => 'Niveau d\'authentification',
ldapBase => 'Base de recherche des utilisateurs',
ldapChangePasswordAsUser => 'Changement en tant qu\'utilisateur',
ldapConnection => 'Connexion',
ldapFilters => 'Filtres',
LDAPFilter => 'Filtre par défaut',
ldapGroupAttributeName => 'Attribut cible',
ldapGroupAttributeNameGroup => 'Attribut source groupe',
ldapGroupAttributeNameSearch => 'Attributs recherchés',
ldapGroupAttributeNameUser => 'Attribut source utilisateur',
ldapGroupBase => 'Base de recherche',
ldapGroupObjectClass => 'Classe d\'objet',
ldapGroupRecursive => 'Récursif',
ldapGroups => 'Groupes',
ldapParams => 'Paramètres LDAP',
ldapPassword => 'Mot de passe',
ldapPasswordResetAttribute => 'Attribut de réinitialisation',
ldapPasswordResetAttributeValue => 'Valeur de réinitialisation',
ldapPpolicyControl => 'Contrôle password policy',
ldapPort => 'Port',
@ -636,6 +637,7 @@ sub fr {
'Utiliser l\'attribut de réinitialisation',
ldapVersion => 'Version',
loginDisplay => 'Affichage des connexions',
loginHistory => 'Historique des connexions',
logoutServices => 'Transfert de la déconnexion',
logParams => 'Journalisation',
macros => 'Macros',
@ -732,8 +734,8 @@ sub fr {
radiusServer => "Nom d'hôte du serveur",
randomPasswordRegexp =>
'Expression regulière pour la génération des mots de passe',
redirection => 'Redirections du Handler',
reloadUrls => 'Mise à jour de la configuration',
redirection => 'Redirections du Handler',
reloadUrls => 'Mise à jour de la configuration',
remoteCookieName => 'Nom du cookie',
remoteGlobalStorage => 'Module des sessions',
remoteGlobalStorageOptions => 'Options du module des sessions',
@ -777,29 +779,29 @@ sub fr {
SSLRequire => 'SSL Requis',
SSLVar => 'Champ extrait du certificat',
startTime => 'Date de création',
storePassword => "Stocke le mot de passe de l'utilisateur en session",
storePassword => "Stocke le mot de passe de l'utilisateur en session",
successLoginNumber => 'Nombre de connexions mémorisées',
sympaHandler => 'Sympa',
sympaMailKey => 'Clé de session pour le mail',
sympaSecret => 'Secret partagé',
syntaxError => 'Erreur de syntaxe',
syslog => 'Facilité syslog',
timeout => 'Durée de vie maximale des sessions',
timeoutActivity => 'Délai d\'expiration des sessions',
trustedDomains => 'Domaines approuvés',
twitterAppName => 'Nom de l\'application',
twitterAuthnLevel => 'Niveau d\'authentification',
twitterKey => 'Clé de l\'API',
twitterParams => 'Paramètres Twitter',
twitterSecret => 'Secret de l\'API',
unknownError => 'Erreur inconnue',
updateTime => 'Date de mise à jour',
uploadDenied => 'Téléchargement refusé',
user => 'utilisateur',
users => 'utilisateurs',
userDB => "Module d'utilisateurs",
userControl => "Contrôle du nom d'utilisateur",
userPivot => 'Champ identifiant dans la table des utilisateurs',
sympaHandler => 'Sympa',
sympaMailKey => 'Clé de session pour le mail',
sympaSecret => 'Secret partagé',
syntaxError => 'Erreur de syntaxe',
syslog => 'Facilité syslog',
timeout => 'Durée de vie maximale des sessions',
timeoutActivity => 'Délai d\'expiration des sessions',
trustedDomains => 'Domaines approuvés',
twitterAppName => 'Nom de l\'application',
twitterAuthnLevel => 'Niveau d\'authentification',
twitterKey => 'Clé de l\'API',
twitterParams => 'Paramètres Twitter',
twitterSecret => 'Secret de l\'API',
unknownError => 'Erreur inconnue',
updateTime => 'Date de mise à jour',
uploadDenied => 'Téléchargement refusé',
user => 'utilisateur',
users => 'utilisateurs',
userDB => "Module d'utilisateurs",
userControl => "Contrôle du nom d'utilisateur",
userPivot => 'Champ identifiant dans la table des utilisateurs',
useRedirectOnError => 'Redirection pour les erreurs',
useRedirectOnForbidden => 'Redirection pour les accès interdits',
useSafeJail => 'Utiliser la cage Safe',

Loading…
Cancel
Save