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

(-)a/Koha/REST/V1/Patrons/Password.pm (+76 lines)
Line 0 Link Here
1
package Koha::REST::V1::Patrons::Password;
2
3
# This file is part of Koha.
4
#
5
# Koha is free software; you can redistribute it and/or modify it under the
6
# terms of the GNU General Public License as published by the Free Software
7
# Foundation; either version 3 of the License, or (at your option) any later
8
# version.
9
#
10
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
11
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
12
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License along
15
# with Koha; if not, write to the Free Software Foundation, Inc.,
16
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17
18
use Modern::Perl;
19
20
use Mojo::Base 'Mojolicious::Controller';
21
22
use Koha::Patrons;
23
24
use Scalar::Util qw(blessed);
25
use Try::Tiny;
26
27
=head1 NAME
28
29
Koha::REST::V1::Patrons::Password
30
31
=head1 API
32
33
=head2 Methods
34
35
=head3 set
36
37
Controller method that sets a patron's password, permission driven
38
39
=cut
40
41
sub set {
42
43
    my $c = shift->openapi->valid_input or return;
44
45
    my $patron = Koha::Patrons->find( $c->validation->param('patron_id') );
46
    my $body   = $c->validation->param('body');
47
48
    unless ($patron) {
49
        return $c->render( status => 404, openapi => { error => "Patron not found." } );
50
    }
51
52
    my $password   = $body->{password}   // "";
53
    my $password_2 = $body->{password_2} // "";
54
55
    unless ( $password eq $password_2 ) {
56
        return $c->render( status => 400, openapi => { error => "Passwords don't match" } );
57
    }
58
59
    return try {
60
61
        ## Change password
62
        $patron->set_password($password);
63
64
        return $c->render( status => 200, openapi => "" );
65
    }
66
    catch {
67
        unless ( blessed $_ && $_->can('rethrow') ) {
68
            return $c->render( status => 500, openapi => { error => "$_" } );
69
        }
70
71
        # an exception was raised. return 400 with the stringified exception
72
        return $c->render( status => 400, openapi => { error => "$_" } );
73
    };
74
}
75
76
1;
(-)a/t/db_dependent/api/v1/patrons_password.t (-3 / +2 lines)
Lines 86-92 subtest 'set() (authorized user tests)' => sub { Link Here
86
86
87
    $tx->req->cookies( { name => 'CGISESSID', value => $session->id } );
87
    $tx->req->cookies( { name => 'CGISESSID', value => $session->id } );
88
    $tx->req->env( { REMOTE_ADDR => '127.0.0.1' } );
88
    $tx->req->env( { REMOTE_ADDR => '127.0.0.1' } );
89
    $t->request_ok($tx)->status_is(400)->json_is({ error => 'Password contains trailing spaces, which is forbidden.' });
89
    $t->request_ok($tx)->status_is(400)->json_is({ error => '[Password contains leading/trailing whitespace character(s)]' });
90
90
91
    $new_password = 'abcdefg';
91
    $new_password = 'abcdefg';
92
    $tx
92
    $tx
Lines 106-112 subtest 'set() (authorized user tests)' => sub { Link Here
106
106
107
    $tx->req->cookies( { name => 'CGISESSID', value => $session->id } );
107
    $tx->req->cookies( { name => 'CGISESSID', value => $session->id } );
108
    $tx->req->env( { REMOTE_ADDR => '127.0.0.1' } );
108
    $tx->req->env( { REMOTE_ADDR => '127.0.0.1' } );
109
    $t->request_ok($tx)->status_is(400)->json_is({ error => 'Password is too weak' });
109
    $t->request_ok($tx)->status_is(400)->json_is({ error => '[Password is too weak]' });
110
110
111
    $new_password = 'ABcde123%&';
111
    $new_password = 'ABcde123%&';
112
    $tx
112
    $tx
113
- 

Return to bug 17006