dolibarr 21.0.0-alpha
ldap.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2004 Sebastien Di Cintio <sdicintio@ressource-toi.org>
4 * Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
5 * Copyright (C) 2005-2021 Regis Houssin <regis.houssin@inodbox.com>
6 * Copyright (C) 2006-2020 Laurent Destailleur <eldy@users.sourceforge.net>
7 * Copyright (C) 2011-2013 Juanjo Menent <jmenent@2byte.es>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 3 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program. If not, see <https://www.gnu.org/licenses/>.
21 */
22
29// Load Dolibarr environment
30require '../main.inc.php';
31require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
32require_once DOL_DOCUMENT_ROOT.'/core/class/ldap.class.php';
33require_once DOL_DOCUMENT_ROOT.'/core/class/html.formldap.class.php';
34require_once DOL_DOCUMENT_ROOT.'/core/lib/ldap.lib.php';
35
36// Load translation files required by the page
37$langs->loadLangs(array("admin", "ldap"));
38
39if (!$user->admin) {
41}
42
43$action = GETPOST('action', 'aZ09');
44
45// Initialize a technical object to manage hooks of page. Note that conf->hooks_modules contains an array of hook context
46$hookmanager->initHooks(array('adminldap', 'globaladmin'));
47
48
49/*
50 * Actions
51 */
52
53$parameters = array();
54$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
55if ($reshook < 0) {
56 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
57}
58
59if (empty($reshook)) {
60 if ($action == 'setvalue' && $user->admin) {
61 $error = 0;
62
63 $db->begin();
64
65 if (!dolibarr_set_const($db, 'LDAP_SERVER_TYPE', GETPOST("type", 'aZ09'), 'chaine', 0, '', $conf->entity)) {
66 $error++;
67 }
68 if (!dolibarr_set_const($db, 'LDAP_USERACCOUNTCONTROL', GETPOSTINT("userAccountControl"), 'chaine', 0, '', $conf->entity)) {
69 $error++;
70 }
71 if (!dolibarr_set_const($db, 'LDAP_SERVER_PROTOCOLVERSION', GETPOST("LDAP_SERVER_PROTOCOLVERSION", 'aZ09'), 'chaine', 0, '', $conf->entity)) {
72 $error++;
73 }
74 if (!dolibarr_set_const($db, 'LDAP_SERVER_HOST', GETPOST("host", 'alphanohtml'), 'chaine', 0, '', $conf->entity)) {
75 $error++;
76 }
77 if (!dolibarr_set_const($db, 'LDAP_SERVER_HOST_SLAVE', GETPOST("slave", 'alphanohtml'), 'chaine', 0, '', $conf->entity)) {
78 $error++;
79 }
80 if (!dolibarr_set_const($db, 'LDAP_SERVER_PORT', GETPOSTINT("port"), 'chaine', 0, '', $conf->entity)) {
81 $error++;
82 }
83 if (!dolibarr_set_const($db, 'LDAP_SERVER_DN', GETPOST("dn", 'alphanohtml'), 'chaine', 0, '', $conf->entity)) {
84 $error++;
85 }
86 if (!dolibarr_set_const($db, 'LDAP_ADMIN_DN', GETPOST("admin", 'alphanohtml'), 'chaine', 0, '', $conf->entity)) {
87 $error++;
88 }
89 if (!dolibarr_set_const($db, 'LDAP_ADMIN_PASS', GETPOST("pass", 'none'), 'chaine', 0, '', $conf->entity)) {
90 $error++;
91 }
92 if (!dolibarr_set_const($db, 'LDAP_SERVER_USE_TLS', GETPOST("usetls", 'aZ09'), 'chaine', 0, '', $conf->entity)) {
93 $error++;
94 }
95 if (!dolibarr_set_const($db, 'LDAP_SYNCHRO_ACTIVE', GETPOST("activesynchro", 'aZ09'), 'chaine', 0, '', $conf->entity)) {
96 $error++;
97 }
98 if (!dolibarr_set_const($db, 'LDAP_CONTACT_ACTIVE', GETPOST("activecontact", 'aZ09'), 'chaine', 0, '', $conf->entity)) {
99 $error++;
100 }
101 if (!dolibarr_set_const($db, 'LDAP_MEMBER_ACTIVE', GETPOST("activemembers", 'aZ09'), 'chaine', 0, '', $conf->entity)) {
102 $error++;
103 }
104 if (!dolibarr_set_const($db, 'LDAP_MEMBER_TYPE_ACTIVE', GETPOST("activememberstypes", 'aZ09'), 'chaine', 0, '', $conf->entity)) {
105 $error++;
106 }
107 if (!dolibarr_set_const($db, 'LDAP_PASSWORD_HASH_TYPE', GETPOST("LDAP_PASSWORD_HASH_TYPE", 'aZ09'), 'chaine', 0, '', $conf->entity)) {
108 $error++;
109 }
110
111 if (!$error) {
112 $db->commit();
113 setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
114 } else {
115 $db->rollback();
116 dol_print_error($db);
117 }
118 }
119}
120
121/*
122 * View
123 */
124
125llxHeader('', $langs->trans("LDAPSetup"), 'EN:Module_LDAP_En|FR:Module_LDAP|ES:M&oacute;dulo_LDAP', '', 0, 0, '', '', '', 'mod-admin page-ldap');
126
127$linkback = '<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>';
128
129print load_fiche_titre($langs->trans("LDAPSetup"), $linkback, 'title_setup');
130
131$head = ldap_prepare_head();
132
133// Test if the LDAP functionality is available
134if (!function_exists("ldap_connect")) {
135 setEventMessages($langs->trans("LDAPFunctionsNotAvailableOnPHP"), null, 'errors');
136}
137
138
139$form = new Form($db);
140$formldap = new FormLdap($db);
141
142print '<form method="post" action="'.$_SERVER["PHP_SELF"].'?action=setvalue&token='.newToken().'">';
143print '<input type="hidden" name="token" value="'.newToken().'">';
144
145print dol_get_fiche_head($head, 'ldap', '', -1);
146
147print '<table class="noborder centpercent">';
148
149// List of active synchronisations
150print '<tr class="liste_titre">';
151print '<td colspan="3">'.$langs->trans("LDAPSynchronization").'</td>';
152print "</tr>\n";
153
154// Synchronise active users and groups
155
156print '<tr class="oddeven"><td>'.$langs->trans("LDAPDnSynchroActive").'</td><td>';
157print $formldap->selectLdapDnSynchroActive(getDolGlobalInt('LDAP_SYNCHRO_ACTIVE'), 'activesynchro');
158print '</td><td><span class="opacitymedium">'.$langs->trans("LDAPDnSynchroActiveExample").'</span>';
159if (getDolGlobalString('LDAP_SYNCHRO_ACTIVE') && !getDolGlobalString('LDAP_USER_DN')) {
160 print '<br><span class="error">'.$langs->trans("LDAPSetupNotComplete").'</span>';
161}
162print '</td></tr>';
163
164// Synchro contact active
165if (isModEnabled('societe')) {
166 print '<tr class="oddeven"><td>'.$langs->trans("LDAPDnContactActive").'</td><td>';
167 print $formldap->selectLdapDnSynchroActive(getDolGlobalInt('LDAP_CONTACT_ACTIVE'), 'activecontact', array(Ldap::SYNCHRO_LDAP_TO_DOLIBARR));
168 print '</td><td><span class="opacitymedium">' . $langs->trans("LDAPDnContactActiveExample") . '</span></td></tr>';
169}
170
171// Synchro member active
172if (isModEnabled('member')) {
173 print '<tr class="oddeven"><td>' . $langs->trans("LDAPDnMemberActive") . '</td><td>';
174 print $formldap->selectLdapDnSynchroActive(getDolGlobalInt('LDAP_MEMBER_ACTIVE'), 'activemembers', array(), 2);
175 print '</td><td><span class="opacitymedium">' . $langs->trans("LDAPDnMemberActiveExample") . '</span></td></tr>';
176}
177
178// Synchro member type active
179if (isModEnabled('member')) {
180 print '<tr class="oddeven"><td>' . $langs->trans("LDAPDnMemberTypeActive") . '</td><td>';
181 print $formldap->selectLdapDnSynchroActive(getDolGlobalInt('LDAP_MEMBER_TYPE_ACTIVE'), 'activememberstypes', array(), 2);
182 print '</td><td><span class="opacitymedium">' . $langs->trans("LDAPDnMemberTypeActiveExample") . '</span></td></tr>';
183}
184
185// Fields from hook
186$parameters = array();
187$reshook = $hookmanager->executeHooks('addAdminLdapOptions', $parameters); // Note that $action and $object may have been modified by hook
188print $hookmanager->resPrint;
189
190print '<tr class="liste_titre">';
191print '<td>'.$langs->trans("Parameter").'</td>';
192print '<td>'.$langs->trans("Value").'</td>';
193print '<td>'.$langs->trans("Example").'</td>';
194print "</tr>\n";
195
196// Type
197print '<tr class="oddeven"><td>'.$langs->trans("Type").'</td><td>';
198print $formldap->selectLdapServerType(getDolGlobalString('LDAP_SERVER_TYPE'), 'type');
199print '</td><td>&nbsp;</td></tr>';
200
201// userAccountControl
202print '<tr class="oddeven"><td>'.$langs->trans("LDAPUserAccountControl").'</td><td>';
203print '<input class="width75" type="text" name="userAccountControl" value="'.getDolGlobalString('LDAP_USERACCOUNTCONTROL', '512').'">';
204print '</td><td><span class="opacitymedium">'.$langs->trans("LDAPUserAccountControlExample").'</span></td></tr>';
205
206// Version
207print '<tr class="oddeven"><td>'.$langs->trans("Version").'</td><td>';
208print $formldap->selectLdapServerProtocolVersion(getDolGlobalString('LDAP_SERVER_PROTOCOLVERSION'), 'LDAP_SERVER_PROTOCOLVERSION');
209print '</td><td><span class="opacitymedium">'.$langs->trans("LDAPServerProtocolVersion").'</span></td></tr>';
210
211// Serveur primaire
212print '<tr class="oddeven"><td>';
213print $langs->trans("LDAPPrimaryServer").'</td><td>';
214print '<input class="minwidth200" type="text" name="host" value="'.getDolGlobalString('LDAP_SERVER_HOST').'">';
215print '</td><td><span class="opacitymedium">'.$langs->trans("LDAPServerExample").'</span></td></tr>';
216
217// Serveur secondaire
218print '<tr class="oddeven"><td>';
219print $langs->trans("LDAPSecondaryServer").'</td><td>';
220print '<input class="minwidth200" type="text" name="slave" value="'.getDolGlobalString('LDAP_SERVER_HOST_SLAVE').'">';
221print '</td><td><span class="opacitymedium">'.$langs->trans("LDAPServerExample").'</span></td></tr>';
222
223// Port
224print '<tr class="oddeven"><td>'.$langs->trans("LDAPServerPort").'</td><td>';
225print '<input class="width75" type="text" name="port" value="'.getDolGlobalString('LDAP_SERVER_PORT', '389').'">';
226print '</td><td><span class="opacitymedium">'.$langs->trans("LDAPServerPortExample").'</span></td></tr>';
227
228// DNserver
229print '<tr class="oddeven"><td>'.$langs->trans("LDAPServerDn").'</td><td>';
230print '<input class="minwidth300" type="text" name="dn" value="'.getDolGlobalString('LDAP_SERVER_DN').'">';
231print '</td><td><span class="opacitymedium">'.$langs->trans("LDAPServerDnExample").'</span></td></tr>';
232
233// Utiliser TLS
234print '<tr class="oddeven"><td>'.$langs->trans("LDAPServerUseTLS").'</td><td>';
235print $form->selectyesno('usetls', getDolGlobalInt('LDAP_SERVER_USE_TLS'), 1);
236print '</td><td><span class="opacitymedium">'.$langs->trans("LDAPServerUseTLSExample").'</span></td></tr>';
237
238// Password hash type
239print '<tr class="oddeven"><td>'.$langs->trans("LDAPPasswordHashType").'</td><td>';
240print $formldap->selectLdapPasswordHashType(getDolGlobalString('LDAP_PASSWORD_HASH_TYPE'), 'LDAP_PASSWORD_HASH_TYPE');
241print '</td><td><span class="opacitymedium">'.$langs->trans("LDAPPasswordHashTypeExample").'</span></td></tr>';
242
243print '<tr class="liste_titre">';
244print '<td colspan="3">'.$langs->trans("ForANonAnonymousAccess").'</td>';
245print "</tr>\n";
246
247// DNAdmin
248print '<!-- LDAP_ADMIN_DN -->';
249print '<tr class="oddeven"><td>'.$langs->trans("LDAPAdminDn").'</td><td>';
250print '<input class="minwidth300" type="text" name="admin" value="'.getDolGlobalString('LDAP_ADMIN_DN').'">';
251print '</td><td class="maxwidthhalf"><span class="opacitymedium">'.$langs->trans("LDAPAdminDnExample").'</span></td></tr>';
252
253// Pass
254print '<!-- LDAP_ADMIN_PASS -->';
255print '<tr class="oddeven"><td>'.$langs->trans("LDAPPassword").'</td><td>';
256print '<input class="minwidth150" type="password" name="pass" value="'.dol_escape_htmltag(getDolGlobalString('LDAP_ADMIN_PASS')).'">';
257print showValueWithClipboardCPButton(getDolGlobalString('LDAP_ADMIN_PASS'), 0, '&nbsp;');
258print '</td><td><span class="opacitymedium">'.$langs->trans('Password').' (ex: secret)</span></td></tr>';
259
260print '</table>';
261
262print dol_get_fiche_end();
263
264print $form->buttonsSaveCancel("Modify", '');
265
266print '</form>';
267
268print '<br>';
269
270
271/*
272 * Test the connection
273 */
274if (function_exists("ldap_connect")) {
275 if (getDolGlobalString('LDAP_SERVER_HOST')) {
276 print '<a class="butAction reposition" href="'.$_SERVER["PHP_SELF"].'?action=test">'.$langs->trans("LDAPTestConnect").'</a><br><br>';
277 }
278
279 if ($action == 'test') {
280 $ldap = new Ldap(); // The parameters are provided and recovered through $conf
281
282 $result = $ldap->connectBind();
283 if ($result > 0) {
284 // Test ldap connect and bind
285 print img_picto('', 'info').' ';
286 print '<span class="ok">'.$langs->trans("LDAPTCPConnectOK", $ldap->connectedServer, getDolGlobalString('LDAP_SERVER_PORT')).'</span>';
287 print '<br>';
288
289 if (getDolGlobalString('LDAP_ADMIN_DN') && getDolGlobalString('LDAP_ADMIN_PASS')) {
290 if ($result == 2) {
291 print img_picto('', 'info').' ';
292 print '<span class="ok">'.$langs->trans("LDAPBindOK", $ldap->connectedServer, getDolGlobalString('LDAP_SERVER_PORT'), getDolGlobalString('LDAP_ADMIN_DN'), preg_replace('/./i', '*', $conf->global->LDAP_ADMIN_PASS)).'</span>';
293 print '<br>';
294 } else {
295 print img_picto('', 'error').' ';
296 print '<span class="error">'.$langs->trans("LDAPBindKO", $ldap->connectedServer, getDolGlobalString('LDAP_SERVER_PORT'), getDolGlobalString('LDAP_ADMIN_DN'), preg_replace('/./i', '*', $conf->global->LDAP_ADMIN_PASS)).'</span>';
297 print '<br>';
298 print $langs->trans("Error").' '.$ldap->error;
299 print '<br>';
300 }
301 } else {
302 print img_picto('', 'warning').' ';
303 print '<span class="warning">'.$langs->trans("LDAPNoUserOrPasswordProvidedAccessIsReadOnly").'</span>';
304 print '<br>';
305 }
306
307
308 // Test ldap_getversion
309 if (($ldap->getVersion() == 3)) {
310 print img_picto('', 'info').' ';
311 print '<span class="ok">'.$langs->trans("LDAPSetupForVersion3").'</span>';
312 print '<br>';
313 } else {
314 print img_picto('', 'info').' ';
315 print '<span class="ok">'.$langs->trans("LDAPSetupForVersion2").'</span>';
316 print '<br>';
317 }
318
319 $ldap->unbind();
320 } else {
321 print img_picto('', 'error').' ';
322 print '<span class="error">'.$langs->trans("LDAPTCPConnectKO", $ldap->connectedServer, getDolGlobalString('LDAP_SERVER_PORT')).'</span>';
323 print '<br>';
324 print $langs->trans("Error").' '.$ldap->error;
325 print '<br>';
326 }
327 }
328}
329
330// End of page
331llxFooter();
332$db->close();
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).
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:70
Class to manage generation of HTML components Only common components must be here.
Class to manage generation of HTML components for ldap module.
Class to manage LDAP features.
llxFooter()
Footer empty.
Definition document.php:107
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
showValueWithClipboardCPButton($valuetocopy, $showonlyonhover=1, $texttoshow='')
Create a button to copy $valuetocopy in the clipboard (for copy and paste feature).
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
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)
Show tabs of a record.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
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)
Return value of a param into GET or POST supervariable.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
ldap_prepare_head()
Initialize the array of tabs for customer invoice.
Definition ldap.lib.php:33
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.