Bug 37526: Handle redirects in SUSHI requests

Test plan:
1) Apply test patch only. Run:
prove t/db_dependent/Koha/BackgroundJob/ErmSushiHarvester.t
2) Verify tests fail.
3) Apply this patch. Run tests again. Verify they pass.

PA amended: Added test plan

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
This commit is contained in:
Matt Blenkinsop 2024-07-30 12:54:14 +00:00 committed by Katrin Fischer
parent f8657165f1
commit a1f0fc04d1
No known key found for this signature in database
GPG Key ID: 0EF6E2C03357A834
1 changed files with 27 additions and 9 deletions

View File

@ -174,11 +174,8 @@ sub harvest_sushi {
$self->{report_type} = $args->{report_type};
$self->{begin_date} = $args->{begin_date};
$self->{end_date} = $args->{end_date};
my $url = $self->_build_url_query;
my $request = HTTP::Request->new( 'GET' => $url );
my $ua = LWP::UserAgent->new;
$ua->agent( 'Koha/' . Koha::version() );
my $response = $ua->simple_request($request);
my $url = $self->_build_url_query;
my $response = _handle_sushi_request($url);
my $result = decode_json( $response->decoded_content );
@ -278,10 +275,7 @@ sub test_connection {
$url .= '&requestor_id=' . $self->requestor_id if $self->requestor_id;
$url .= '&api_key=' . $self->api_key if $self->api_key;
my $request = HTTP::Request->new( 'GET' => $url );
my $ua = LWP::UserAgent->new;
$ua->agent( 'Koha/' . Koha::version() );
my $response = $ua->simple_request($request);
my $response = _handle_sushi_request($url);
if ( $response->{_rc} >= 400 ) {
my $message = $response->{_msg};
@ -525,6 +519,30 @@ sub _counter_file_size_too_large {
return 0;
}
=head3 _handle_sushi_response
Creates and sends the request based on a provided url
Also handles any redirects
=cut
sub _handle_sushi_request {
my ($url) = @_;
my $request = HTTP::Request->new( 'GET' => $url );
my $ua = LWP::UserAgent->new;
$ua->agent( 'Koha/' . Koha::version() );
my $response = $ua->simple_request($request);
if ( $response->is_redirect ) {
my $redirect_url = $response->header('Location');
$redirect_url = URI->new_abs( $redirect_url, $url );
$response = $ua->get($redirect_url);
}
return $response;
}
=head3 _type
=cut