From 4c4d98b32f81ebb249cda32878edccbf20f10f6b Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Tue, 5 Aug 2025 15:33:13 -0300 Subject: [PATCH] Bug 40596: Add Shibboleth protocol to identity_providers enum Adds 'Shibboleth' to the protocol enum in the identity_providers table to support Shibboleth authentication through the identity provider system. This extends the existing OAuth, OIDC, LDAP, and CAS protocols to include Shibboleth, enabling unified authentication management. Test plan: 1. Apply patch 2. Verify database schema includes Shibboleth in protocol enum 3. Verify existing identity providers continue to work --- .../bug_40596_add_cas_shibboleth_protocols.pl | 31 +++++++++++++++++++ installer/data/mysql/kohastructure.sql | 2 +- 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100755 installer/data/mysql/atomicupdate/bug_40596_add_cas_shibboleth_protocols.pl diff --git a/installer/data/mysql/atomicupdate/bug_40596_add_cas_shibboleth_protocols.pl b/installer/data/mysql/atomicupdate/bug_40596_add_cas_shibboleth_protocols.pl new file mode 100755 index 00000000000..4d81ca84fdd --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug_40596_add_cas_shibboleth_protocols.pl @@ -0,0 +1,31 @@ +use Modern::Perl; + +return { + bug_number => "40596", + description => "Add CAS and Shibboleth protocols to identity_providers enum", + up => sub { + my ($args) = @_; + my ( $dbh, $out ) = @$args{qw(dbh out)}; + + # Check if CAS and Shibboleth are already in the enum + my $sth = $dbh->prepare("SHOW COLUMNS FROM identity_providers LIKE 'protocol'"); + $sth->execute(); + my $row = $sth->fetchrow_hashref(); + + if ( $row && ( $row->{Type} !~ /CAS/ || $row->{Type} !~ /Shibboleth/ ) ) { + + # Add CAS and Shibboleth to the protocol enum + $dbh->do( + q{ + ALTER TABLE identity_providers + MODIFY COLUMN protocol enum('OAuth','OIDC','LDAP','CAS','Shibboleth') NOT NULL + COMMENT 'Protocol provider speaks' + } + ); + + say $out "Added 'CAS' and 'Shibboleth' to identity_providers.protocol enum"; + } else { + say $out "CAS and Shibboleth protocols already exist in identity_providers.protocol enum"; + } + }, +}; diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql index e39e9350f1a..6e728427ded 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -3614,7 +3614,7 @@ CREATE TABLE `identity_providers` ( `identity_provider_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'unique key, used to identify the provider', `code` varchar(20) NOT NULL COMMENT 'Provider code', `description` varchar(255) NOT NULL COMMENT 'Description for the provider', - `protocol` enum('OAuth','OIDC','LDAP','CAS') NOT NULL COMMENT 'Protocol provider speaks', + `protocol` enum('OAuth','OIDC','LDAP','CAS','Shibboleth') NOT NULL COMMENT 'Protocol provider speaks', `config` longtext NOT NULL COMMENT 'Configuration of the provider in JSON format', `mapping` longtext NOT NULL COMMENT 'Configuration to map provider data to Koha user', `matchpoint` enum('email','userid','cardnumber') NOT NULL COMMENT 'The patron attribute to be used as matchpoint', -- 2.50.1