Bug 17746: Add misc/admin/set_password.pl script
authorTomas Cohen Arazi <tomascohen@theke.io>
Mon, 4 Feb 2019 18:09:34 +0000 (15:09 -0300)
committerLucas Gass <lucas@bywatersolutions.com>
Mon, 1 Apr 2019 16:19:12 +0000 (16:19 +0000)
This patch introduces a script that allows changing a patron's password.
The change overrides the defined password enforcement policy.

If multiple conditions are passed to match on the patron, they all need
to match. Otherwise an error message is printed.

Attributes to search the patron on:
- cardnumber
- patron_id (a.k.a. borrowernumber)
- userid

we usually know some of them, but if we specify more than one, they need
to match a patron, together.

To test:
1) Apply this patch
2) Have a known patron (i.e. you know the cardnumber, the borrowernumber
   and the userid).
3) Run:
  $ kshell
 k$ perl misc/admin/set_password.pl --cardnumber <the_card_number> \
                                    --password a_password
4) Verify you can login with the new password
5) Repeat 3) through 5) with --patron_id and --userid
=> SUCCESS: You can login in all cases
6) Try combining some or all the parameters
=> SUCCESS: It fails when it should, it succeeds when it should
7) Sign off :-D

Signed-off-by: Pierre-Marc Thibault <pierre-marc.thibault@inLibro.com>

Signed-off-by: Liz Rea <wizzyrea@gmail.com>

Signed-off-by: Josef Moravec <josef.moravec@gmail.com>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
(cherry picked from commit e2f6542e1ebbd15977b47c86d2a9ef55fa0c5e9b)
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
(cherry picked from commit 54de33967101173c72865e97fce0fd220e2d0842)

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>

misc/admin/set_password.pl [new file with mode: 0755]

diff --git a/misc/admin/set_password.pl b/misc/admin/set_password.pl
new file mode 100755 (executable)
index 0000000..8ae1444
--- /dev/null
@@ -0,0 +1,113 @@
+#!/usr/bin/perl
+
+# This file is part of Koha.
+#
+# Copyright 2019 Koha Development Team
+#
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
+
+use Modern::Perl;
+use Getopt::Long;
+use Pod::Usage;
+
+use Koha::Patrons;
+
+my ( $help, $password, $cardnumber, $patron_id, $userid );
+GetOptions(
+    'help|?'         => \$help,
+    'userid=s'       => \$userid,
+    'password=s'     => \$password,
+    'patron_id=s'    => \$patron_id,
+    'cardnumber=s'   => \$cardnumber,
+);
+
+pod2usage(1) if $help;
+pod2usage("password is mandatory")     unless $password;
+
+unless ( $userid or $patron_id or $cardnumber ) {
+    pod2usage("userid is mandatory")       unless $userid;
+    pod2usage("patron_id is mandatory")    unless $patron_id;
+    pod2usage("cardnumber is mandatory")   unless $cardnumber;
+}
+
+my $filter;
+
+if ( $userid ) {
+    $filter->{userid} = $userid;
+}
+
+if ( $cardnumber ) {
+    $filter->{cardnumber} = $cardnumber;
+}
+
+if ( $patron_id ) {
+    $filter->{borrowernumber} = $patron_id;
+}
+
+my $patrons = Koha::Patrons->search( $filter );
+
+unless ( $patrons->count > 0 ) {
+    pod2usage( "No patron found matching the specified criteria" );
+}
+
+my $patron = $patrons->next;
+$patron->set_password({ password => $password, skip_validation => 1 });
+
+=head1 NAME
+
+set_password.pl - Set the specified password for the user in Koha
+
+=head1 SYNOPSIS
+
+set_password.pl
+  --userid <userid> --password <password> --patron_id <patron_id> --cardnumber <cardnumber>
+
+ Options:
+   -?|--help        brief help message
+   --password       the password to be set
+   --userid         the userid to be used to find the patron
+   --patron_id      the borrowernumber for the patron
+   --cardnumber     the cardnumber for the patron
+
+=head1 OPTIONS
+
+=over 8
+
+=item B<--help|-?>
+
+Print a brief help message and exits
+
+=item B<--userid>
+
+The patron's userid (for finding the patron)
+
+=item B<--password>
+
+The password to be set in the database
+
+=item B<--patron_id>
+
+The patron's internal id (for finding the patron)
+
+=item B<--cardnumber>
+
+Patron's cardnumber (for finding the patron)
+
+=back
+
+=head1 DESCRIPTION
+
+A simple script to change an existing's user password in the Koha database
+
+=cut