dolibarr 24.0.0-beta
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';
27require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php';
28require_once DOL_DOCUMENT_ROOT . '/core/lib/openid_connect.lib.php';
29require_once DOL_DOCUMENT_ROOT . '/core/class/html.form.class.php';
30
41$langs->loadLangs(array("users", "admin", "other"));
42
43if (!$user->admin) {
45}
46
47$action = GETPOST('action', 'alpha');
48
49
50/*
51 * Actions
52 */
53
54$errors = [];
55$error = 0;
56
57if ($action == 'set') {
58 $client_id = GETPOST('MAIN_AUTHENTICATION_OIDC_LOGIN_CLAIM', 'alpha');
59 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_LOGIN_CLAIM', $client_id, 'chaine', 0, '', 0);
60 if (!$res > 0) {
61 $errors[] = $db->lasterror();
62 $error++;
63 }
64
65 $client_id = GETPOST('MAIN_AUTHENTICATION_OIDC_CLIENT_ID', 'alpha');
66 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_CLIENT_ID', $client_id, 'chaine', 0, '', 0);
67 if (!$res > 0) {
68 $errors[] = $db->lasterror();
69 $error++;
70 }
71
72 $client_secret = GETPOST('MAIN_AUTHENTICATION_OIDC_CLIENT_SECRET', 'alpha');
73 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_CLIENT_SECRET', $client_secret, 'chaine', 0, '', 0);
74 if (!$res > 0) {
75 $errors[] = $db->lasterror();
76 $error++;
77 }
78
79 $scopes = GETPOST('MAIN_AUTHENTICATION_OIDC_SCOPES', 'alpha');
80 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_SCOPES', $scopes, 'chaine', 0, '', 0);
81 if (!$res > 0) {
82 $errors[] = $db->lasterror();
83 $error++;
84 }
85
86 $authorize_url = GETPOST('MAIN_AUTHENTICATION_OIDC_AUTHORIZE_URL', 'alpha');
87 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_AUTHORIZE_URL', $authorize_url, 'chaine', 0, '', 0);
88 if (!$res > 0) {
89 $errors[] = $db->lasterror();
90 $error++;
91 }
92
93 $value = GETPOST('MAIN_AUTHENTICATION_OIDC_TOKEN_URL', 'alpha');
94 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_TOKEN_URL', $value, 'chaine', 0, '', 0);
95 if (!$res > 0) {
96 $errors[] = $db->lasterror();
97 $error++;
98 }
99
100 $value = GETPOST('MAIN_AUTHENTICATION_OIDC_USERINFO_URL', 'alpha');
101 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_USERINFO_URL', $value, 'chaine', 0, '', 0);
102 if (!$res > 0) {
103 $errors[] = $db->lasterror();
104 $error++;
105 }
106
107 $logout_url = GETPOST('MAIN_AUTHENTICATION_OIDC_LOGOUT_URL', 'alpha');
108 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_LOGOUT_URL', $logout_url, 'chaine', 0, '', 0);
109 if (!$res > 0) {
110 $errors[] = $db->lasterror();
111 $error++;
112 }
113
114 $openid_url_img = GETPOST('MAIN_AUTHENTICATION_OPENID_URL_IMG', 'alpha');
115 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OPENID_URL_IMG', $openid_url_img, 'chaine', 0, '', 0);
116 if (!$res > 0) {
117 $errors[] = $db->lasterror();
118 $error++;
119 }
120
121 $value = GETPOST('MAIN_AUTHENTICATION_OIDC_DEFAULT_GROUP', 'int');
122 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_DEFAULT_GROUP', $value, 'chaine', 0, '', 0);
123 if (!$res > 0) {
124 $errors[] = $db->lasterror();
125 $error++;
126 }
127
128 $value = GETPOSTINT('MAIN_AUTHENTICATION_OIDC_DEFAULT_CREATOR');
129 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_DEFAULT_CREATOR', $value, 'chaine', 0, '', 0);
130 if (!$res > 0) {
131 $errors[] = $db->lasterror();
132 $error++;
133 }
134
135 $value = GETPOST('MAIN_AUTHENTICATION_OIDC_CLAIM_FIRSTNAME', 'alpha');
136 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_CLAIM_FIRSTNAME', $value, 'chaine', 0, '', 0);
137 if (!$res > 0) {
138 $errors[] = $db->lasterror();
139 $error++;
140 }
141
142 $value = GETPOST('MAIN_AUTHENTICATION_OIDC_CLAIM_LASTNAME', 'alpha');
143 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_CLAIM_LASTNAME', $value, 'chaine', 0, '', 0);
144 if (!$res > 0) {
145 $errors[] = $db->lasterror();
146 $error++;
147 }
148
149 $value = GETPOST('MAIN_AUTHENTICATION_OIDC_CLAIM_EMAIL', 'alpha');
150 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_CLAIM_EMAIL', $value, 'chaine', 0, '', 0);
151 if (!$res > 0) {
152 $errors[] = $db->lasterror();
153 $error++;
154 }
155}
156
157if ($action != '') {
158 if (!$error) {
159 setEventMessage($langs->trans("SetupSaved"));
160 header("Location: " . $_SERVER["PHP_SELF"]);
161 exit;
162 } else {
163 setEventMessages('', $errors, 'errors');
164 }
165}
166
167
168/*
169 * View
170 */
171
172$wikihelp = 'EN:Setup_Security|FR:Paramétrage_Sécurité|ES:Configuración_Seguridad';
173llxHeader('', $langs->trans("Miscellaneous"), $wikihelp, '', 0, 0, '', '', '', 'mod-admin page-security_other');
174
175print load_fiche_titre($langs->trans("SecuritySetup"), '', 'title_setup');
176
177print '<span class="opacitymedium">' . $langs->trans("OpenIDDesc") . "</span><br>\n";
178print "<br>\n";
179
180$head = security_prepare_head();
181
182print dol_get_fiche_head($head, 'openid', '', -1);
183
184$urlforwikidoc = img_picto('', 'url', 'class="pictofixedwidth"') . '<a target="_blank" href="https://wiki.dolibarr.org/index.php?title=Authentication,_SSO_and_SSL#Mode_openid_connect">';
185$urlforwikidoc .= $langs->trans("SeeHere");
186$urlforwikidoc .= '</a>';
187/*
188print $langs->trans("SeeWikiDocForHelpInSetupOpenIDCOnnect");
189print ' - ';
190print $urlforwikidoc;
191*/
192print dol_get_fiche_end();
193
194
195print $langs->trans("EnableOpenIDConnectAuthentication");
196if (!empty($conf->use_javascript_ajax)) {
197 print ajax_constantonoff('MAIN_AUTHENTICATION_OIDC_ON', array(), null, 0, 0, 1);
198} else {
199 if (!getDolGlobalString('MAIN_AUTHENTICATION_OIDC_ON')) {
200 print '<a href="' . $_SERVER['PHP_SELF'] . '?action=set_MAIN_AUTHENTICATION_OIDC_ON&token=' . newToken() . '">' . img_picto($langs->trans("Disabled"), 'off') . '</a>';
201 } else {
202 print '<a href="' . $_SERVER['PHP_SELF'] . '?action=del_MAIN_AUTHENTICATION_OIDC_ON&token=' . newToken() . '">' . img_picto($langs->trans("Enabled"), 'on') . '</a>';
203 }
204}
205
206print '<br><br>';
207
208
209if (getDolGlobalString('MAIN_AUTHENTICATION_OIDC_ON')) {
210 if (!preg_match('/openid_connect/', $dolibarr_main_authentication)) {
211 $langs->load("errors");
212 print info_admin($langs->trans("ErrorOpenIDSetupConfNotComplete") . ': ' . $urlforwikidoc, 0, 0, 1, 'warning');
213 } else {
214 print info_admin('In conf.php file: dolibarr_main_authentication is ' . $dolibarr_main_authentication);
215 }
216
217 print '<br>';
218
219 print '<div class="div-table-responsive-no-min">';
220 print '<table class="tagtable noborder liste nobottomiftotal">';
221 print '<tr class="liste_titre">';
222 print '<th class="liste_titre" colspan="3">' . $langs->trans("Parameters") . '</th>' . "\n";
223 print "</tr>\n";
224
225 print '<tr class="oddeven">' . "\n";
226 print '<td>' . $langs->trans("MainAuthenticationOidcAutofillWithWellknowUrl") . '</td>' . "\n";
227 print '<td align="right">' . "\n";
228 print '<input name="oidc_wellknow_url" id="oidc_wellknow_url" class="minwidth400 centpercent" value="">';
229 print '</td><td>' . "\n";
230 print '<input type="button" class="button smallpaddingimp reposition" id="oidc_wellknow_populate" value="'.$langs->trans("MainAuthenticationOidcAutofillButton").'"';
231 print '</td></tr>' . "\n";
232 print '</table>' . "\n";
233 print '</div>';
234
235 print '<br>';
236
237 print '<form method="post" action="' . dolBuildUrl($_SERVER["PHP_SELF"]) . '">';
238 print '<input type="hidden" name="token" value="' . newToken() . '">';
239 print '<input type="hidden" name="action" value="set">';
240
241 print '<div class="div-table-responsive-no-min">';
242 print '<table class="tagtable noborder liste nobottomiftotal">';
243 print '<tr class="liste_titre">';
244 print '<th class="liste_titre">' . $langs->trans("Parameters") . '</th>' . "\n";
245 print '<th class="liste_titre"></th>' . "\n";
246 print '<th class="liste_titre"></th>' . "\n";
247 print "</tr>\n";
248
249 // MAIN_AUTHENTICATION_OIDC_LOGIN_CLAIM
250 print '<tr class="oddeven">' . "\n";
251 print '<td>' . $langs->trans("MainAuthenticationOidcLoginClaimName") . '</td>' . "\n";
252 print '<td>' . $langs->trans("MainAuthenticationOidcLoginClaimDesc") . '</td>' . "\n";
253 print '<td align="right">' . "\n";
254 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") : ''))) . '">';
255 print '</td></tr>' . "\n";
256
257 // MAIN_AUTHENTICATION_OIDC_CLIENT_ID
258 print '<tr class="oddeven">' . "\n";
259 print '<td>' . $langs->trans("MainAuthenticationOidcClientIdName") . '</td>' . "\n";
260 print '<td>' . $langs->trans("MainAuthenticationOidcClientIdDesc") . '</td>' . "\n";
261 print '<td align="right">' . "\n";
262 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") : ''))) . '">';
263 print '</td></tr>' . "\n";
264
265 // MAIN_AUTHENTICATION_OIDC_CLIENT_SECRET
266 print '<tr class="oddeven">' . "\n";
267 print '<td>' . $langs->trans("MainAuthenticationOidcClientSecretName") . '</td>' . "\n";
268 print '<td>' . $langs->trans("MainAuthenticationOidcClientSecretDesc") . '</td>' . "\n";
269 print '<td align="right">' . "\n";
270 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") : ''))) . '">';
271 print '</td></tr>' . "\n";
272
273 // MAIN_AUTHENTICATION_OIDC_SCOPES
274 print '<tr class="oddeven">' . "\n";
275 print '<td>' . $langs->trans("MainAuthenticationOidcScopesName") . '</td>' . "\n";
276 print '<td>' . $langs->trans("MainAuthenticationOidcScopesDesc") . '</td>' . "\n";
277 print '<td align="right">' . "\n";
278 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") : ''))) . '">';
279 print '</td></tr>' . "\n";
280
281 // MAIN_AUTHENTICATION_OIDC_AUTHORIZE_URL
282 print '<tr class="oddeven">' . "\n";
283 print '<td>' . $langs->trans("MainAuthenticationOidcAuthorizeUrlName") . '</td>' . "\n";
284 print '<td>' . $langs->trans("MainAuthenticationOidcAuthorizeUrlDesc") . '</td>' . "\n";
285 print '<td align="right">' . "\n";
286 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") : ''))) . '">';
287 print '</td></tr>' . "\n";
288
289 // MAIN_AUTHENTICATION_OIDC_TOKEN_URL
290 print '<tr class="oddeven">' . "\n";
291 print '<td>' . $langs->trans("MainAuthenticationOidcTokenUrlName") . '</td>' . "\n";
292 print '<td>' . $langs->trans("MainAuthenticationOidcTokenUrlDesc") . '</td>' . "\n";
293 print '<td align="right">' . "\n";
294 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") : ''))) . '">';
295 print '</td></tr>' . "\n";
296
297 // MAIN_AUTHENTICATION_OIDC_USERINFO_URL
298 print '<tr class="oddeven">' . "\n";
299 print '<td>' . $langs->trans("MainAuthenticationOidcUserinfoUrlName") . '</td>' . "\n";
300 print '<td>' . $langs->trans("MainAuthenticationOidcUserinfoUrlDesc") . '</td>' . "\n";
301 print '<td align="right">' . "\n";
302 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") : ''))) . '">';
303 print '</td></tr>' . "\n";
304
305 // MAIN_AUTHENTICATION_OIDC_LOGOUT_URL
306 print '<tr class="oddeven">' . "\n";
307 print '<td>' . $langs->trans("MainAuthenticationOidcLogoutUrlName") . '</td>' . "\n";
308 print '<td>' . $langs->trans("MainAuthenticationOidcLogoutUrlDesc") . '</td>' . "\n";
309 print '<td align="right">' . "\n";
310 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") : ''))) . '">';
311 print '</td></tr>' . "\n";
312
313 // REDIRECT_URL
314 print '<tr class="oddeven">' . "\n";
315 print '<td>' . $langs->trans("MainAuthenticationOidcRedirectUrlName") . '</td>' . "\n";
316 print '<td>' . $langs->trans("MainAuthenticationOidcRedirectUrlDesc") . '</td>' . "\n";
317 print '<td align="right">' . "\n";
318 print '<input class="minwidth400 centpercent" value="' . dol_escape_htmltag(openid_connect_get_redirect_url()) . '" disabled>';
319 print '</td></tr>' . "\n";
320
321 // LOGOUT_URL
322 print '<tr class="oddeven">' . "\n";
323 print '<td>' . $langs->trans("MainAuthenticationOidcLogoutRedirectUrlName") . '</td>' . "\n";
324 print '<td>' . $langs->trans("MainAuthenticationOidcLogoutRedirectUrlDesc") . '</td>' . "\n";
325 print '<td align="right">' . "\n";
326 print '<input class="minwidth400 centpercent" value="' . dol_escape_htmltag(getDolGlobalString('MAIN_LOGOUT_GOTO_URL', DOL_MAIN_URL_ROOT . "/index.php")) . '" disabled>';
327 print '</td></tr>' . "\n";
328
329 // OPENID_URL_IMG
330 print '<tr class="oddeven">' . "\n";
331 print '<td>' . $langs->trans("MainAuthenticationOpenIDUrlImgName") . '</td>' . "\n";
332 print '<td>' . $langs->trans("MainAuthenticationOpenIDUrlImgDesc") . '</td>' . "\n";
333 print '<td align="right">' . "\n";
334 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") : ''))) . '">';
335 print '</td></tr>' . "\n";
336
337 // --- User Auto-Creation Settings ---
338 print '</table></div>' . "\n";
339
340 $langs->load("errors");
341 global $dolibarr_main_authentication_autocreateuser;
342 if (empty($dolibarr_main_authentication_autocreateuser)) {
343 print info_admin($langs->trans("OIDCAutocreateUserDisabled"), 0, 0, 1, 'warning');
344 } else {
345 print info_admin($langs->trans("OIDCAutocreateUserEnabled"), 0, 0, 1, 'success');
346 }
347
348 if (!empty($dolibarr_main_authentication_autocreateuser)) {
349 print '<div class="div-table-responsive-no-min">';
350 print '<table class="tagtable noborder liste nobottomiftotal">';
351 print '<tr class="liste_titre">';
352 print '<th class="liste_titre" colspan="3">' . $langs->trans("MainAuthenticationOidcAutoCreateTitle") . '</th>' . "\n";
353 print "</tr>\n";
354
355 // MAIN_AUTHENTICATION_OIDC_DEFAULT_CREATOR
356 $form = new Form($db);
357 print '<tr class="oddeven">' . "\n";
358 print '<td>' . $langs->trans("MainAuthenticationOidcDefaultCreatorName") . '</td>' . "\n";
359 print '<td>' . $langs->trans("MainAuthenticationOidcDefaultCreatorDesc") . '</td>' . "\n";
360 print '<td align="right">' . "\n";
361 $creator_val = GETPOSTISSET('MAIN_AUTHENTICATION_OIDC_DEFAULT_CREATOR') ? GETPOSTINT('MAIN_AUTHENTICATION_OIDC_DEFAULT_CREATOR') : getDolGlobalInt('MAIN_AUTHENTICATION_OIDC_DEFAULT_CREATOR');
362 print $form->select_dolusers($creator_val, 'MAIN_AUTHENTICATION_OIDC_DEFAULT_CREATOR', 1, null, 0, '', '', '', 0, 0, '(admin:=:1) AND (statut:=:1)', 0, '', 'minwidth200 maxwidth500');
363 print '</td></tr>' . "\n";
364
365 // MAIN_AUTHENTICATION_OIDC_DEFAULT_GROUP
366 print '<tr class="oddeven">' . "\n";
367 print '<td>' . $langs->trans("MainAuthenticationOidcDefaultGroupName") . '</td>' . "\n";
368 print '<td>' . $langs->trans("MainAuthenticationOidcDefaultGroupDesc") . '</td>' . "\n";
369 print '<td align="right">' . "\n";
370 $defaultgroup_val = GETPOSTISSET('MAIN_AUTHENTICATION_OIDC_DEFAULT_GROUP') ? GETPOSTINT('MAIN_AUTHENTICATION_OIDC_DEFAULT_GROUP') : getDolGlobalInt('MAIN_AUTHENTICATION_OIDC_DEFAULT_GROUP');
371 $form->select_dolgroups($defaultgroup_val, 'MAIN_AUTHENTICATION_OIDC_DEFAULT_GROUP', 1);
372 print '</td></tr>' . "\n";
373
374 // MAIN_AUTHENTICATION_OIDC_CLAIM_FIRSTNAME
375 print '<tr class="oddeven">' . "\n";
376 print '<td>' . $langs->trans("MainAuthenticationOidcClaimFirstnameName") . '</td>' . "\n";
377 print '<td>' . $langs->trans("MainAuthenticationOidcClaimFirstnameDesc") . '</td>' . "\n";
378 print '<td align="right">' . "\n";
379 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">';
380 print '</td></tr>' . "\n";
381
382 // MAIN_AUTHENTICATION_OIDC_CLAIM_LASTNAME
383 print '<tr class="oddeven">' . "\n";
384 print '<td>' . $langs->trans("MainAuthenticationOidcClaimLastnameName") . '</td>' . "\n";
385 print '<td>' . $langs->trans("MainAuthenticationOidcClaimLastnameDesc") . '</td>' . "\n";
386 print '<td align="right">' . "\n";
387 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">';
388 print '</td></tr>' . "\n";
389
390 // MAIN_AUTHENTICATION_OIDC_CLAIM_EMAIL
391 print '<tr class="oddeven">' . "\n";
392 print '<td>' . $langs->trans("MainAuthenticationOidcClaimEmailName") . '</td>' . "\n";
393 print '<td>' . $langs->trans("MainAuthenticationOidcClaimEmailDesc") . '</td>' . "\n";
394 print '<td align="right">' . "\n";
395 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">';
396 print '</td></tr>' . "\n";
397
398 print '</table>' . "\n";
399 print '</div>';
400 } // end if autocreateuser
401
402 print '<br>';
403 print '<div align="center">';
404 print '<input type="submit" class="button" value="' . $langs->trans("Save") . '">';
405 print '</div>';
406
407 print '</form>';
408}
409
410print '<br>';
411
412llxFooter();
413$db->close();
414?>
415<script type="text/javascript">
416 $(document).ready(function() {
417 $('#oidc_wellknow_populate').on('click', function() {
418 const url = $('#oidc_wellknow_url').val().trim();
419 if (!url) return;
420
421 // Ensure URL ends with /.well-known/openid-configuration
422 let wellKnownUrl = url;
423 if (!wellKnownUrl.endsWith('/.well-known/openid-configuration')) {
424 if (!wellKnownUrl.endsWith('/')) wellKnownUrl += '/';
425 wellKnownUrl += '.well-known/openid-configuration';
426 }
427
428 $.getJSON(wellKnownUrl)
429 .done(function(data) {
430 if (data.authorization_endpoint) {
431 $('#MAIN_AUTHENTICATION_OIDC_AUTHORIZE_URL').val(data.authorization_endpoint);
432 }
433 if (data.token_endpoint) {
434 $('#MAIN_AUTHENTICATION_OIDC_TOKEN_URL').val(data.token_endpoint);
435 }
436 if (data.userinfo_endpoint) {
437 $('#MAIN_AUTHENTICATION_OIDC_USERINFO_URL').val(data.userinfo_endpoint);
438 }
439 if (data.end_session_endpoint) {
440 $('#MAIN_AUTHENTICATION_OIDC_LOGOUT_URL').val(data.end_session_endpoint);
441 }
442 if (data.scopes_supported) {
443 $('#MAIN_AUTHENTICATION_OIDC_SCOPES').val(data.scopes_supported.join(' '));
444 }
445 })
446 .fail(function() {
447 alert('Failed to fetch OIDC well-known configuration from: ' + wellKnownUrl);
448 });
449 });
450 });
451</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.
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)
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='', $textonpictotooltip='')
Show information in HTML for admin users or standard users.
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
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.
dolBuildUrl($url, $params=[], $addtoken=false, $anchor='')
Return path of url.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
setEventMessage($mesgs, $style='mesgs', $noduplicate=0, $attop=0)
Set event message in dol_events session object.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
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...
if(!defined( 'CSRFCHECK_WITH_TOKEN'))
Abort invoice creation with a given error message.
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.