View | Details | Raw Unified | Return to bug 37543
Collapse All | Expand All

(-)a/misc/bin/connexion_import_daemon.pl (-26 / +47 lines)
Lines 104-110 use MARC::File::XML; Link Here
104
104
105
use constant CLIENT_READ_TIMEOUT     => 5;
105
use constant CLIENT_READ_TIMEOUT     => 5;
106
use constant CLIENT_READ_BUFFER_SIZE => 100000;
106
use constant CLIENT_READ_BUFFER_SIZE => 100000;
107
use constant AUTH_URI       => "/cgi-bin/koha/mainpage.pl";
107
use constant AUTH_URI       => "/cgi-bin/koha/svc/authentication";
108
use constant IMPORT_SVC_URI => "/cgi-bin/koha/svc/import_bib";
108
use constant IMPORT_SVC_URI => "/cgi-bin/koha/svc/import_bib";
109
109
110
sub new {
110
sub new {
Lines 239-244 sub _ua { Link Here
239
    return $ua;
239
    return $ua;
240
}
240
}
241
241
242
sub get_current_csrf_token {
243
    my $self = shift;
244
    my $ua = $self->{ua};
245
    my $url = $self->{koha} . AUTH_URI;
246
    return $ua->get($url)->header('CSRF-TOKEN');
247
}
248
249
sub authenticate {
250
    my $self = shift;
251
    my $ua = $self->{ua};
252
    my $url = $self->{koha} . AUTH_URI;
253
    my $resp = $ua->post(
254
        $url,
255
        {
256
            login_userid => $self->{user},
257
            login_password => $self->{password},
258
            csrf_token => $self->get_current_csrf_token,
259
        }
260
    );
261
    if ( !$resp->is_success ) {
262
        $self->log("Authentication failed", $resp->request->as_string, $resp->as_string);
263
        return;
264
    }
265
    return $resp->header('CSRF-TOKEN');
266
}
267
242
sub read_request {
268
sub read_request {
243
    my ( $self, $io ) = @_;
269
    my ( $self, $io ) = @_;
244
270
Lines 355-392 sub handle_request { Link Here
355
    }
381
    }
356
382
357
    my $base_url = $self->{koha};
383
    my $base_url = $self->{koha};
384
    my $post_body = {
385
        'nomatch_action'    => $self->{params}->{nomatch_action},
386
        'overlay_action'    => $self->{params}->{overlay_action},
387
        'match'             => $self->{params}->{match},
388
        'import_mode'       => $self->{params}->{import_mode},
389
        'framework'         => $self->{params}->{framework},
390
        'overlay_framework' => $self->{params}->{overlay_framework},
391
        'item_action'       => $self->{params}->{item_action},
392
        'xml'               => $data
393
    };
394
395
    # If we have a token, try it, else, authenticate for the first time.
396
    $self->{csrf_token} = $self->authenticate unless $self->{csrf_token};
358
    my $resp = $ua->post(
397
    my $resp = $ua->post(
359
        $base_url . IMPORT_SVC_URI,
398
        $base_url . IMPORT_SVC_URI,
360
        {
399
        $post_body,
361
            'nomatch_action'    => $self->{params}->{nomatch_action},
400
        csrf_token => $self->{csrf_token},
362
            'overlay_action'    => $self->{params}->{overlay_action},
363
            'match'             => $self->{params}->{match},
364
            'import_mode'       => $self->{params}->{import_mode},
365
            'framework'         => $self->{params}->{framework},
366
            'overlay_framework' => $self->{params}->{overlay_framework},
367
            'item_action'       => $self->{params}->{item_action},
368
            'xml'               => $data
369
        }
370
    );
401
    );
371
402
372
    my $status = $resp->code;
403
    my $status = $resp->code;
373
    if ( $status == HTTP_UNAUTHORIZED || $status == HTTP_FORBIDDEN ) {
404
    if ( $status == HTTP_UNAUTHORIZED || $status == HTTP_FORBIDDEN ) {
374
        my $user     = $self->{user};
405
        # Our token might have expired. Re-authenticate and post again.
375
        my $password = $self->{password};
406
        $self->{csrf_token} = $self->authenticate;
376
        $resp = $ua->post( $base_url . AUTH_URI, { userid => $user, password => $password } );
377
        $resp = $ua->post(
407
        $resp = $ua->post(
378
            $base_url . IMPORT_SVC_URI,
408
            $base_url . IMPORT_SVC_URI,
379
            {
409
            $post_body,
380
                'nomatch_action'    => $self->{params}->{nomatch_action},
410
            csrf_token => $self->{csrf_token},
381
                'overlay_action'    => $self->{params}->{overlay_action},
411
        )
382
                'match'             => $self->{params}->{match},
383
                'import_mode'       => $self->{params}->{import_mode},
384
                'framework'         => $self->{params}->{framework},
385
                'overlay_framework' => $self->{params}->{overlay_framework},
386
                'item_action'       => $self->{params}->{item_action},
387
                'xml'               => $data
388
            }
389
        ) if $resp->is_success;
390
    }
412
    }
391
    unless ($resp->is_success) {
413
    unless ($resp->is_success) {
392
        $self->log("Unsuccessful request", $resp->request->as_string, $resp->as_string);
414
        $self->log("Unsuccessful request", $resp->request->as_string, $resp->as_string);
393
- 

Return to bug 37543