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)
committerNick Clemens <nick@bywatersolutions.com>
Thu, 28 Mar 2019 11:58:20 +0000 (11:58 +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>

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