From b127b3a6e968d239f3307cef148625edff344510 Mon Sep 17 00:00:00 2001
From: Nicholas van Oudtshoorn
Date: Thu, 10 Jul 2014 11:01:07 +0800
Subject: [PATCH] Bug 10988 - Google OAuth2 Support Update to apply cleanly to
master
Content-Type: text/plain; charset="utf-8"
---
C4/Auth.pm | 11 +-
.../atomicupdate/bug_10988_add_GoogleOauth.sql | 2 +
installer/data/mysql/sysprefs.sql | 4 +
installer/data/mysql/updatedatabase.pl | 7 ++
.../prog/en/modules/admin/preferences/admin.pref | 17 +++
.../opac-tmpl/bootstrap/en/includes/masthead.inc | 8 ++
.../opac-tmpl/bootstrap/en/modules/opac-auth.tt | 9 ++
koha-tmpl/opac-tmpl/ccsr/en/includes/top-bar.inc | 6 +-
koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc | 6 +-
koha-tmpl/opac-tmpl/prog/en/modules/opac-auth.tt | 9 ++
opac/svc/googleoauth2 | 131 +++++++++++++++++++++
11 files changed, 207 insertions(+), 3 deletions(-)
create mode 100644 installer/data/mysql/atomicupdate/bug_10988_add_GoogleOauth.sql
create mode 100644 opac/svc/googleoauth2
diff --git a/C4/Auth.pm b/C4/Auth.pm
index c04253a..a4beebe 100644
--- a/C4/Auth.pm
+++ b/C4/Auth.pm
@@ -36,7 +36,7 @@ use POSIX qw/strftime/;
use List::MoreUtils qw/ any /;
# use utf8;
-use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $debug $ldap $cas $caslogout);
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $debug $googleoauth2 $ldap $cas $caslogout);
BEGIN {
sub psgi_env { any { /^psgi\./ } keys %ENV }
@@ -53,6 +53,7 @@ BEGIN {
&get_all_subpermissions &get_user_subpermissions
);
%EXPORT_TAGS = ( EditPermissions => [qw(get_all_subpermissions get_user_subpermissions)] );
+ $googleoauth2= C4::Context->preference('GoogleOAuth2');
$ldap = C4::Context->config('useldapserver') || 0;
$cas = C4::Context->preference('casAuthentication');
$caslogout = C4::Context->preference('casLogout');
@@ -412,6 +413,7 @@ sub get_template_and_user {
BranchesLoop => GetBranchesLoop($opac_name),
BranchCategoriesLoop => GetBranchCategories( 'searchdomain', 1, $opac_name ),
CalendarFirstDayOfWeek => (C4::Context->preference("CalendarFirstDayOfWeek") eq "Sunday")?0:1,
+ GoogleOAuth2 => (C4::Context->preference("GoogleOAuth2")),
LibraryName => "" . C4::Context->preference("LibraryName"),
LibraryNameTitle => "" . $LibraryNameTitle,
LoginBranchname => C4::Context->userenv?C4::Context->userenv->{"branchname"}:"",
@@ -1122,6 +1124,13 @@ sub checkauth {
);
}
+ if ($googleoauth2) {
+ if ($query->param("OAuth2Failed")) {
+ my $reason = $query->param('OAuth2Failed');
+ $template->param(invalidOAuth2Login => $reason);
+ }
+ }
+
my $self_url = $query->url( -absolute => 1 );
$template->param(
url => $self_url,
diff --git a/installer/data/mysql/atomicupdate/bug_10988_add_GoogleOauth.sql b/installer/data/mysql/atomicupdate/bug_10988_add_GoogleOauth.sql
new file mode 100644
index 0000000..39e1727
--- /dev/null
+++ b/installer/data/mysql/atomicupdate/bug_10988_add_GoogleOauth.sql
@@ -0,0 +1,2 @@
+-- Adding GoogleOAuth2 support
+INSERT INTO `systempreferences` (`variable`, `value`, `options`, `explanation`, `type`) VALUES ('GoogleOAuth2', '0', NULL, 'if ON, allows the use of Google OAuth2 for login', 'YesNo'), ('GoogleOAuth2ClientID', '', NULL, 'Client ID for the web app registered with google', 'Free'), ('GoogleOAuth2ClientSecret', '', NULL, 'Client Secret for the web app registered with google', 'Free'), ('GoogleOAuth2Domain', '', NULL, 'Restrict OAuth2 to this domain. Leave blank for all google domains', 'Free');
diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql
index ed427ea..1d329bb 100644
--- a/installer/data/mysql/sysprefs.sql
+++ b/installer/data/mysql/sysprefs.sql
@@ -126,6 +126,10 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `
('FRBRizeEditions','0','','If ON, Koha will query one or more ISBN web services for associated ISBNs and display an Editions tab on the details pages','YesNo'),
('gist','0','','Default Goods and Services tax rate NOT in %, but in numeric form (0.12 for 12%), set to 0 to disable GST','Integer'),
('GoogleJackets','0',NULL,'if ON, displays jacket covers from Google Books API','YesNo'),
+('GoogleOAuth2', '0', NULL, 'if ON, allows the use of Google OAuth2 for login', 'YesNo'),
+('GoogleOAuth2ClientID', '', NULL, 'Client ID for the web app registered with google', 'Free'),
+('GoogleOAuth2ClientSecret', '', NULL, 'Client Secret for the web app registered with google', 'Free'),
+('GoogleOAuth2Domain', '', NULL, 'Restrict OAuth2 to this domain. Leave blank for all google domains', 'Free'),
('hidelostitems','0','','If ON, disables display of\"lost\" items in OPAC.','YesNo'),
('HidePatronName','0','','If this is switched on, patron\'s cardnumber will be shown instead of their name on the holds and catalog screens','YesNo'),
('hide_marc','0',NULL,'If ON, disables display of MARC fields, subfield codes & indicators (still shows data)','YesNo'),
diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl
index 1030454..41e634e 100755
--- a/installer/data/mysql/updatedatabase.pl
+++ b/installer/data/mysql/updatedatabase.pl
@@ -8570,6 +8570,13 @@ if ( CheckVersion($DBversion) ) {
SetVersion($DBversion);
}
+$DBversion = "3.17.00.010";
+if ( CheckVersion($DBversion) ) {
+ $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('GoogleOAuth2', '0', NULL, 'if ON, allows the use of Google OAuth2 for login', 'YesNo'), ('GoogleOAuth2ClientID', '', NULL, 'Client ID for the web app registered with google', 'Free'),('GoogleOAuth2ClientSecret', '', NULL, 'Client Secret for the web app registered with google', 'Free'),('GoogleOAuth2Domain', '', NULL, 'Restrict OAuth2 to this domain. Leave blank for all google domains', 'Free')");
+ print "Upgrade to $DBversion done (Bug 10988: Allow login via Google OAuth2)\n";
+ SetVersion($DBversion);
+}
+
=head1 FUNCTIONS
=head2 TableExists($table)
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/admin.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/admin.pref
index 1215ac1..d53c8d8 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/admin.pref
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/admin.pref
@@ -113,3 +113,20 @@ Administration:
Solr: Solr
Zebra: Zebra
- is the search engine used.
+ Google OAuth2:
+ -
+ - pref: GoogleOAuth2
+ choices:
+ yes: Use
+ no: "Don't Use"
+ - Google OAuth2 login.
+ - You will need to select OAuth2 when creating an app in the google cloud console, and set the web origin to your_opac_url and the redirect url to your_opac_url/cgi-bin/koha/svc/oauthlogin .
+ -
+ - Google OAuth2 Client ID
+ - pref: GoogleOAuth2ClientID
+ -
+ - Google OAuth2 Client Secret
+ - pref: GoogleOAuth2ClientSecret
+ -
+ - Google OAuth2 Restrict to domain
+ - pref: GoogleOAuth2Domain
diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/includes/masthead.inc b/koha-tmpl/opac-tmpl/bootstrap/en/includes/masthead.inc
index b035047..4e28440 100644
--- a/koha-tmpl/opac-tmpl/bootstrap/en/includes/masthead.inc
+++ b/koha-tmpl/opac-tmpl/bootstrap/en/includes/masthead.inc
@@ -58,6 +58,12 @@
[% END %]
[% ELSE %]
+ [% IF Koha.Preference( 'GoogleOAuth2' ) == 1 %]
+
+ [% ELSE %]
+
+ [% END %]
+
[% END # / IF loggedinusername %]
[% END # / IF opacuserlogin %]
@@ -75,6 +81,8 @@
[% IF Koha.Preference('casAuthentication') %]
[%# CAS authentication is too complicated for modal window %]
Log in to your account
+ [% ELSIF Koha.Preference( 'GoogleOAuth2' ) == 1 %]
+ Log in to your account
[% ELSE %]
Log in to your account
[% END %]
diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-auth.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-auth.tt
index f2196dd..8143a6e 100644
--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-auth.tt
+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-auth.tt
@@ -84,6 +84,15 @@
[% END # / IF casAuthentication %]
+ [% IF ( invalidOAuth2Login ) %]
+ Automatic Login
+ Sorry, your automatic login failed. [% invalidOAuth2Login %]
+ Please note that automatic login will only work if you are using the email address registered with this library.
+ If you want to, you can try to login using a differen account
+
Local login
+ If you can't login automatically, you can still login in manually:
+ [% END %]
+
[% END %]
+[% IF ( invalidOAuth2Login ) %]
+Automatic Login
+Sorry, your automatic login failed. [% invalidOAuth2Login %]
+Please note that automatic login will only work if you are using the email address registered with this library.
+If you want to, you can try to login using a differen account
+
Local login
+If you can't login automatically, you can still login in manually:
+[% END %]
+