Line 0
Link Here
|
|
|
1 |
use Modern::Perl; |
2 |
use C4::Context; |
3 |
|
4 |
return { |
5 |
bug_number => "31378", |
6 |
description => "Add auth_provider and auth_provider_domains configuration tables", |
7 |
up => sub { |
8 |
my ($args) = @_; |
9 |
my ($dbh, $out) = @$args{qw(dbh out)}; |
10 |
|
11 |
unless (TableExists('auth_providers')) { |
12 |
$dbh->do(q{ |
13 |
CREATE TABLE `auth_providers` ( |
14 |
`auth_provider_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'unique key, used to identify the provider', |
15 |
`code` varchar(20) NOT NULL COMMENT 'Provider code', |
16 |
`description` varchar(255) NOT NULL COMMENT 'Description for the provider', |
17 |
`protocol` enum('OAuth', 'OIDC', 'LDAP', 'CAS') COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Protocol provider speaks', |
18 |
`config` longtext NOT NULL DEFAULT '{}' COMMENT 'Configuration of the provider in JSON format', |
19 |
`mapping` longtext NOT NULL DEFAULT '{}' COMMENT 'Configuration to map provider data to Koha user', |
20 |
`matchpoint` enum('email','userid','cardnumber') NOT NULL COMMENT 'The patron attribute to be used as matchpoint', |
21 |
`icon_url` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Provider icon URL', |
22 |
PRIMARY KEY (`auth_provider_id`), |
23 |
UNIQUE KEY (`code`), |
24 |
KEY `protocol` (`protocol`) |
25 |
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; |
26 |
}); |
27 |
} |
28 |
|
29 |
unless (TableExists('auth_provider_domains')) { |
30 |
$dbh->do(q{ |
31 |
CREATE TABLE `auth_provider_domains` ( |
32 |
`auth_provider_domain_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'unique key, used to identify providers domain', |
33 |
`auth_provider_id` int(11) NOT NULL COMMENT 'Reference to provider', |
34 |
`domain` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Domain name. If null means all domains', |
35 |
`auto_register` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Allow user auto register', |
36 |
`update_on_auth` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Update user data on auth login', |
37 |
`default_library_id` varchar(10) DEFAULT NULL COMMENT 'Default library to create user if auto register is enabled', |
38 |
`default_category_id` varchar(10) DEFAULT NULL COMMENT 'Default category to create user if auto register is enabled', |
39 |
`allow_opac` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'Allow provider from opac interface', |
40 |
`allow_staff` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'Allow provider from staff interface', |
41 |
PRIMARY KEY (`auth_provider_domain_id`), |
42 |
UNIQUE KEY (`auth_provider_id`, `domain`), |
43 |
KEY `domain` (`domain`), |
44 |
KEY `allow_opac` (`allow_opac`), |
45 |
KEY `allow_staff` (`allow_staff`), |
46 |
CONSTRAINT `auth_provider_domain_ibfk_1` FOREIGN KEY (`auth_provider_id`) REFERENCES `auth_providers` (`auth_provider_id`) ON DELETE CASCADE, |
47 |
CONSTRAINT `auth_provider_domain_ibfk_2` FOREIGN KEY (`default_library_id`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE, |
48 |
CONSTRAINT `auth_provider_domain_ibfk_3` FOREIGN KEY (`default_category_id`) REFERENCES `categories` (`categorycode`) ON DELETE CASCADE |
49 |
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; |
50 |
}); |
51 |
} |
52 |
|
53 |
if (C4::Context->preference('GoogleOpenIDConnect')) { |
54 |
# Print useful stuff here |
55 |
say $out "Setting google provider"; |
56 |
$dbh->do(q{ |
57 |
INSERT INTO `auth_providers` (name, protocol, config, mapping), auto_register, registration_config, interface) |
58 |
SELECT 'google' as name, |
59 |
'OIDC' as protocol, |
60 |
JSON_OBJECT("key", k.value, "secret", s.value, "well_known_url", "https://accounts.google.com/.well-known/openid-configuration", "scope", "openid email profile") as config, |
61 |
JSON_OBJECT("email", "email", "firstname", "given_name", "surname", "family_name", "_key", "email") as mapping |
62 |
FROM |
63 |
(SELECT value FROM `systempreferences` where variable = 'GoogleOAuth2ClientID') k |
64 |
JOIN |
65 |
(SELECT value FROM `systempreferences` where variable = 'GoogleOAuth2ClientSecret') s |
66 |
}); |
67 |
|
68 |
$dbh->do(q{ |
69 |
INSERT INTO `auth_provider_domains` (auth_provider_id, domain, auto_register, update_on_auth, default_library_id, default_category_id, allow_opac, allow_staff) |
70 |
p.id as provider_id, |
71 |
d.value as domain, |
72 |
r.value as auto_register, |
73 |
0 as update_on_auth, |
74 |
b.value as default_branch, |
75 |
c.value as default_category, |
76 |
1 as allow_opac, |
77 |
0 as allow_interface |
78 |
FROM |
79 |
(SELECT id FROM `auth_provider` WHERE name = 'google') p |
80 |
JOIN |
81 |
(SELECT CASE WHEN value = '' OR value IS NULL THEN NULL ELSE value END as value FROM `systempreferences` where variable = 'GoogleOpenIDConnectDomain') d |
82 |
JOIN |
83 |
(SELECT CASE WHEN value = '' OR value IS NULL THEN '0' ELSE value END as value FROM `systempreferences` where variable = 'GoogleOpenIDConnectAutoRegister') r |
84 |
JOIN |
85 |
(SELECT CASE WHEN value = '' OR value IS NULL THEN NULL ELSE value END as value FROM `systempreferences` where variable = 'GoogleOpenIDConnectDefaultCategory') c |
86 |
JOIN |
87 |
(SELECT CASE WHEN value = '' OR value IS NULL THEN NULL ELSE value END as value FROM `systempreferences` where variable = 'GoogleOpenIDConnectDefaultBranch') b |
88 |
}); |
89 |
} |
90 |
}, |
91 |
}; |