# -- # 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::System::GenericInterface::WebserviceHistory; use strict; use warnings; our @ObjectDependencies = ( 'Kernel::System::DB', 'Kernel::System::Log', 'Kernel::System::Main', 'Kernel::System::YAML', ); =head1 NAME Kernel::System::GenericInterface::WebserviceHistory =head1 DESCRIPTION WebserviceHistory configuration history backend. It holds older versions of web service configuration data. =head1 PUBLIC INTERFACE =head2 new() create a debug log object. Do not use it directly, instead use: my $WebserviceHistoryObject = $Kernel::OM->Get('Kernel::System::GenericInterface::WebserviceHistory'); =cut sub new { my ( $WebserviceHistory, %Param ) = @_; # allocate new hash for object my $Self = {}; bless( $Self, $WebserviceHistory ); return $Self; } =head2 WebserviceHistoryAdd() add new WebserviceHistory entry my $ID = $WebserviceHistoryObject->WebserviceHistoryAdd( WebserviceID => 2134, Config => { ... }, UserID => 123, ); =cut sub WebserviceHistoryAdd { my ( $Self, %Param ) = @_; # check needed stuff for my $Key (qw(WebserviceID Config UserID)) { if ( !$Param{$Key} ) { $Kernel::OM->Get('Kernel::System::Log')->Log( Priority => 'error', Message => "Need $Key!" ); return; } } # dump config as string my $Config = $Kernel::OM->Get('Kernel::System::YAML')->Dump( Data => $Param{Config} ); # md5 of content my $MD5 = $Kernel::OM->Get('Kernel::System::Main')->MD5sum( String => $Param{WebserviceID} . $Param{Config} . $Kernel::OM->Get('Kernel::System::Main')->GenerateRandomString( Length => 32 ) ); # get database object my $DBObject = $Kernel::OM->Get('Kernel::System::DB'); # sql return if !$DBObject->Do( SQL => 'INSERT INTO gi_webservice_config_history (config_id, config, config_md5, create_time, create_by, change_time, change_by) VALUES (?, ?, ?, current_timestamp, ?, current_timestamp, ?)', Bind => [ \$Param{WebserviceID}, \$Config, \$MD5, \$Param{UserID}, \$Param{UserID}, ], ); return if !$DBObject->Prepare( SQL => 'SELECT id FROM gi_webservice_config_history WHERE config_md5 = ?', Bind => [ \$MD5 ], Limit => 1, ); my $ID; while ( my @Row = $DBObject->FetchrowArray() ) { $ID = $Row[0]; } return $ID; } =head2 WebserviceHistoryGet() get WebserviceHistory attributes my $WebserviceHistory = $WebserviceHistoryObject->WebserviceHistoryGet( ID => 123, ); Returns: $WebserviceHistory = { Config => $ConfigRef, WebserviceID => 123, CreateTime => '2011-02-08 15:08:00', ChangeTime => '2011-02-08 15:08:00', }; =cut sub WebserviceHistoryGet { my ( $Self, %Param ) = @_; # check needed stuff if ( !$Param{ID} ) { $Kernel::OM->Get('Kernel::System::Log')->Log( Priority => 'error', Message => 'Need ID!' ); return; } # get database object my $DBObject = $Kernel::OM->Get('Kernel::System::DB'); # sql return if !$DBObject->Prepare( SQL => 'SELECT config_id, config, create_time, change_time FROM gi_webservice_config_history WHERE id = ?', Bind => [ \$Param{ID} ], Limit => 1, ); # get yaml object my $YAMLObject = $Kernel::OM->Get('Kernel::System::YAML'); my %Data; while ( my @Data = $DBObject->FetchrowArray() ) { my $Config = $YAMLObject->Load( Data => $Data[1] ); %Data = ( ID => $Param{ID}, WebserviceID => $Data[0], Config => $Config, CreateTime => $Data[3], ChangeTime => $Data[4], ); } return \%Data; } =head2 WebserviceHistoryUpdate() update WebserviceHistory attributes my $Success = $WebserviceHistoryObject->WebserviceHistoryUpdate( ID => 123, WebserviceID => 123 Config => $ConfigHashRef, UserID => 123, ); =cut sub WebserviceHistoryUpdate { my ( $Self, %Param ) = @_; # check needed stuff for my $Key (qw(ID WebserviceID Config UserID)) { if ( !$Param{$Key} ) { $Kernel::OM->Get('Kernel::System::Log')->Log( Priority => 'error', Message => "Need $Key!" ); return; } } # dump config as string my $Config = $Kernel::OM->Get('Kernel::System::YAML')->Dump( Data => $Param{Config} ); # get database object my $DBObject = $Kernel::OM->Get('Kernel::System::DB'); # sql return if !$DBObject->Do( SQL => 'UPDATE gi_webservice_config_history SET config_id = ?, config = ?, change_time = current_timestamp, change_by = ? WHERE id = ?', Bind => [ \$Param{WebserviceID}, \$Config, \$Param{UserID}, \$Param{ID}, ], ); return 1; } =head2 WebserviceHistoryDelete() delete WebserviceHistory my $Success = $WebserviceHistoryObject->WebserviceHistoryDelete( WebserviceID => 123, UserID => 123, ); =cut sub WebserviceHistoryDelete { my ( $Self, %Param ) = @_; # check needed stuff for my $Key (qw(WebserviceID UserID)) { if ( !$Param{$Key} ) { $Kernel::OM->Get('Kernel::System::Log')->Log( Priority => 'error', Message => "Need $Key!" ); return; } } # sql return if !$Kernel::OM->Get('Kernel::System::DB')->Do( SQL => 'DELETE FROM gi_webservice_config_history WHERE config_id = ?', Bind => [ \$Param{WebserviceID} ], ); return 1; } =head2 WebserviceHistoryList() get WebserviceHistory list for a GenericInterface web service my @List = $WebserviceHistoryObject->WebserviceHistoryList( WebserviceID => 1243, ); =cut sub WebserviceHistoryList { my ( $Self, %Param ) = @_; # check needed stuff for my $Key (qw(WebserviceID)) { if ( !$Param{$Key} ) { $Kernel::OM->Get('Kernel::System::Log')->Log( Priority => 'error', Message => "Need $Key!" ); return; } } # get database object my $DBObject = $Kernel::OM->Get('Kernel::System::DB'); return if !$DBObject->Prepare( SQL => 'SELECT id FROM gi_webservice_config_history WHERE config_id = ? ORDER BY id DESC', Bind => [ \$Param{WebserviceID} ], ); my @List; while ( my @Row = $DBObject->FetchrowArray() ) { push @List, $Row[0]; } return @List; } 1; =head1 TERMS AND CONDITIONS This software is part of the OTRS project (L). 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 L. =cut