dolibarr 25.0.0-alpha
openid_connect.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2023 Maximilien Rozniecki <mrozniecki@easya.solutions>
3 * Copyright (C) 2024-2025 Frédéric France <frederic.france@free.fr>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
25// Load Dolibarr environment
26require '../main.inc.php';
36require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php';
37require_once DOL_DOCUMENT_ROOT . '/core/lib/openid_connect.lib.php';
38require_once DOL_DOCUMENT_ROOT . '/core/class/html.form.class.php';
39
40$langs->loadLangs(array("users", "admin", "other"));
41
42if (!$user->admin) {
44}
45
46$action = GETPOST('action', 'alpha');
47
48
49/*
50 * Actions
51 */
52
53$errors = [];
54$error = 0;
55
56if ($action == 'set') {
57 $client_id = GETPOST('MAIN_AUTHENTICATION_OIDC_LOGIN_CLAIM', 'alpha');
58 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_LOGIN_CLAIM', $client_id, 'chaine', 0, '', 0);
59 if (!$res > 0) {
60 $errors[] = $db->lasterror();
61 $error++;
62 }
63
64 $client_id = GETPOST('MAIN_AUTHENTICATION_OIDC_CLIENT_ID', 'alpha');
65 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_CLIENT_ID', $client_id, 'chaine', 0, '', 0);
66 if (!$res > 0) {
67 $errors[] = $db->lasterror();
68 $error++;
69 }
70
71 $client_secret = GETPOST('MAIN_AUTHENTICATION_OIDC_CLIENT_SECRET', 'alpha');
72 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_CLIENT_SECRET', $client_secret, 'chaine', 0, '', 0);
73 if (!$res > 0) {
74 $errors[] = $db->lasterror();
75 $error++;
76 }
77
78 $scopes = GETPOST('MAIN_AUTHENTICATION_OIDC_SCOPES', 'alpha');
79 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_SCOPES', $scopes, 'chaine', 0, '', 0);
80 if (!$res > 0) {
81 $errors[] = $db->lasterror();
82 $error++;
83 }
84
85 $authorize_url = GETPOST('MAIN_AUTHENTICATION_OIDC_AUTHORIZE_URL', 'alpha');
86 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_AUTHORIZE_URL', $authorize_url, 'chaine', 0, '', 0);
87 if (!$res > 0) {
88 $errors[] = $db->lasterror();
89 $error++;
90 }
91
92 $value = GETPOST('MAIN_AUTHENTICATION_OIDC_TOKEN_URL', 'alpha');
93 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_TOKEN_URL', $value, 'chaine', 0, '', 0);
94 if (!$res > 0) {
95 $errors[] = $db->lasterror();
96 $error++;
97 }
98
99 $value = GETPOST('MAIN_AUTHENTICATION_OIDC_USERINFO_URL', 'alpha');
100 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_USERINFO_URL', $value, 'chaine', 0, '', 0);
101 if (!$res > 0) {
102 $errors[] = $db->lasterror();
103 $error++;
104 }
105
106 $logout_url = GETPOST('MAIN_AUTHENTICATION_OIDC_LOGOUT_URL', 'alpha');
107 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_LOGOUT_URL', $logout_url, 'chaine', 0, '', 0);
108 if (!$res > 0) {
109 $errors[] = $db->lasterror();
110 $error++;
111 }
112
113 $openid_url_img = GETPOST('MAIN_AUTHENTICATION_OPENID_URL_IMG', 'alpha');
114 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OPENID_URL_IMG', $openid_url_img, 'chaine', 0, '', 0);
115 if (!$res > 0) {
116 $errors[] = $db->lasterror();
117 $error++;
118 }
119
120 $value = GETPOST('MAIN_AUTHENTICATION_OIDC_DEFAULT_GROUP', 'int');
121 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_DEFAULT_GROUP', $value, 'chaine', 0, '', 0);
122 if (!$res > 0) {
123 $errors[] = $db->lasterror();
124 $error++;
125 }
126
127 $value = GETPOSTINT('MAIN_AUTHENTICATION_OIDC_DEFAULT_CREATOR');
128 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_DEFAULT_CREATOR', $value, 'chaine', 0, '', 0);
129 if (!$res > 0) {
130 $errors[] = $db->lasterror();
131 $error++;
132 }
133
134 $value = GETPOST('MAIN_AUTHENTICATION_OIDC_CLAIM_FIRSTNAME', 'alpha');
135 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_CLAIM_FIRSTNAME', $value, 'chaine', 0, '', 0);
136 if (!$res > 0) {
137 $errors[] = $db->lasterror();
138 $error++;
139 }
140
141 $value = GETPOST('MAIN_AUTHENTICATION_OIDC_CLAIM_LASTNAME', 'alpha');
142 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_CLAIM_LASTNAME', $value, 'chaine', 0, '', 0);
143 if (!$res > 0) {
144 $errors[] = $db->lasterror();
145 $error++;
146 }
147
148 $value = GETPOST('MAIN_AUTHENTICATION_OIDC_CLAIM_EMAIL', 'alpha');
149 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_CLAIM_EMAIL', $value, 'chaine', 0, '', 0);
150 if (!$res > 0) {
151 $errors[] = $db->lasterror();
152 $error++;
153 }
154}
155
156if ($action != '') {
157 if (!$error) {
158 setEventMessage($langs->trans("SetupSaved"));
159 header("Location: " . $_SERVER["PHP_SELF"]);
160 exit;
161 } else {
162 setEventMessages('', $errors, 'errors');
163 }
164}
165
166
167/*
168 * View
169 */
170
171$wikihelp = 'EN:Setup_Security|FR:Paramétrage_Sécurité|ES:Configuración_Seguridad';
172llxHeader('', $langs->trans("Miscellaneous"), $wikihelp, '', 0, 0, '', '', '', 'mod-admin page-security_other');
173
174print load_fiche_titre($langs->trans("SecuritySetup"), '', 'title_setup');
175
176print '<div class="info">' . $langs->trans("OpenIDDesc") . "</div>\n";
177
178$head = security_prepare_head();
179
180print dol_get_fiche_head($head, 'openid', '', -1);
181
182$urlforwikidoc = img_picto('', 'url', 'class="pictofixedwidth"') . '<a target="_blank" href="https://wiki.dolibarr.org/index.php?title=Authentication,_SSO_and_SSL#Mode_openid_connect">';
183$urlforwikidoc .= $langs->trans("SeeHere");
184$urlforwikidoc .= '</a>';
185/*
186print $langs->trans("SeeWikiDocForHelpInSetupOpenIDCOnnect");
187print ' - ';
188print $urlforwikidoc;
189*/
190print dol_get_fiche_end();
191
192
193print $langs->trans("EnableOpenIDConnectAuthentication");
194if (!empty($conf->use_javascript_ajax)) {
195 print ajax_constantonoff('MAIN_AUTHENTICATION_OIDC_ON', array(), null, 0, 0, 1);
196} else {
197 if (!getDolGlobalString('MAIN_AUTHENTICATION_OIDC_ON')) {
198 print '<a href="' . $_SERVER['PHP_SELF'] . '?action=set_MAIN_AUTHENTICATION_OIDC_ON&token=' . newToken() . '">' . img_picto($langs->trans("Disabled"), 'off') . '</a>';
199 } else {
200 print '<a href="' . $_SERVER['PHP_SELF'] . '?action=del_MAIN_AUTHENTICATION_OIDC_ON&token=' . newToken() . '">' . img_picto($langs->trans("Enabled"), 'on') . '</a>';
201 }
202}
203
204print '<br><br>';
205
206
207if (getDolGlobalString('MAIN_AUTHENTICATION_OIDC_ON')) {
208 if (!preg_match('/openid_connect/', $dolibarr_main_authentication)) {
209 $langs->load("errors");
210 print info_admin($langs->trans("ErrorOpenIDSetupConfNotComplete") . ': ' . $urlforwikidoc, 0, 0, 1, 'warning');
211 } else {
212 print info_admin('In conf.php file: dolibarr_main_authentication is ' . $dolibarr_main_authentication);
213 }
214
215 print '<br>';
216
217 print '<div class="div-table-responsive-no-min">';
218 print '<table class="tagtable noborder liste nobottomiftotal">';
219 print '<tr class="liste_titre">';
220 print '<th class="liste_titre" colspan="3">' . $langs->trans("Parameters") . '</th>' . "\n";
221 print "</tr>\n";
222
223 print '<tr class="oddeven">' . "\n";
224 print '<td>' . $langs->trans("MainAuthenticationOidcAutofillWithWellknowUrl") . '</td>' . "\n";
225 print '<td align="right">' . "\n";
226 print '<input name="oidc_wellknow_url" id="oidc_wellknow_url" class="minwidth400 centpercent" value="">';
227 print '</td><td>' . "\n";
228 print '<input type="button" class="button smallpaddingimp reposition" id="oidc_wellknow_populate" value="'.$langs->trans("MainAuthenticationOidcAutofillButton").'"';
229 print '</td></tr>' . "\n";
230 print '</table>' . "\n";
231 print '</div>';
232
233 print '<br>';
234
235 print '<form method="post" action="' . dolBuildUrl($_SERVER["PHP_SELF"]) . '" spellcheck="false">';
236 print '<input type="hidden" name="token" value="' . newToken() . '">';
237 print '<input type="hidden" name="action" value="set">';
238
239 print '<div class="div-table-responsive-no-min">';
240 print '<table class="tagtable noborder liste nobottomiftotal">';
241 print '<tr class="liste_titre">';
242 print '<th class="liste_titre">' . $langs->trans("Parameters") . '</th>' . "\n";
243 print '<th class="liste_titre"></th>' . "\n";
244 print '<th class="liste_titre"></th>' . "\n";
245 print "</tr>\n";
246
247 // MAIN_AUTHENTICATION_OIDC_LOGIN_CLAIM
248 print '<tr class="oddeven">' . "\n";
249 print '<td>' . $langs->trans("MainAuthenticationOidcLoginClaimName") . '</td>' . "\n";
250 print '<td>' . $langs->trans("MainAuthenticationOidcLoginClaimDesc") . '</td>' . "\n";
251 print '<td align="right">' . "\n";
252 print '<input name="MAIN_AUTHENTICATION_OIDC_LOGIN_CLAIM" id="MAIN_AUTHENTICATION_OIDC_LOGIN_CLAIM" class="minwidth400 centpercent" value="' . dol_escape_htmltag((GETPOSTISSET('MAIN_AUTHENTICATION_OIDC_LOGIN_CLAIM') ? GETPOST('MAIN_AUTHENTICATION_OIDC_LOGIN_CLAIM', 'nohtml') : (getDolGlobalString('MAIN_AUTHENTICATION_OIDC_LOGIN_CLAIM') ? getDolGlobalString("MAIN_AUTHENTICATION_OIDC_LOGIN_CLAIM") : ''))) . '">';
253 print '</td></tr>' . "\n";
254
255 // MAIN_AUTHENTICATION_OIDC_CLIENT_ID
256 print '<tr class="oddeven">' . "\n";
257 print '<td>' . $langs->trans("MainAuthenticationOidcClientIdName") . '</td>' . "\n";
258 print '<td>' . $langs->trans("MainAuthenticationOidcClientIdDesc") . '</td>' . "\n";
259 print '<td align="right">' . "\n";
260 print '<input name="MAIN_AUTHENTICATION_OIDC_CLIENT_ID" id="MAIN_AUTHENTICATION_OIDC_CLIENT_ID" class="minwidth400 centpercent" value="' . dol_escape_htmltag((GETPOSTISSET('MAIN_AUTHENTICATION_OIDC_CLIENT_ID') ? GETPOST('MAIN_AUTHENTICATION_OIDC_CLIENT_ID', 'nohtml') : (getDolGlobalString('MAIN_AUTHENTICATION_OIDC_CLIENT_ID') ? getDolGlobalString("MAIN_AUTHENTICATION_OIDC_CLIENT_ID") : ''))) . '">';
261 print '</td></tr>' . "\n";
262
263 // MAIN_AUTHENTICATION_OIDC_CLIENT_SECRET
264 print '<tr class="oddeven">' . "\n";
265 print '<td>' . $langs->trans("MainAuthenticationOidcClientSecretName") . '</td>' . "\n";
266 print '<td>' . $langs->trans("MainAuthenticationOidcClientSecretDesc") . '</td>' . "\n";
267 print '<td align="right">' . "\n";
268 print '<input type="password" name="MAIN_AUTHENTICATION_OIDC_CLIENT_SECRET" id="MAIN_AUTHENTICATION_OIDC_CLIENT_SECRET" class="minwidth400 centpercent" value="' . dol_escape_htmltag((GETPOSTISSET('MAIN_AUTHENTICATION_OIDC_CLIENT_SECRET') ? GETPOST('MAIN_AUTHENTICATION_OIDC_CLIENT_SECRET', 'nohtml') : (getDolGlobalString('MAIN_AUTHENTICATION_OIDC_CLIENT_SECRET') ? getDolGlobalString("MAIN_AUTHENTICATION_OIDC_CLIENT_SECRET") : ''))) . '">';
269 print '</td></tr>' . "\n";
270
271 // MAIN_AUTHENTICATION_OIDC_SCOPES
272 print '<tr class="oddeven">' . "\n";
273 print '<td>' . $langs->trans("MainAuthenticationOidcScopesName") . '</td>' . "\n";
274 print '<td>' . $langs->trans("MainAuthenticationOidcScopesDesc") . '</td>' . "\n";
275 print '<td align="right">' . "\n";
276 print '<input name="MAIN_AUTHENTICATION_OIDC_SCOPES" id="MAIN_AUTHENTICATION_OIDC_SCOPES" class="minwidth400 centpercent" value="' . dol_escape_htmltag((GETPOSTISSET('MAIN_AUTHENTICATION_OIDC_SCOPES') ? GETPOST('MAIN_AUTHENTICATION_OIDC_SCOPES', 'nohtml') : (getDolGlobalString('MAIN_AUTHENTICATION_OIDC_SCOPES') ? getDolGlobalString("MAIN_AUTHENTICATION_OIDC_SCOPES") : ''))) . '">';
277 print '</td></tr>' . "\n";
278
279 // MAIN_AUTHENTICATION_OIDC_AUTHORIZE_URL
280 print '<tr class="oddeven">' . "\n";
281 print '<td>' . $langs->trans("MainAuthenticationOidcAuthorizeUrlName") . '</td>' . "\n";
282 print '<td>' . $langs->trans("MainAuthenticationOidcAuthorizeUrlDesc") . '</td>' . "\n";
283 print '<td align="right">' . "\n";
284 print '<input name="MAIN_AUTHENTICATION_OIDC_AUTHORIZE_URL" id="MAIN_AUTHENTICATION_OIDC_AUTHORIZE_URL" class="minwidth400 centpercent" value="' . dol_escape_htmltag((GETPOSTISSET('MAIN_AUTHENTICATION_OIDC_AUTHORIZE_URL') ? GETPOST('MAIN_AUTHENTICATION_OIDC_AUTHORIZE_URL', 'nohtml') : (getDolGlobalString('MAIN_AUTHENTICATION_OIDC_AUTHORIZE_URL') ? getDolGlobalString("MAIN_AUTHENTICATION_OIDC_AUTHORIZE_URL") : ''))) . '">';
285 print '</td></tr>' . "\n";
286
287 // MAIN_AUTHENTICATION_OIDC_TOKEN_URL
288 print '<tr class="oddeven">' . "\n";
289 print '<td>' . $langs->trans("MainAuthenticationOidcTokenUrlName") . '</td>' . "\n";
290 print '<td>' . $langs->trans("MainAuthenticationOidcTokenUrlDesc") . '</td>' . "\n";
291 print '<td align="right">' . "\n";
292 print '<input name="MAIN_AUTHENTICATION_OIDC_TOKEN_URL" id="MAIN_AUTHENTICATION_OIDC_TOKEN_URL" class="minwidth400 centpercent" value="' . dol_escape_htmltag((GETPOSTISSET('MAIN_AUTHENTICATION_OIDC_TOKEN_URL') ? GETPOST('MAIN_AUTHENTICATION_OIDC_TOKEN_URL', 'nohtml') : (getDolGlobalString('MAIN_AUTHENTICATION_OIDC_TOKEN_URL') ? getDolGlobalString("MAIN_AUTHENTICATION_OIDC_TOKEN_URL") : ''))) . '">';
293 print '</td></tr>' . "\n";
294
295 // MAIN_AUTHENTICATION_OIDC_USERINFO_URL
296 print '<tr class="oddeven">' . "\n";
297 print '<td>' . $langs->trans("MainAuthenticationOidcUserinfoUrlName") . '</td>' . "\n";
298 print '<td>' . $langs->trans("MainAuthenticationOidcUserinfoUrlDesc") . '</td>' . "\n";
299 print '<td align="right">' . "\n";
300 print '<input name="MAIN_AUTHENTICATION_OIDC_USERINFO_URL" id="MAIN_AUTHENTICATION_OIDC_USERINFO_URL" class="minwidth400 centpercent" value="' . dol_escape_htmltag((GETPOSTISSET('MAIN_AUTHENTICATION_OIDC_USERINFO_URL') ? GETPOST('MAIN_AUTHENTICATION_OIDC_USERINFO_URL', 'nohtml') : (getDolGlobalString('MAIN_AUTHENTICATION_OIDC_USERINFO_URL') ? getDolGlobalString("MAIN_AUTHENTICATION_OIDC_USERINFO_URL") : ''))) . '">';
301 print '</td></tr>' . "\n";
302
303 // MAIN_AUTHENTICATION_OIDC_LOGOUT_URL
304 print '<tr class="oddeven">' . "\n";
305 print '<td>' . $langs->trans("MainAuthenticationOidcLogoutUrlName") . '</td>' . "\n";
306 print '<td>' . $langs->trans("MainAuthenticationOidcLogoutUrlDesc") . '</td>' . "\n";
307 print '<td align="right">' . "\n";
308 print '<input name="MAIN_AUTHENTICATION_OIDC_LOGOUT_URL" id="MAIN_AUTHENTICATION_OIDC_LOGOUT_URL" class="minwidth400 centpercent" value="' . dol_escape_htmltag((GETPOSTISSET('MAIN_AUTHENTICATION_OIDC_LOGOUT_URL') ? GETPOST('MAIN_AUTHENTICATION_OIDC_LOGOUT_URL', 'nohtml') : (getDolGlobalString('MAIN_AUTHENTICATION_OIDC_LOGOUT_URL') ? getDolGlobalString("MAIN_AUTHENTICATION_OIDC_LOGOUT_URL") : ''))) . '">';
309 print '</td></tr>' . "\n";
310
311 // REDIRECT_URL
312 print '<tr class="oddeven">' . "\n";
313 print '<td>' . $langs->trans("MainAuthenticationOidcRedirectUrlName") . '</td>' . "\n";
314 print '<td>' . $langs->trans("MainAuthenticationOidcRedirectUrlDesc") . '</td>' . "\n";
315 print '<td align="right">' . "\n";
316 print '<input class="minwidth400 centpercent" value="' . dol_escape_htmltag(openid_connect_get_redirect_url()) . '" disabled>';
317 print '</td></tr>' . "\n";
318
319 // LOGOUT_URL
320 print '<tr class="oddeven">' . "\n";
321 print '<td>' . $langs->trans("MainAuthenticationOidcLogoutRedirectUrlName") . '</td>' . "\n";
322 print '<td>' . $langs->trans("MainAuthenticationOidcLogoutRedirectUrlDesc") . '</td>' . "\n";
323 print '<td align="right">' . "\n";
324 print '<input class="minwidth400 centpercent" value="' . dol_escape_htmltag(getDolGlobalString('MAIN_LOGOUT_GOTO_URL', DOL_MAIN_URL_ROOT . "/index.php")) . '" disabled>';
325 print '</td></tr>' . "\n";
326
327 // OPENID_URL_IMG
328 print '<tr class="oddeven">' . "\n";
329 print '<td>' . $langs->trans("MainAuthenticationOpenIDUrlImgName") . '</td>' . "\n";
330 print '<td>' . $langs->trans("MainAuthenticationOpenIDUrlImgDesc") . '</td>' . "\n";
331 print '<td align="right">' . "\n";
332 print '<input name="MAIN_AUTHENTICATION_OPENID_URL_IMG" id="MAIN_AUTHENTICATION_OPENID_URL_IMG" class="minwidth400 centpercent" value="' . dol_escape_htmltag((GETPOSTISSET('MAIN_AUTHENTICATION_OPENID_URL_IMG') ? GETPOST('MAIN_AUTHENTICATION_OPENID_URL_IMG', 'nohtml') : (getDolGlobalString('MAIN_AUTHENTICATION_OPENID_URL_IMG') ? getDolGlobalString("MAIN_AUTHENTICATION_OPENID_URL_IMG") : ''))) . '">';
333 print '</td></tr>' . "\n";
334
335 // --- User Auto-Creation Settings ---
336 print '</table></div>' . "\n";
337
338 $langs->load("errors");
339 global $dolibarr_main_authentication_autocreateuser;
340 if (empty($dolibarr_main_authentication_autocreateuser)) {
341 print info_admin($langs->trans("OIDCAutocreateUserDisabled"), 0, 0, 1, 'warning');
342 } else {
343 print info_admin($langs->trans("OIDCAutocreateUserEnabled"), 0, 0, 1, 'success');
344 }
345
346 if (!empty($dolibarr_main_authentication_autocreateuser)) {
347 print '<div class="div-table-responsive-no-min">';
348 print '<table class="tagtable noborder liste nobottomiftotal">';
349 print '<tr class="liste_titre">';
350 print '<th class="liste_titre" colspan="3">' . $langs->trans("MainAuthenticationOidcAutoCreateTitle") . '</th>' . "\n";
351 print "</tr>\n";
352
353 // MAIN_AUTHENTICATION_OIDC_DEFAULT_CREATOR
354 $form = new Form($db);
355 print '<tr class="oddeven">' . "\n";
356 print '<td>' . $langs->trans("MainAuthenticationOidcDefaultCreatorName") . '</td>' . "\n";
357 print '<td>' . $langs->trans("MainAuthenticationOidcDefaultCreatorDesc") . '</td>' . "\n";
358 print '<td align="right">' . "\n";
359 $creator_val = GETPOSTISSET('MAIN_AUTHENTICATION_OIDC_DEFAULT_CREATOR') ? GETPOSTINT('MAIN_AUTHENTICATION_OIDC_DEFAULT_CREATOR') : getDolGlobalInt('MAIN_AUTHENTICATION_OIDC_DEFAULT_CREATOR');
360 print $form->select_dolusers($creator_val, 'MAIN_AUTHENTICATION_OIDC_DEFAULT_CREATOR', 1, null, 0, '', '', '', 0, 0, '(admin:=:1) AND (statut:=:1)', 0, '', 'minwidth200 maxwidth500');
361 print '</td></tr>' . "\n";
362
363 // MAIN_AUTHENTICATION_OIDC_DEFAULT_GROUP
364 print '<tr class="oddeven">' . "\n";
365 print '<td>' . $langs->trans("MainAuthenticationOidcDefaultGroupName") . '</td>' . "\n";
366 print '<td>' . $langs->trans("MainAuthenticationOidcDefaultGroupDesc") . '</td>' . "\n";
367 print '<td align="right">' . "\n";
368 $defaultgroup_val = GETPOSTISSET('MAIN_AUTHENTICATION_OIDC_DEFAULT_GROUP') ? GETPOSTINT('MAIN_AUTHENTICATION_OIDC_DEFAULT_GROUP') : getDolGlobalInt('MAIN_AUTHENTICATION_OIDC_DEFAULT_GROUP');
369 $form->select_dolgroups($defaultgroup_val, 'MAIN_AUTHENTICATION_OIDC_DEFAULT_GROUP', 1);
370 print '</td></tr>' . "\n";
371
372 // MAIN_AUTHENTICATION_OIDC_CLAIM_FIRSTNAME
373 print '<tr class="oddeven">' . "\n";
374 print '<td>' . $langs->trans("MainAuthenticationOidcClaimFirstnameName") . '</td>' . "\n";
375 print '<td>' . $langs->trans("MainAuthenticationOidcClaimFirstnameDesc") . '</td>' . "\n";
376 print '<td align="right">' . "\n";
377 print '<input name="MAIN_AUTHENTICATION_OIDC_CLAIM_FIRSTNAME" id="MAIN_AUTHENTICATION_OIDC_CLAIM_FIRSTNAME" class="minwidth400 centpercent" value="' . dol_escape_htmltag((GETPOSTISSET('MAIN_AUTHENTICATION_OIDC_CLAIM_FIRSTNAME') ? GETPOST('MAIN_AUTHENTICATION_OIDC_CLAIM_FIRSTNAME', 'nohtml') : (getDolGlobalString('MAIN_AUTHENTICATION_OIDC_CLAIM_FIRSTNAME') ? getDolGlobalString("MAIN_AUTHENTICATION_OIDC_CLAIM_FIRSTNAME") : ''))) . '" placeholder="given_name">';
378 print '</td></tr>' . "\n";
379
380 // MAIN_AUTHENTICATION_OIDC_CLAIM_LASTNAME
381 print '<tr class="oddeven">' . "\n";
382 print '<td>' . $langs->trans("MainAuthenticationOidcClaimLastnameName") . '</td>' . "\n";
383 print '<td>' . $langs->trans("MainAuthenticationOidcClaimLastnameDesc") . '</td>' . "\n";
384 print '<td align="right">' . "\n";
385 print '<input name="MAIN_AUTHENTICATION_OIDC_CLAIM_LASTNAME" id="MAIN_AUTHENTICATION_OIDC_CLAIM_LASTNAME" class="minwidth400 centpercent" value="' . dol_escape_htmltag((GETPOSTISSET('MAIN_AUTHENTICATION_OIDC_CLAIM_LASTNAME') ? GETPOST('MAIN_AUTHENTICATION_OIDC_CLAIM_LASTNAME', 'nohtml') : (getDolGlobalString('MAIN_AUTHENTICATION_OIDC_CLAIM_LASTNAME') ? getDolGlobalString("MAIN_AUTHENTICATION_OIDC_CLAIM_LASTNAME") : ''))) . '" placeholder="family_name">';
386 print '</td></tr>' . "\n";
387
388 // MAIN_AUTHENTICATION_OIDC_CLAIM_EMAIL
389 print '<tr class="oddeven">' . "\n";
390 print '<td>' . $langs->trans("MainAuthenticationOidcClaimEmailName") . '</td>' . "\n";
391 print '<td>' . $langs->trans("MainAuthenticationOidcClaimEmailDesc") . '</td>' . "\n";
392 print '<td align="right">' . "\n";
393 print '<input name="MAIN_AUTHENTICATION_OIDC_CLAIM_EMAIL" id="MAIN_AUTHENTICATION_OIDC_CLAIM_EMAIL" class="minwidth400 centpercent" value="' . dol_escape_htmltag((GETPOSTISSET('MAIN_AUTHENTICATION_OIDC_CLAIM_EMAIL') ? GETPOST('MAIN_AUTHENTICATION_OIDC_CLAIM_EMAIL', 'nohtml') : (getDolGlobalString('MAIN_AUTHENTICATION_OIDC_CLAIM_EMAIL') ? getDolGlobalString("MAIN_AUTHENTICATION_OIDC_CLAIM_EMAIL") : ''))) . '" placeholder="email">';
394 print '</td></tr>' . "\n";
395
396 print '</table>' . "\n";
397 print '</div>';
398 } // end if autocreateuser
399
400 print '<br>';
401 print '<div align="center">';
402 print '<input type="submit" class="button" value="' . $langs->trans("Save") . '">';
403 print '</div>';
404
405 print '</form>';
406}
407
408print '<br>';
409
410llxFooter();
411$db->close();
412?>
413<script type="text/javascript">
414 $(document).ready(function() {
415 $('#oidc_wellknow_populate').on('click', function() {
416 const url = $('#oidc_wellknow_url').val().trim();
417 if (!url) return;
418
419 // Ensure URL ends with /.well-known/openid-configuration
420 let wellKnownUrl = url;
421 if (!wellKnownUrl.endsWith('/.well-known/openid-configuration')) {
422 if (!wellKnownUrl.endsWith('/')) wellKnownUrl += '/';
423 wellKnownUrl += '.well-known/openid-configuration';
424 }
425
426 $.getJSON(wellKnownUrl)
427 .done(function(data) {
428 if (data.authorization_endpoint) {
429 $('#MAIN_AUTHENTICATION_OIDC_AUTHORIZE_URL').val(data.authorization_endpoint);
430 }
431 if (data.token_endpoint) {
432 $('#MAIN_AUTHENTICATION_OIDC_TOKEN_URL').val(data.token_endpoint);
433 }
434 if (data.userinfo_endpoint) {
435 $('#MAIN_AUTHENTICATION_OIDC_USERINFO_URL').val(data.userinfo_endpoint);
436 }
437 if (data.end_session_endpoint) {
438 $('#MAIN_AUTHENTICATION_OIDC_LOGOUT_URL').val(data.end_session_endpoint);
439 }
440 if (data.scopes_supported) {
441 $('#MAIN_AUTHENTICATION_OIDC_SCOPES').val(data.scopes_supported.join(' '));
442 }
443 })
444 .fail(function() {
445 alert('Failed to fetch OIDC well-known configuration from: ' + wellKnownUrl);
446 });
447 });
448 });
449</script>
security_prepare_head()
Prepare array with list of tabs.
dolibarr_set_const($db, $name, $value, $type='chaine', $visible=0, $note='', $entity=1)
Insert a parameter (key,value) into database (delete old key then insert it again).
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
Definition wrapper.php:91
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Definition wrapper.php:73
Class to manage generation of HTML components Only common components must be here.
if(!isModEnabled('ai')||!getDolGlobalString('AI_ASSISTANT_ENABLED')) global $conf
The main.inc.php has been included so the following variable are now defined:
if(!isModEnabled('ai')||!getDolGlobalString('AI_ASSISTANT_ENABLED')) global $db
API class for accounts.
dolBuildUrl($url, $params=[], $addtoken=false, $anchor='')
Return path of url.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=0)
Return value of a param into GET or POST supervariable.
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
Definition html.lib.php:519
dol_get_fiche_end($notab=0)
Return tab footer of a card.
Definition html.lib.php:717
setEventMessage($mesgs, $style='mesgs', $noduplicate=0, $attop=0)
Set event message in dol_events session object.
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='', $textonpictotooltip='', $cssfordropdown='info_admin')
Show information in HTML for admin users or standard users.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
Definition html.lib.php:172
if(!defined( 'CSRFCHECK_WITH_TOKEN'))
openid_connect_get_redirect_url()
Return the OIDC callback redirect URL.
if(preg_match('/(crypted|dolcrypt):/i', $dolibarr_main_db_pass)||!empty($dolibarr_main_db_encrypted_pass)) $conf db type
'integer', 'integer:ObjectClass:PathToClass[:AddCreateButtonOrNot[:Filter[:Sortfield]]]',...
Definition repair.php:130
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
if(empty( $takeposterminal)) fail($message)
Abort invoice creation with a given error message.
Definition invoice.php:124