232 lines
7.0 KiB
Perl
232 lines
7.0 KiB
Perl
# --
|
|
# Copyright (C) 2001-2019 OTRS AG, https://otrs.com/
|
|
# --
|
|
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
|
|
# the enclosed file COPYING for license information (GPL). If you
|
|
# did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt.
|
|
# --
|
|
|
|
package Kernel::Modules::AdminSession;
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
our $ObjectManagerDisabled = 1;
|
|
|
|
sub new {
|
|
my ( $Type, %Param ) = @_;
|
|
|
|
# allocate new hash for object
|
|
my $Self = {%Param};
|
|
bless( $Self, $Type );
|
|
|
|
return $Self;
|
|
}
|
|
|
|
sub Run {
|
|
my ( $Self, %Param ) = @_;
|
|
|
|
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
|
|
my $SessionObject = $Kernel::OM->Get('Kernel::System::AuthSession');
|
|
my $WantSessionID = $Kernel::OM->Get('Kernel::System::Web::Request')->GetParam( Param => 'WantSessionID' ) || '';
|
|
|
|
# ------------------------------------------------------------ #
|
|
# kill session id
|
|
# ------------------------------------------------------------ #
|
|
if ( $Self->{Subaction} eq 'Kill' ) {
|
|
|
|
# challenge token check for write action
|
|
$LayoutObject->ChallengeTokenCheck();
|
|
|
|
$SessionObject->RemoveSessionID( SessionID => $WantSessionID );
|
|
return $LayoutObject->Redirect( OP => "Action=AdminSession" );
|
|
}
|
|
|
|
# ------------------------------------------------------------ #
|
|
# kill all session id
|
|
# ------------------------------------------------------------ #
|
|
elsif ( $Self->{Subaction} eq 'KillAll' ) {
|
|
|
|
# challenge token check for write action
|
|
$LayoutObject->ChallengeTokenCheck();
|
|
|
|
$SessionObject->CleanUp();
|
|
return $LayoutObject->Redirect( OP => "Action=AdminSession" );
|
|
}
|
|
|
|
# ------------------------------------------------------------ #
|
|
# Detail View
|
|
# ------------------------------------------------------------ #
|
|
elsif ( $Self->{Subaction} eq 'Detail' ) {
|
|
|
|
# Get data for session ID
|
|
my %Data = $SessionObject->GetSessionIDData( SessionID => $WantSessionID );
|
|
|
|
if ( !%Data ) {
|
|
$Kernel::OM->Get('Kernel::System::Log')->Log(
|
|
Message => "No Session Data for Session ID $WantSessionID",
|
|
Priority => 'error',
|
|
);
|
|
}
|
|
|
|
$Data{SessionID} = $WantSessionID;
|
|
|
|
# create blocks
|
|
$LayoutObject->Block(
|
|
Name => 'ActionList',
|
|
);
|
|
$LayoutObject->Block(
|
|
Name => 'ActionOverview',
|
|
);
|
|
$LayoutObject->Block(
|
|
Name => 'ActionKillSession',
|
|
Data => {%Data},
|
|
);
|
|
|
|
$LayoutObject->Block(
|
|
Name => 'DetailView',
|
|
Data => {%Data},
|
|
);
|
|
|
|
KEY:
|
|
for my $Key ( sort keys %Data ) {
|
|
if ( ($Key) && ( defined( $Data{$Key} ) ) && $Key ne 'SessionID' ) {
|
|
if ( ref $Data{$Key} ) {
|
|
$Data{$Key} = '[...]';
|
|
}
|
|
elsif ( $Key =~ /^_/ ) {
|
|
next KEY;
|
|
}
|
|
elsif ( $Key =~ /Password|Pw/ ) {
|
|
$Data{$Key} = '[xxx]';
|
|
}
|
|
else {
|
|
$Data{$Key} = $LayoutObject->Ascii2Html( Text => $Data{$Key} );
|
|
}
|
|
if ( $Key eq 'UserSessionStart' ) {
|
|
|
|
my $DateTimeObject = $Kernel::OM->Create('Kernel::System::DateTime');
|
|
my $Age = int(
|
|
( $DateTimeObject->ToEpoch() - $Data{UserSessionStart} )
|
|
/ 3600
|
|
);
|
|
my $TimeStamp = $Kernel::OM->Create(
|
|
'Kernel::System::DateTime',
|
|
ObjectParams => {
|
|
Epoch => $Data{UserSessionStart},
|
|
}
|
|
)->ToString();
|
|
$Data{$Key} = "$TimeStamp / $Age h ";
|
|
}
|
|
if ( $Data{$Key} eq ';' ) {
|
|
$Data{$Key} = '';
|
|
}
|
|
}
|
|
|
|
if ( $Data{$Key} ) {
|
|
|
|
# create blocks
|
|
$LayoutObject->Block(
|
|
Name => 'DetailViewRow',
|
|
Data => {
|
|
Key => $Key,
|
|
Value => $Data{$Key},
|
|
},
|
|
);
|
|
}
|
|
}
|
|
|
|
# generate output
|
|
my $Output = $LayoutObject->Header();
|
|
$Output .= $LayoutObject->NavigationBar();
|
|
|
|
$Output .= $LayoutObject->Output(
|
|
TemplateFile => 'AdminSession',
|
|
Data => {
|
|
Action => $Self->{Subaction},
|
|
%Data,
|
|
},
|
|
);
|
|
|
|
$Output .= $LayoutObject->Footer();
|
|
return $Output;
|
|
}
|
|
|
|
# ------------------------------------------------------------ #
|
|
# else, show session list
|
|
# ------------------------------------------------------------ #
|
|
else {
|
|
|
|
# get all sessions
|
|
my @List = $SessionObject->GetAllSessionIDs();
|
|
my $Table = '';
|
|
my $Counter = @List;
|
|
my %MetaData = ();
|
|
$MetaData{UserSession} = 0;
|
|
$MetaData{CustomerSession} = 0;
|
|
$MetaData{UserSessionUniq} = 0;
|
|
$MetaData{CustomerSessionUniq} = 0;
|
|
|
|
$LayoutObject->Block(
|
|
Name => 'Overview',
|
|
);
|
|
|
|
$LayoutObject->Block(
|
|
Name => 'Filter'
|
|
);
|
|
|
|
for my $SessionID (@List) {
|
|
my $List = '';
|
|
my %Data = $SessionObject->GetSessionIDData( SessionID => $SessionID );
|
|
if ( $Data{UserType} && $Data{UserLogin} ) {
|
|
$MetaData{"$Data{UserType}Session"}++;
|
|
if ( !$MetaData{"$Data{UserLogin}"} ) {
|
|
$MetaData{"$Data{UserType}SessionUniq"}++;
|
|
$MetaData{"$Data{UserLogin}"} = 1;
|
|
}
|
|
}
|
|
|
|
$Data{UserType} = 'Agent' if ( !$Data{UserType} || $Data{UserType} ne 'Customer' );
|
|
|
|
# create blocks
|
|
$LayoutObject->Block(
|
|
Name => 'Session',
|
|
Data => {
|
|
SessionID => $SessionID,
|
|
UserFirstname => $Data{UserFirstname},
|
|
UserLastname => $Data{UserLastname},
|
|
UserFullname => $Data{UserFullname},
|
|
UserType => $Data{UserType},
|
|
},
|
|
);
|
|
}
|
|
|
|
# create blocks
|
|
$LayoutObject->Block(
|
|
Name => 'ActionList',
|
|
);
|
|
$LayoutObject->Block(
|
|
Name => 'ActionSummary',
|
|
Data => {
|
|
Counter => $Counter,
|
|
%MetaData
|
|
}
|
|
);
|
|
|
|
# generate output
|
|
my $Output = $LayoutObject->Header();
|
|
$Output .= $LayoutObject->NavigationBar();
|
|
$Output .= $LayoutObject->Output(
|
|
TemplateFile => 'AdminSession',
|
|
Data => {
|
|
Counter => $Counter,
|
|
%MetaData
|
|
}
|
|
);
|
|
$Output .= $LayoutObject->Footer();
|
|
return $Output;
|
|
}
|
|
}
|
|
|
|
1;
|