@@ -, +, @@
- Verify the syspref works
- Verify users can manage their API keys
---
.../atomicupdate/bug_20568_api_keys.perl | 7 ++
installer/data/mysql/sysprefs.sql | 1 +
.../admin/preferences/web_services.pref | 6 ++
.../prog/en/modules/members/apikeys.tt | 8 +-
.../bootstrap/en/includes/usermenu.inc | 13 ++--
.../bootstrap/en/modules/opac-apikeys.tt | 29 +++++---
opac/opac-apikeys.pl | 73 +++++++++++--------
7 files changed, 85 insertions(+), 52 deletions(-)
--- a/installer/data/mysql/atomicupdate/bug_20568_api_keys.perl
+++ a/installer/data/mysql/atomicupdate/bug_20568_api_keys.perl
@@ -24,6 +24,13 @@ if(CheckVersion($DBversion)) {
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
});
+ $dbh->do(q{
+ INSERT IGNORE INTO `systempreferences`
+ (variable,value,explanation,options,type)
+ VALUES
+ ('AllowPatronsManageAPIKeysInOPAC', '0', 'If enabled, patrons can manage their own API keys in the OPAC', NULL, 'YesNo');
+ });
+
print "Upgrade to $DBversion done (Bug 20568 - Add API key management interface for patrons)\n";
SetVersion($DBversion);
}
--- a/installer/data/mysql/sysprefs.sql
+++ a/installer/data/mysql/sysprefs.sql
@@ -30,6 +30,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `
('AllowNotForLoanOverride','0','','If ON, Koha will allow the librarian to loan a not for loan item.','YesNo'),
('AllowOfflineCirculation','0','','If on, enables HTML5 offline circulation functionality.','YesNo'),
('AllowPatronToSetCheckoutsVisibilityForGuarantor', '0', NULL, 'If enabled, the patron can set checkouts to be visible to his or her guarantor', 'YesNo'),
+('AllowPatronsManageAPIKeysInOPAC', '0', NULL, 'If enabled, patrons can manage their own API keys in the OPAC', 'YesNo'),
('AllowPKIAuth','None','None|Common Name|emailAddress','Use the field from a client-side SSL certificate to look a user in the Koha database','Choice'),
('AllowPurchaseSuggestionBranchChoice','0','1','Allow user to choose branch when making a purchase suggestion','YesNo'),
('AllowRenewalIfOtherItemsAvailable','0',NULL,'If enabled, allow a patron to renew an item with unfilled holds if other available items can fill that hold.','YesNo'),
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/web_services.pref
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/web_services.pref
@@ -5,6 +5,12 @@ Web services:
- pref: "RESTdefaultPageSize"
class: integer
- "per page"
+ -
+ - pref: AllowPatronsManageAPIKeysInOPAC
+ choices:
+ yes: Allow
+ no: "Don't allow"
+ - "patrons to manage their own API keys in the OPAC."
OAI-PMH:
-
- pref: OAI-PMH
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/apikeys.tt
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/members/apikeys.tt
@@ -1,6 +1,6 @@
[% USE Koha %]
[% INCLUDE 'doc-head-open.inc' %]
-
Koha › Patrons [% IF ( searching ) %]› API Keys[% END %]
+Koha › Patrons › API Keys
[% INCLUDE 'doc-head-close.inc' %]
@@ -56,17 +56,17 @@
-
+
--- a/koha-tmpl/opac-tmpl/bootstrap/en/includes/usermenu.inc
+++ a/koha-tmpl/opac-tmpl/bootstrap/en/includes/usermenu.inc
@@ -115,12 +115,15 @@
your interlibrary loan requests
[% END %]
- [% IF apikeysview %]
-
- [% ELSE %]
-
+
+ [% IF Koha.Preference('AllowPatronsManageAPIKeysInOPAC') %]
+ [% IF apikeysview %]
+
- [% IF api_keys.size > 0 %]
+ [% IF api_keys && api_keys.size > 0 %]
+
Description
Key
Active
Actions
@@ -46,22 +50,23 @@
[% FOREACH key IN api_keys %]
-
[% key.api_key %]
+
[% key.description %]
+
[% key.value %]
[% IF key.active %]Yes[% ELSE %]No[% END %]
@@ -69,6 +74,8 @@
[% END %]
+ [% ELSE %]
+ No keys defined for the current patron.
[% END %]
--- a/opac/opac-apikeys.pl
+++ a/opac/opac-apikeys.pl
@@ -1,52 +1,62 @@
#!/usr/bin/env perl
-# Copyright 2015 BibLibre
-#
# This file is part of Koha.
#
-# 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 2 of the License, or (at your option) any later
-# version.
+# Copyright 2015 BibLibre
#
-# 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.
+# 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.
#
-# You should have received a copy of the GNU General Public License along
-# with Koha; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+# 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 .
use Modern::Perl;
use CGI;
-use String::Random;
use C4::Auth;
-use C4::Members;
use C4::Output;
+
use Koha::ApiKeys;
-use Koha::ApiKey;
+use Koha::Patrons;
my $cgi = new CGI;
my ($template, $loggedinuser, $cookie) = get_template_and_user({
- template_name => 'opac-apikeys.tt',
- query => $cgi,
- type => 'opac',
- authnotrequired => 0,
- flagsrequired => {borrow => 1},
+ template_name => 'opac-apikeys.tt',
+ query => $cgi,
+ type => 'opac',
+ authnotrequired => 0
});
-my $borrowernumber = $loggedinuser;
-my $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber);
+my $patron_id = $loggedinuser;
+my $patron = Koha::Patrons->find( $patron_id );
+
+if ( not defined $patron
+ or C4::Context->preference('AllowPatronsManageAPIKeysInOPAC') )
+{
+ # patron_id invalid -> exit
+ print $cgi->redirect("/cgi-bin/koha/errors/404.pl"); # escape early
+ exit;
+}
+
+
my $op = $cgi->param('op');
if ($op) {
if ($op eq 'generate') {
- my $apikey = new Koha::ApiKey;
- $apikey->borrowernumber($borrowernumber);
- $apikey->api_key(String::Random->new->randregex('[a-zA-Z0-9]{32}'));
+ my $description = $cgi->param('description') // '';
+ my $apikey = Koha::ApiKey->new({
+ patron_id => $patron_id,
+ description => $description
+ });
$apikey->store;
print $cgi->redirect('/cgi-bin/koha/opac-apikeys.pl');
exit;
@@ -54,7 +64,7 @@ if ($op) {
if ($op eq 'delete') {
my $key = $cgi->param('key');
- my $api_key = Koha::ApiKeys->find({borrowernumber => $borrowernumber, api_key => $key});
+ my $api_key = Koha::ApiKeys->find({ patron_id => $patron_id, value => $key});
if ($api_key) {
$api_key->delete;
}
@@ -64,7 +74,7 @@ if ($op) {
if ($op eq 'revoke') {
my $key = $cgi->param('key');
- my $api_key = Koha::ApiKeys->find({borrowernumber => $borrowernumber, api_key => $key});
+ my $api_key = Koha::ApiKeys->find({ patron_id => $patron_id, value => $key });
if ($api_key) {
$api_key->active(0);
$api_key->store;
@@ -75,7 +85,7 @@ if ($op) {
if ($op eq 'activate') {
my $key = $cgi->param('key');
- my $api_key = Koha::ApiKeys->find({borrowernumber => $borrowernumber, api_key => $key});
+ my $api_key = Koha::ApiKeys->find({ patron_id => $patron_id, value => $key });
if ($api_key) {
$api_key->active(1);
$api_key->store;
@@ -85,13 +95,12 @@ if ($op) {
}
}
-my @api_keys = Koha::ApiKeys->search({borrowernumber => $borrowernumber});
+my @api_keys = Koha::ApiKeys->search({ patron_id => $patron_id });
$template->param(
+ api_keys => \@api_keys,
apikeysview => 1,
- api_keys => \@api_keys,
- borrower => $borrower,
- borrowernumber => $borrowernumber,
+ patron => $patron
);
output_html_with_http_headers $cgi, $cookie, $template->output;
--