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

(-)a/C4/Auth.pm (-5 / +32 lines)
Lines 74-80 BEGIN { Link Here
74
    @EXPORT_OK = qw(
74
    @EXPORT_OK = qw(
75
      checkauth check_api_auth get_session check_cookie_auth checkpw checkpw_internal checkpw_hash
75
      checkauth check_api_auth get_session check_cookie_auth checkpw checkpw_internal checkpw_hash
76
      get_all_subpermissions get_user_subpermissions track_login_daily in_iprange
76
      get_all_subpermissions get_user_subpermissions track_login_daily in_iprange
77
      get_template_and_user haspermission
77
      get_template_and_user haspermission create_basic_session
78
    );
78
    );
79
79
80
    $ldap      = C4::Context->config('useldapserver') || 0;
80
    $ldap      = C4::Context->config('useldapserver') || 0;
Lines 1561-1567 sub check_api_auth { Link Here
1561
        # new login
1561
        # new login
1562
        my $userid   = $query->param('userid');
1562
        my $userid   = $query->param('userid');
1563
        my $password = $query->param('password');
1563
        my $password = $query->param('password');
1564
        my $auth_client_login = $query->param('auth_client_login');
1565
        my ( $return, $cardnumber, $cas_ticket );
1564
        my ( $return, $cardnumber, $cas_ticket );
1566
1565
1567
        # Proxy CAS auth
1566
        # Proxy CAS auth
Lines 1571-1579 sub check_api_auth { Link Here
1571
            # In case of a CAS authentication, we use the ticket instead of the password
1570
            # In case of a CAS authentication, we use the ticket instead of the password
1572
            my $PT = $query->param('PT');
1571
            my $PT = $query->param('PT');
1573
            ( $return, $cardnumber, $userid, $cas_ticket ) = check_api_auth_cas( $PT, $query );    # EXTERNAL AUTH
1572
            ( $return, $cardnumber, $userid, $cas_ticket ) = check_api_auth_cas( $PT, $query );    # EXTERNAL AUTH
1574
        } elsif ( $auth_client_login && ( $userid || $query->param('cardnumber') ) ) {
1575
            $cardnumber = $query->param('cardnumber');
1576
            $return = 1;
1577
        } else {
1573
        } else {
1578
1574
1579
            # User / password auth
1575
            # User / password auth
Lines 1871-1876 sub get_session { Link Here
1871
    return $session;
1867
    return $session;
1872
}
1868
}
1873
1869
1870
=head2 create_basic_session
1871
1872
my $session = create_basic_session({ patron => $patron, interface => $interface });
1873
1874
Creates a session and adds all basic parameters for a session to work
1875
1876
=cut
1877
1878
sub create_basic_session {
1879
    my $params    = shift;
1880
    my $patron    = $params->{patron};
1881
    my $interface = $params->{interface};
1882
1883
    my $session = get_session("");
1884
1885
    $session->param( 'number',       $patron->borrowernumber );
1886
    $session->param( 'id',           $patron->userid );
1887
    $session->param( 'cardnumber',   $patron->cardnumber );
1888
    $session->param( 'firstname',    $patron->firstname );
1889
    $session->param( 'surname',      $patron->surname );
1890
    $session->param( 'branch',       $patron->branchcode );
1891
    $session->param( 'branchname',   $patron->library->branchname );
1892
    $session->param( 'flags',        $patron->flags );
1893
    $session->param( 'emailaddress', $patron->email );
1894
    $session->param( 'ip',           $session->remote_addr() );
1895
    $session->param( 'lasttime',     time() );
1896
    $session->param( 'interface',    $interface);
1897
1898
    return $session;
1899
}
1900
1874
1901
1875
# FIXME no_set_userenv may be replaced with force_branchcode_for_userenv
1902
# FIXME no_set_userenv may be replaced with force_branchcode_for_userenv
1876
# (or something similar)
1903
# (or something similar)
(-)a/Koha/REST/Plugin/Auth/IdP.pm (-16 / +7 lines)
Lines 81-104 Generates a new session. Link Here
81
81
82
    $app->helper(
82
    $app->helper(
83
        'auth.session' => sub {
83
        'auth.session' => sub {
84
            my ( $c, $patron ) = @_;
84
            my ( $c, $params ) = @_;
85
            my $userid     = $patron->userid;
85
            my $patron      = $params->{patron};
86
            my $cardnumber = $patron->cardnumber;
86
            my $interface   = $params->{interface};
87
            my $cgi        = CGI->new;
87
            my $provider    = $params->{provider};
88
89
            $cgi->param( userid            => $userid );
90
            $cgi->param( cardnumber        => $cardnumber );
91
            $cgi->param( auth_client_login => 1 );
92
93
            my ( $status, $cookie, $session_id ) = C4::Auth::check_api_auth($cgi);
94
95
            Koha::Exceptions::UnderMaintenance->throw( code => 503 )
96
              if $status eq "maintenance";
97
88
98
            Koha::Exceptions::Auth::CannotCreateSession->throw( code => 500 )
89
            my $session = C4::Auth::create_basic_session({ patron => $patron, interface => $interface });
99
              unless $status eq "ok";
90
            $session->param('idp_code', $provider);
100
91
101
            return ( $status, $cookie, $session_id );
92
            return $session->id;
102
        }
93
        }
103
    );
94
    );
104
}
95
}
(-)a/Koha/REST/V1/OAuth/Client.pm (-2 / +2 lines)
Lines 65-71 sub login { Link Here
65
        $uri = '/cgi-bin/koha/mainpage.pl';
65
        $uri = '/cgi-bin/koha/mainpage.pl';
66
    }
