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

(-)a/Koha/REST/V1/Auth.pm (+17 lines)
Lines 56-61 sub login { Link Here
56
    return $c->$cb($session, 201);
56
    return $c->$cb($session, 201);
57
}
57
}
58
58
59
sub logout {
60
    my ($c, $args, $cb) = @_;
61
62
    my $sessionid = $args->{session}->{sessionid};
63
    $sessionid = $c->cookie('CGISESSID') unless $sessionid;
64
65
    my ($status, $sid) = C4::Auth::check_cookie_auth($sessionid);
66
    unless ($status eq "ok") {
67
        return $c->$cb({ error => "Invalid session id."}, 401);
68
    }
69
70
    my $session = C4::Auth::get_session($sessionid);
71
    $session->delete;
72
    $session->flush;
73
    return $c->$cb({}, 200);
74
}
75
59
sub _swaggerize_session {
76
sub _swaggerize_session {
60
    my ($sessionid, $patron) = @_;
77
    my ($sessionid, $patron) = @_;
61
78
(-)a/api/v1/definitions/sessionid.json (+10 lines)
Line 0 Link Here
1
{
2
  "type": "object",
3
  "properties": {
4
    "sessionid": {
5
      "description": "The Koha sessionid",
6
      "type": "string"
7
    }
8
  },
9
  "required": ["sessionid"]
10
}
(-)a/api/v1/swagger.json (+35 lines)
Lines 42-47 Link Here
42
            }
42
            }
43
          }
43
          }
44
        }
44
        }
45
      },
46
      "delete": {
47
        "operationId": "logoutAuth",
48
        "tags": ["auth"],
49
        "summary": "Logout from Koha.",
50
        "description": "Logouts user from Koha by marking session as expired. sessionid is optional, if not given, logs out currently logged in user",
51
        "parameters": [
52
          { "$ref": "#/parameters/sessionidBodyParam" }
53
        ],
54
        "produces": [
55
          "application/json"
56
        ],
57
        "responses": {
58
          "200": {
59
            "description": "Successfully logged out",
60
            "schema": {
61
              "type": "object"
62
            }
63
          },
64
          "401": {
65
            "description": "Bad session id",
66
            "schema": {
67
              "$ref": "#/definitions/error"
68
            }
69
          }
70
        }
45
      }
71
      }
46
    },
72
    },
47
    "/patrons": {
73
    "/patrons": {
Lines 395-400 Link Here
395
      "required": true,
421
      "required": true,
396
      "type": "string"
422
      "type": "string"
397
    },
423
    },
424
    "sessionidBodyParam": {
425
      "name": "session",
426
      "description": "The CGISESSID Cookie used to authenticate a session",
427
      "in": "body",
428
      "required": false,
429
      "schema" : {
430
        "$ref": "definitions/sessionid.json"
431
      }
432
    },
398
    "useridPostParam": {
433
    "useridPostParam": {
399
      "name": "userid",
434
      "name": "userid",
400
      "in": "formData",
435
      "in": "formData",
(-)a/t/db_dependent/api/v1/auth.t (-2 / +40 lines)
Lines 19-29 Link Here
19
19
20
use Modern::Perl;
20
use Modern::Perl;
21
21
22
use Test::More tests => 20;
22
use Test::More tests => 38;
23
use Test::Mojo;
23
use Test::Mojo;
24
24
25
use t::lib::TestBuilder;
25
use t::lib::TestBuilder;
26
26
27
use C4::Auth;
27
use C4::Context;
28
use C4::Context;
28
use Koha::AuthUtils;
29
use Koha::AuthUtils;
29
30
Lines 85-90 $t->request_ok($tx) Link Here
85
  ->json_is('/borrowernumber', $borrower->{borrowernumber})
86
  ->json_is('/borrowernumber', $borrower->{borrowernumber})
86
  ->json_is('/email', $borrower->{email})
87
  ->json_is('/email', $borrower->{email})
87
  ->json_has('/sessionid');
88
  ->json_has('/sessionid');
89
my $sessionid = $tx->res->json->{sessionid};
88
90
89
$tx = $t->ua->build_tx(POST => '/api/v1/auth/session' => form => $invalid_login);
91
$tx = $t->ua->build_tx(POST => '/api/v1/auth/session' => form => $invalid_login);
90
$tx->req->env({REMOTE_ADDR => '127.0.0.1'});
92
$tx->req->env({REMOTE_ADDR => '127.0.0.1'});
Lines 98-101 $t->request_ok($tx) Link Here
98
  ->status_is(401)
100
  ->status_is(401)
99
  ->json_is('/error', "Login failed.");
101
  ->json_is('/error', "Login failed.");
100
102
103
$tx = $t->ua->build_tx(DELETE => '/api/v1/auth/session' => json => { sessionid => $sessionid."123" });
104
$tx->req->env({REMOTE_ADDR => '127.0.0.1'});
105
$t->request_ok($tx)
106
  ->status_is(401)
107
  ->json_is('/error', "Invalid session id.");
108
109
my ($sess_status, $sid) = C4::Auth::check_cookie_auth($sessionid);
110
is($sess_status, "ok", "Session is valid before logging out.");
111
$tx = $t->ua->build_tx(DELETE => '/api/v1/auth/session' => json => { sessionid => $sessionid });
112
$tx->req->env({REMOTE_ADDR => '127.0.0.1'});
113
$t->request_ok($tx)
114
  ->status_is(200);
115
116
($sess_status, $sid) = C4::Auth::check_cookie_auth($sessionid);
117
isnt($sess_status, "ok", "Session is not valid after logging out.");
118
119
$tx = $t->ua->build_tx(POST => '/api/v1/auth/session' => form => $auth_by_cardnumber);
120
$tx->req->env({REMOTE_ADDR => '127.0.0.1'});
121
$t->request_ok($tx)
122
  ->status_is(201)
123
  ->json_is('/firstname', $borrower->{firstname})
124
  ->json_is('/surname', $borrower->{surname})
125
  ->json_is('/borrowernumber', $borrower->{borrowernumber})
126
  ->json_is('/email', $borrower->{email})
127
  ->json_has('/sessionid');
128
$sessionid = $tx->res->json->{sessionid};
129
130
($sess_status, $sid) = C4::Auth::check_cookie_auth($sessionid);
131
is($sess_status, "ok", "Session is valid before logging out.");
132
$tx = $t->ua->build_tx(DELETE => '/api/v1/auth/session');
133
$tx->req->env({REMOTE_ADDR => '127.0.0.1'});
134
$t->request_ok($tx)
135
  ->status_is(200);
136
137
($sess_status, $sid) = C4::Auth::check_cookie_auth($sessionid);
138
isnt($sess_status, "ok", "Session is not valid after logging out.");
139
101
$dbh->rollback;
140
$dbh->rollback;
102
- 

Return to bug 17004