This commit is contained in:
2024-10-14 00:08:40 +02:00
parent dbfba56f66
commit 1462d52e13
4572 changed files with 2658864 additions and 0 deletions

View File

@@ -0,0 +1,348 @@
# --
# 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::AdminGenericInterfaceWebserviceHistory;
use strict;
use warnings;
use Kernel::System::VariableCheck qw(:all);
use Kernel::Language qw(Translatable);
our $ObjectManagerDisabled = 1;
sub new {
my ( $Type, %Param ) = @_;
my $Self = {%Param};
bless( $Self, $Type );
return $Self;
}
sub Run {
my ( $Self, %Param ) = @_;
my $ParamObject = $Kernel::OM->Get('Kernel::System::Web::Request');
my $WebserviceHistoryID = $ParamObject->GetParam( Param => 'WebserviceHistoryID' );
my $WebserviceID = $ParamObject->GetParam( Param => 'WebserviceID' );
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
if ( !$WebserviceID ) {
return $LayoutObject->ErrorScreen(
Message => Translatable('Need WebserviceID!'),
);
}
# Send data to JS.
$LayoutObject->AddJSData(
Key => 'WebserviceID',
Value => $WebserviceID
);
my $WebserviceData = $Kernel::OM->Get('Kernel::System::GenericInterface::Webservice')->WebserviceGet(
ID => $WebserviceID,
);
if ( !IsHashRefWithData($WebserviceData) ) {
return $LayoutObject->ErrorScreen(
Message =>
$LayoutObject->{LanguageObject}->Translate( 'Could not get data for WebserviceID %s', $WebserviceID ),
);
}
if ( $Self->{Subaction} eq 'GetWebserviceList' ) {
return $Self->_GetWebserviceList(
%Param,
WebserviceID => $WebserviceID,
WebserviceData => $WebserviceData,
);
}
elsif ( $Self->{Subaction} eq 'GetWebserviceHistoryDetails' ) {
return $Self->_GetWebserviceHistoryDetails(
%Param,
WebserviceHistoryID => $WebserviceHistoryID,
);
}
elsif ( $Self->{Subaction} eq 'Export' ) {
return $Self->_ExportWebserviceHistory(
%Param,
WebserviceID => $WebserviceID,
WebserviceHistoryID => $WebserviceHistoryID,
WebserviceData => $WebserviceData,
);
}
elsif ( $Self->{Subaction} eq 'Rollback' ) {
# Challenge token check for write action.
$LayoutObject->ChallengeTokenCheck();
return $Self->_RollbackWebserviceHistory(
%Param,
WebserviceID => $WebserviceID,
WebserviceHistoryID => $WebserviceHistoryID,
WebserviceData => $WebserviceData,
);
}
# Default: show start screen.
return $Self->_ShowScreen(
%Param,
WebserviceID => $WebserviceID,
WebserviceData => $WebserviceData,
);
}
sub _ShowScreen {
my ( $Self, %Param ) = @_;
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
my $Output = $LayoutObject->Header();
$Output .= $LayoutObject->NavigationBar();
$Output .= $LayoutObject->Output(
TemplateFile => 'AdminGenericInterfaceWebserviceHistory',
Data => {
%Param,
WebserviceName => $Param{WebserviceData}->{Name},
},
);
$Output .= $LayoutObject->Footer();
return $Output;
}
sub _GetWebserviceList {
my ( $Self, %Param ) = @_;
my %LogSearchParam = (
WebserviceID => $Param{WebserviceID},
);
# Get web service history object.
my $WebserviceHistoryObject = $Kernel::OM->Get('Kernel::System::GenericInterface::WebserviceHistory');
my @List = $WebserviceHistoryObject->WebserviceHistoryList(
WebserviceID => $Param{WebserviceID},
);
my @LogData;
# Get web service history info.
for my $Key (@List) {
my $WebserviceHistory = $WebserviceHistoryObject->WebserviceHistoryGet(
ID => $Key,
);
$WebserviceHistory->{Config} = '';
push @LogData, $WebserviceHistory;
}
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
# Build JSON output.
my $JSON = $LayoutObject->JSONEncode(
Data => {
LogData => \@LogData,
},
);
# Send JSON response.
return $LayoutObject->Attachment(
ContentType => 'application/json; charset=' . $LayoutObject->{Charset},
Content => $JSON,
Type => 'inline',
NoCache => 1,
);
}
sub _GetWebserviceHistoryDetails {
my ( $Self, %Param ) = @_;
my $PasswordMask = '*******';
my $WebserviceHistoryID = $Param{WebserviceHistoryID};
if ( !$WebserviceHistoryID ) {
$Kernel::OM->Get('Kernel::System::Log')->Log(
Priority => 'error',
Message => 'Got no WebserviceID',
);
return; # return empty response
}
my $LogData = $Kernel::OM->Get('Kernel::System::GenericInterface::WebserviceHistory')->WebserviceHistoryGet(
ID => $WebserviceHistoryID,
);
# Mask password strings.
if (
IsStringWithData(
$LogData->{Config}->{Requester}->{Transport}->{Config}->{Authentication}->{BasicAuthPassword}
)
)
{
$LogData->{Config}->{Requester}->{Transport}->{Config}->{Authentication}->{BasicAuthPassword} = $PasswordMask;
}
if (
IsStringWithData( $LogData->{Config}->{Requester}->{Transport}->{Config}->{Proxy}->{ProxyPassword} )
)
{
$LogData->{Config}->{Requester}->{Transport}->{Config}->{Proxy}->{ProxyPassword} = $PasswordMask;
}
if (
IsStringWithData( $LogData->{Config}->{Requester}->{Transport}->{Config}->{SSL}->{SSLPassword} )
)
{
$LogData->{Config}->{Requester}->{Transport}->{Config}->{SSL}->{SSLPassword} = $PasswordMask;
}
# For compatibility (web services changed before OTRS 6).
if (
IsStringWithData( $LogData->{Config}->{Requester}->{Transport}->{Config}->{Authentication}->{Password} )
)
{
$LogData->{Config}->{Requester}->{Transport}->{Config}->{Authentication}->{Password} = $PasswordMask;
}
elsif (
!IsHashRefWithData( $LogData->{Config}->{Requester}->{Transport}->{Config}->{Authentication} )
)
{
delete $LogData->{Config}->{Requester}->{Transport}->{Config}->{Authentication};
}
if (
IsStringWithData( $LogData->{Config}->{Requester}->{Transport}->{Config}->{SSL}->{SSLProxyPassword} )
)
{
$LogData->{Config}->{Requester}->{Transport}->{Config}->{SSL}->{SSLProxyPassword} = $PasswordMask;
}
if (
IsStringWithData( $LogData->{Config}->{Requester}->{Transport}->{Config}->{SSL}->{SSLP12Password} )
)
{
$LogData->{Config}->{Requester}->{Transport}->{Config}->{SSL}->{SSLP12Password} = $PasswordMask;
}
# Remove structure added by auto-vivification.
if (
!IsHashRefWithData( $LogData->{Config}->{Requester}->{Transport}->{Config}->{Authentication} )
)
{
delete $LogData->{Config}->{Requester}->{Transport}->{Config}->{Authentication};
}
if (
!IsHashRefWithData( $LogData->{Config}->{Requester}->{Transport}->{Config}->{Proxy} )
)
{
delete $LogData->{Config}->{Requester}->{Transport}->{Config}->{Proxy};
}
if (
!IsHashRefWithData( $LogData->{Config}->{Requester}->{Transport}->{Config}->{SSL} )
)
{
delete $LogData->{Config}->{Requester}->{Transport}->{Config}->{SSL};
}
# Dump config.
$LogData->{Config} = $Kernel::OM->Get('Kernel::System::YAML')->Dump(
Data => $LogData->{Config},
);
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
# Build JSON output.
my $JSON = $LayoutObject->JSONEncode(
Data => {
LogData => $LogData,
},
);
# Send JSON response.
return $LayoutObject->Attachment(
ContentType => 'application/json; charset=' . $LayoutObject->{Charset},
Content => $JSON,
Type => 'inline',
NoCache => 1,
);
}
sub _ExportWebserviceHistory {
my ( $Self, %Param ) = @_;
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
if ( !$Param{WebserviceHistoryID} ) {
$LayoutObject->FatalError(
Message => Translatable('Got no WebserviceHistoryID!'),
);
}
my $WebserviceHistoryID = $Param{WebserviceHistoryID};
my $WebserviceHistoryData
= $Kernel::OM->Get('Kernel::System::GenericInterface::WebserviceHistory')->WebserviceHistoryGet(
ID => $WebserviceHistoryID,
);
# Check for valid web service configuration.
if ( !IsHashRefWithData($WebserviceHistoryData) ) {
return $LayoutObject->ErrorScreen(
Message =>
$LayoutObject->{LanguageObject}
->Translate( 'Could not get history data for WebserviceHistoryID %s', $WebserviceHistoryID ),
);
}
# Dump configuration into a YAML structure.
my $YAMLContent = $Kernel::OM->Get('Kernel::System::YAML')->Dump(
Data => $WebserviceHistoryData->{Config},
);
# Return YAML to download.
my $YAMLFile = $Param{WebserviceData}->{Name} || 'yamlfile';
return $LayoutObject->Attachment(
Filename => $YAMLFile . '.yml',
ContentType => "text/plain; charset=" . $LayoutObject->{UserCharset},
Content => $YAMLContent,
);
}
sub _RollbackWebserviceHistory {
my ( $Self, %Param ) = @_;
my $LayoutObject = $Kernel::OM->Get('Kernel::Output::HTML::Layout');
if ( !$Param{WebserviceHistoryID} ) {
$LayoutObject->FatalError(
Message => Translatable('Got no WebserviceHistoryID!'),
);
}
my $WebserviceID = $Param{WebserviceID};
my $WebserviceHistoryID = $Param{WebserviceHistoryID};
my $WebserviceHistoryData
= $Kernel::OM->Get('Kernel::System::GenericInterface::WebserviceHistory')->WebserviceHistoryGet(
ID => $WebserviceHistoryID,
);
my $Success = $Kernel::OM->Get('Kernel::System::GenericInterface::Webservice')->WebserviceUpdate(
ID => $WebserviceID,
Name => $Param{WebserviceData}->{Name},
Config => $WebserviceHistoryData->{Config},
ValidID => $Param{WebserviceData}->{ValidID},
UserID => $Self->{UserID},
);
return $LayoutObject->Redirect(
OP => "Action=AdminGenericInterfaceWebservice;Subaction=Change;WebserviceID=$WebserviceID",
);
}
1;