66
    }
67
67
68
    unless ( $provider_config ) {
68
    unless ( $provider_config && $provider_config->{authorize_url} ) {
69
        my $error = "No configuration found for your provider";
69
        my $error = "No configuration found for your provider";
70
        return $c->redirect_to($uri."?auth_error=$error");
70
        return $c->redirect_to($uri."?auth_error=$error");
71
    }
71
    }
Lines 99-105 sub login { Link Here
99
                    );
99
                    );
100
                }
100
                }
101
101
102
                my ( $status, $cookie, $session_id ) = $c->auth->session($patron);
102
                my $session_id = $c->auth->session({ patron => $patron, interface => $interface, provider => $provider });
103
103
104
                $c->cookie( CGISESSID => $session_id, { path => "/" } );
104
                $c->cookie( CGISESSID => $session_id, { path => "/" } );
105
105
(-)a/t/db_dependent/Auth.t (-2 / +23 lines)
Lines 10-16 use CGI qw ( -utf8 ); Link Here
10
use Test::MockObject;
10
use Test::MockObject;
11
use Test::MockModule;
11
use Test::MockModule;
12
use List::MoreUtils qw/all any none/;
12
use List::MoreUtils qw/all any none/;
13
use Test::More tests => 16;
13
use Test::More tests => 17;
14
use Test::Warn;
14
use Test::Warn;
15
use t::lib::Mocks;
15
use t::lib::Mocks;
16
use t::lib::TestBuilder;
16
use t::lib::TestBuilder;
Lines 833-836 subtest 'Userenv clearing in check_cookie_auth' => sub { Link Here
833
    is( C4::Context->userenv, undef, 'Environment should be cleared again' );
833
    is( C4::Context->userenv, undef, 'Environment should be cleared again' );
834
};
834
};
835
835
836
subtest 'create_basic_session tests' => sub {
837
    plan tests => 12;
838
839
    my $patron = $builder->build_object({ class => 'Koha::Patrons' });
840
    my $interface = 'opac';
841
842
    my $session = C4::Auth::create_basic_session({ patron => $patron, interface => $interface });
843
844
    isnt($session->id, undef, 'A new sessionID was created');
845
    is( $session->param('number'), $patron->borrowernumber, 'Session parameter number matches' );
846
    is( $session->param('id'), $patron->userid, 'Session parameter id matches' );
847
    is( $session->param('cardnumber'), $patron->cardnumber, 'Session parameter cardnumber matches' );
848
    is( $session->param('firstname'), $patron->firstname, 'Session parameter firstname matches' );
849
    is( $session->param('surname'), $patron->surname, 'Session parameter surname matches' );
850
    is( $session->param('branch'), $patron->branchcode, 'Session parameter branch matches' );
851
    is( $session->param('branchname'), $patron->library->branchname, 'Session parameter branchname matches' );
852
    is( $session->param('flags'), $patron->flags, 'Session parameter flags matches' );
853
    is( $session->param('emailaddress'), $patron->email, 'Session parameter emailaddress matches' );
854
    is( $session->param('ip'), $session->remote_addr(), 'Session parameter ip matches' );
855
    is( $session->param('interface'), $interface, 'Session parameter interface matches' );
856
};
857
836
$schema->storage->txn_rollback;
858
$schema->storage->txn_rollback;
837
- 

Return to bug 32178