349 lines
10 KiB
Perl
349 lines
10 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::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;
|