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

(-)a/Koha/REST/Plugin/Exceptions.pm (+83 lines)
Line 0 Link Here
1
package Koha::REST::Plugin::Exceptions;
2
3
# This file is part of Koha.
4
#
5
# Koha is free software; you can redistribute it and/or modify it
6
# under the terms of the GNU General Public License as published by
7
# the Free Software Foundation; either version 3 of the License, or
8
# (at your option) any later version.
9
#
10
# Koha is distributed in the hope that it will be useful, but
11
# WITHOUT ANY WARRANTY; without even the implied warranty of
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
# GNU General Public License for more details.
14
#
15
# You should have received a copy of the GNU General Public License
16
# along with Koha; if not, see <http://www.gnu.org/licenses>.
17
18
use Modern::Perl;
19
20
use Scalar::Util qw( blessed );
21
use Koha::Logger;
22
23
use Mojo::Base 'Mojolicious::Plugin';
24
25
=head1 NAME
26
27
Koha::REST::Plugin::Exceptions
28
29
=head1 API
30
31
=head2 Helper methods
32
33
=head3 unhandled_exception
34
35
    try {
36
        ...
37
    }
38
    catch {
39
        if ( know_exception ) {
40
            handle_known_exception($_);
41
        }
42
43
        $c->unhandled_exception($_);
44
    }
45
46
Provides a generic and reusable way to throw unhandled exceptions. This way we
47
can centralize the behaviour control (e.g. production vs. development environmet)
48
49
=cut
50
51
sub register {
52
    my ( $self, $app ) = @_;
53
54
    $app->helper(
55
        'unhandled_exception' => sub {
56
            my ( $c, $exception ) = @_;
57
58
            my $req    = $c->req;
59
            my $method = $req->method;
60
            my $path   = $req->url->to_abs->path;
61
            my $type = "";
62
63
            if ( blessed $exception ) {
64
                $type = "(" . ref($exception) . ")";
65
            }
66
67
            my $message = "$method $path: unhandled exception $type\<\<$exception\>\>";
68
69
            $c->app->log->error("$message");
70
71
            $c->render(
72
                status  => 500,
73
                openapi => {
74
                    error =>
75
                      "Something went wrong, check Koha logs for details."
76
                }
77
            );
78
          }
79
80
    );
81
}
82
83
1;
(-)a/Koha/REST/V1.pm (-1 / +3 lines)
Lines 40-45 Overloaded Mojolicious->startup method. It is called at application startup. Link Here
40
sub startup {
40
sub startup {
41
    my $self = shift;
41
    my $self = shift;
42
42
43
    $self->log( Koha::Logger->get({ interface => 'api' }) );
44
43
    $self->hook(
45
    $self->hook(
44
        before_dispatch => sub {
46
        before_dispatch => sub {
45
            my $c = shift;
47
            my $c = shift;
Lines 132-137 sub startup { Link Here
132
    $self->plugin( 'Koha::REST::Plugin::Pagination' );
134
    $self->plugin( 'Koha::REST::Plugin::Pagination' );
133
    $self->plugin( 'Koha::REST::Plugin::Query' );
135
    $self->plugin( 'Koha::REST::Plugin::Query' );
134
    $self->plugin( 'Koha::REST::Plugin::Objects' );
136
    $self->plugin( 'Koha::REST::Plugin::Objects' );
137
    $self->plugin( 'Koha::REST::Plugin::Exceptions' );
135
}
138
}
136
139
137
1;
140
1;
138
- 

Return to bug 25032