dolibarr 23.0.3
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';
30require_once DOL_DOCUMENT_ROOT.'/core/lib/openid_connect.lib.php';
31
42$langs->loadLangs(array("users", "admin", "other"));
43
44if (!$user->admin) {
46}
47
48$action = GETPOST('action', 'alpha');
49
50
51/*
52 * Actions
53 */
54
55$errors = [];
56$error = 0;
57
58if ($action == 'set') {
59 $client_id = GETPOST('MAIN_AUTHENTICATION_OIDC_LOGIN_CLAIM', 'alpha');
60 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_LOGIN_CLAIM', $client_id, 'chaine', 0, '', 0);
61 if (!$res > 0) {
62 $errors[] = $db->lasterror();
63 $error++;
64 }
65
66 $client_id = GETPOST('MAIN_AUTHENTICATION_OIDC_CLIENT_ID', 'alpha');
67 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_CLIENT_ID', $client_id, 'chaine', 0, '', 0);
68 if (!$res > 0) {
69 $errors[] = $db->lasterror();
70 $error++;
71 }
72
73 $client_secret = GETPOST('MAIN_AUTHENTICATION_OIDC_CLIENT_SECRET', 'alpha');
74 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_CLIENT_SECRET', $client_secret, 'chaine', 0, '', 0);
75 if (!$res > 0) {
76 $errors[] = $db->lasterror();
77 $error++;
78 }
79
80 $scopes = GETPOST('MAIN_AUTHENTICATION_OIDC_SCOPES', 'alpha');
81 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_SCOPES', $scopes, 'chaine', 0, '', 0);
82 if (!$res > 0) {
83 $errors[] = $db->lasterror();
84 $error++;
85 }
86
87 $authorize_url = GETPOST('MAIN_AUTHENTICATION_OIDC_AUTHORIZE_URL', 'alpha');
88 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_AUTHORIZE_URL', $authorize_url, 'chaine', 0, '', 0);
89 if (!$res > 0) {
90 $errors[] = $db->lasterror();
91 $error++;
92 }
93
94 $value = GETPOST('MAIN_AUTHENTICATION_OIDC_TOKEN_URL', 'alpha');
95 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_TOKEN_URL', $value, 'chaine', 0, '', 0);
96 if (!$res > 0) {
97 $errors[] = $db->lasterror();
98 $error++;
99 }
100
101 $value = GETPOST('MAIN_AUTHENTICATION_OIDC_USERINFO_URL', 'alpha');
102 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_USERINFO_URL', $value, 'chaine', 0, '', 0);
103 if (!$res > 0) {
104 $errors[] = $db->lasterror();
105 $error++;
106 }
107
108 $logout_url = GETPOST('MAIN_AUTHENTICATION_OIDC_LOGOUT_URL', 'alpha');
109 $res = dolibarr_set_const($db, 'MAIN_AUTHENTICATION_OIDC_LOGOUT_URL', $logout_url, 'chaine', 0, '', 0);
110 if (!$res > 0) {
111 $errors[] = $db->lasterror();
112 $error++;
113 }
114}
115
116if ($action != '') {
117 if (!$error) {
118 setEventMessage($langs->trans("SetupSaved"));
119 header("Location: " . $_SERVER["PHP_SELF"]);
120 exit;
121 } else {
122 setEventMessages('', $errors, 'errors');
123 }
124}
125
126
127/*
128 * View
129 */
130
131$wikihelp = 'EN:Setup_Security|FR:Paramétrage_Sécurité|ES:Configuración_Seguridad';
132llxHeader('', $langs->trans("Miscellaneous"), $wikihelp, '', 0, 0, '', '', '', 'mod-admin page-security_other');
133
134print load_fiche_titre($langs->trans("SecuritySetup"), '', 'title_setup');
135
136print '<span class="opacitymedium">'.$langs->trans("OpenIDDesc")."</span><br>\n";
137print "<br>\n";
138
139$head = security_prepare_head();
140
141print dol_get_fiche_head($head, 'openid', '', -1);
142
143$urlforwikidoc = img_picto('', 'url', 'class="pictofixedwidth"').'<a target="_blank" href="https://wiki.dolibarr.org/index.php?title=Authentication,_SSO_and_SSL#Mode_openid_connect">';
144$urlforwikidoc .= $langs->trans("SeeHere");
145$urlforwikidoc .= '</a>';
146/*
147print $langs->trans("SeeWikiDocForHelpInSetupOpenIDCOnnect");
148print ' - ';
149print $urlforwikidoc;
150*/
151print dol_get_fiche_end();
152
153
154print $langs->trans("EnableOpenIDConnectAuthentication");
155if (!empty($conf->use_javascript_ajax)) {
156 print ajax_constantonoff('MAIN_AUTHENTICATION_OIDC_ON', array(), null, 0, 0, 1);
157} else {
158 if (!getDolGlobalString('MAIN_AUTHENTICATION_OIDC_ON')) {
159 print '<a href="'.$_SERVER['PHP_SELF'].'?action=set_MAIN_AUTHENTICATION_OIDC_ON&token='.newToken().'">'.img_picto($langs->trans("Disabled"), 'off').'</a>';
160 } else {
161 print '<a href="'.$_SERVER['PHP_SELF'].'?action=del_MAIN_AUTHENTICATION_OIDC_ON&token='.newToken().'">'.img_picto($langs->trans("Enabled"), 'on').'</a>';
162 }
163}
164
165print '<br><br>';
166
167
168if (getDolGlobalString('MAIN_AUTHENTICATION_OIDC_ON')) {
169 if (!preg_match('/openid_connect/', $dolibarr_main_authentication)) {
170 $langs->load("errors");
171 print info_admin($langs->trans("ErrorOpenIDSetupConfNotComplete").': '.$urlforwikidoc, 0, 0, 1, 'warning');
172 } else {
173 print info_admin('In conf.php file: dolibarr_main_authentication is '.$dolibarr_main_authentication);
174 }
175
176 print '<br>';
177
178 print '<form method="post" action="'.dolBuildUrl($_SERVER["PHP_SELF"]).'">';
179 print '<input type="hidden" name="token" value="'.newToken().'">';
180 print '<input type="hidden" name="action" value="set">';
181
182 print '<div class="div-table-responsive-no-min">';
183 print '<table class="tagtable noborder liste nobottomiftotal">';
184 print '<tr class="liste_titre">';
185 print '<th class="liste_titre">'.$langs->trans("Parameters").'</th>'."\n";
186 print '<th class="liste_titre"></th>'."\n";
187 print '<th class="liste_titre"></th>'."\n";
188 print "</tr>\n";
189
190 // MAIN_AUTHENTICATION_OIDC_LOGIN_CLAIM
191 print '<tr class="oddeven">' . "\n";
192 print '<td>'.$langs->trans("MainAuthenticationOidcLoginClaimName").'</td>'."\n";
193 print '<td>'.$langs->trans("MainAuthenticationOidcLoginClaimDesc").'</td>'."\n";
194 print '<td align="right">' . "\n";
195 print '<input name="MAIN_AUTHENTICATION_OIDC_LOGIN_CLAIM" id="MAIN_AUTHENTICATION_OIDC_LOGIN_CLAIM" class="minwidth400" 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") : ''))).'"></td></tr>';
196 print '</td></tr>' . "\n";
197
198 // MAIN_AUTHENTICATION_OIDC_CLIENT_ID
199 print '<tr class="oddeven">' . "\n";
200 print '<td>'.$langs->trans("MainAuthenticationOidcClientIdName").'</td>'."\n";
201 print '<td>'.$langs->trans("MainAuthenticationOidcClientIdDesc").'</td>'."\n";
202 print '<td align="right">' . "\n";
203 print '<input name="MAIN_AUTHENTICATION_OIDC_CLIENT_ID" id="MAIN_AUTHENTICATION_OIDC_CLIENT_ID" class="minwidth400" 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") : ''))).'"></td></tr>';
204 print '</td></tr>' . "\n";
205
206 // MAIN_AUTHENTICATION_OIDC_CLIENT_SECRET
207 print '<tr class="oddeven">' . "\n";
208 print '<td>'.$langs->trans("MainAuthenticationOidcClientSecretName").'</td>'."\n";
209 print '<td>'.$langs->trans("MainAuthenticationOidcClientSecretDesc").'</td>'."\n";
210 print '<td align="right">' . "\n";
211 print '<input type="password" name="MAIN_AUTHENTICATION_OIDC_CLIENT_SECRET" id="MAIN_AUTHENTICATION_OIDC_CLIENT_SECRET" class="minwidth400" 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") : ''))).'"></td></tr>';
212 print '</td></tr>' . "\n";
213
214 // MAIN_AUTHENTICATION_OIDC_SCOPES
215 print '<tr class="oddeven">' . "\n";
216 print '<td>'.$langs->trans("MainAuthenticationOidcScopesName").'</td>'."\n";
217 print '<td>'.$langs->trans("MainAuthenticationOidcScopesDesc").'</td>'."\n";
218 print '<td align="right">' . "\n";
219 print '<input name="MAIN_AUTHENTICATION_OIDC_SCOPES" id="MAIN_AUTHENTICATION_OIDC_SCOPES" class="minwidth400" 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") : ''))).'"></td></tr>';
220 print '</td></tr>' . "\n";
221
222 // MAIN_AUTHENTICATION_OIDC_AUTHORIZE_URL
223 print '<tr class="oddeven">' . "\n";
224 print '<td>'.$langs->trans("MainAuthenticationOidcAuthorizeUrlName").'</td>'."\n";
225 print '<td>'.$langs->trans("MainAuthenticationOidcAuthorizeUrlDesc").'</td>'."\n";
226 print '<td align="right">' . "\n";
227 print '<input name="MAIN_AUTHENTICATION_OIDC_AUTHORIZE_URL" id="MAIN_AUTHENTICATION_OIDC_AUTHORIZE_URL" class="minwidth400" 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") : ''))).'"></td></tr>';
228 print '</td></tr>' . "\n";
229
230 // MAIN_AUTHENTICATION_OIDC_TOKEN_URL
231 print '<tr class="oddeven">' . "\n";
232 print '<td>'.$langs->trans("MainAuthenticationOidcTokenUrlName").'</td>'."\n";
233 print '<td>'.$langs->trans("MainAuthenticationOidcTokenUrlDesc").'</td>'."\n";
234 print '<td align="right">' . "\n";
235 print '<input name="MAIN_AUTHENTICATION_OIDC_TOKEN_URL" id="MAIN_AUTHENTICATION_OIDC_TOKEN_URL" class="minwidth400" 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") : ''))).'"></td></tr>';
236 print '</td></tr>' . "\n";
237
238 // MAIN_AUTHENTICATION_OIDC_USERINFO_URL
239 print '<tr class="oddeven">' . "\n";
240 print '<td>'.$langs->trans("MainAuthenticationOidcUserinfoUrlName").'</td>'."\n";
241 print '<td>'.$langs->trans("MainAuthenticationOidcUserinfoUrlDesc").'</td>'."\n";
242 print '<td align="right">' . "\n";
243 print '<input name="MAIN_AUTHENTICATION_OIDC_USERINFO_URL" id="MAIN_AUTHENTICATION_OIDC_USERINFO_URL" class="minwidth400" 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") : ''))).'"></td></tr>';
244 print '</td></tr>' . "\n";
245
246 // MAIN_AUTHENTICATION_OIDC_LOGOUT_URL
247 print '<tr class="oddeven">' . "\n";
248 print '<td>'.$langs->trans("MainAuthenticationOidcLogoutUrlName").'</td>'."\n";
249 print '<td>'.$langs->trans("MainAuthenticationOidcLogoutUrlDesc").'</td>'."\n";
250 print '<td align="right">' . "\n";
251 print '<input name="MAIN_AUTHENTICATION_OIDC_LOGOUT_URL" id="MAIN_AUTHENTICATION_OIDC_LOGOUT_URL" class="minwidth400" 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") : ''))).'"></td></tr>';
252 print '</td></tr>' . "\n";
253
254 // REDIRECT_URL
255 print '<tr class="oddeven">' . "\n";
256 print '<td>'.$langs->trans("MainAuthenticationOidcRedirectUrlName").'</td>'."\n";
257 print '<td>'.$langs->trans("MainAuthenticationOidcRedirectUrlDesc").'</td>'."\n";
258 print '<td align="right">' . "\n";
259 print '<input class="minwidth400" value="'.dol_escape_htmltag(openid_connect_get_redirect_url()).'" disabled></td></tr>';
260 print '</td></tr>' . "\n";
261
262 // LOGOUT_URL
263 print '<tr class="oddeven">' . "\n";
264 print '<td>'.$langs->trans("MainAuthenticationOidcLogoutRedirectUrlName").'</td>'."\n";
265 print '<td>'.$langs->trans("MainAuthenticationOidcLogoutRedirectUrlDesc").'</td>'."\n";
266 print '<td align="right">' . "\n";
267 print '<input class="minwidth400" value="'.dol_escape_htmltag(getDolGlobalString('MAIN_LOGOUT_GOTO_URL', DOL_MAIN_URL_ROOT . "/index.php")).'" disabled></td></tr>';
268 print '</td></tr>' . "\n";
269
270 print '</table>'."\n";
271 print '</div>';
272
273 print '<br>';
274 print '<div align="center">';
275 print '<input type="submit" class="button" value="'.$langs->trans("Save").'">';
276 print '</div>';
277
278 print '</form>';
279}
280
281print '<br>';
282
283llxFooter();
284$db->close();
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
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.
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.
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)
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.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.