26 require
'../main.inc.php';
27 require_once DOL_DOCUMENT_ROOT.
'/core/lib/admin.lib.php';
28 require_once DOL_DOCUMENT_ROOT.
'/core/lib/oauth.lib.php';
29 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
30 use OAuth\Common\Storage\DoliStorage;
33 $langs->loadLangs(array(
'admin',
'printing',
'oauth'));
35 $action =
GETPOST(
'action',
'aZ09');
36 $mode =
GETPOST(
'mode',
'alpha');
37 $value =
GETPOST(
'value',
'alpha');
38 $varname =
GETPOST(
'varname',
'alpha');
39 $driver =
GETPOST(
'driver',
'alpha');
41 if (!empty($driver)) {
42 $langs->load($driver);
65 if ($action ==
'setconst' && $user->admin) {
69 $setupconstarray =
GETPOST(
'setupdriver',
'array');
71 foreach ($setupconstarray as $setupconst) {
79 $result =
dolibarr_set_const($db, $constname, $constvalue, $consttype, 0, $constnote, $conf->entity);
95 if ($action ==
'setvalue' && $user->admin) {
119 $urlwithouturlroot = preg_replace(
'/'.preg_quote(DOL_URL_ROOT,
'/').
'$/i',
'', trim($dolibarr_main_url_root));
120 $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT;
125 llxHeader(
'', $langs->trans(
"TokenManager"));
127 $linkback =
'<a href="'.DOL_URL_ROOT.
'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToModuleList").
'</a>';
128 print
load_fiche_titre($langs->trans(
'ConfigOAuth'), $linkback,
'title_setup');
138 if ($mode ==
'setup' && $user->admin) {
139 print
'<span class="opacitymedium">'.$langs->trans(
"OAuthSetupForLogin").
"</span><br><br>\n";
142 foreach ($conf->global as $key => $val) {
143 if (!empty($val) && preg_match(
'/^OAUTH_.*_ID$/', $key)) {
144 $provider = preg_replace(
'/_ID$/',
'', $key);
145 $listinsetup[] = array($provider.
'_NAME', $provider.
'_ID', $provider.
'_SECRET',
'OAUTH Provider '.str_replace(
'OAUTH_',
'', $provider));
149 $oauthstateanticsrf = bin2hex(random_bytes(128/8));
152 foreach ($listinsetup as $key) {
154 $keyforsupportedoauth2array = $key[0];
155 $keyforsupportedoauth2array = preg_replace(
'/^OAUTH_/',
'', $keyforsupportedoauth2array);
156 $keyforsupportedoauth2array = preg_replace(
'/_NAME$/',
'', $keyforsupportedoauth2array);
157 if (preg_match(
'/^.*-/', $keyforsupportedoauth2array)) {
158 $keyforprovider = preg_replace(
'/^.*-/',
'', $keyforsupportedoauth2array);
160 $keyforprovider =
'';
162 $keyforsupportedoauth2array = preg_replace(
'/-.*$/',
'', $keyforsupportedoauth2array);
163 $keyforsupportedoauth2array =
'OAUTH_'.$keyforsupportedoauth2array.
'_NAME';
166 $OAUTH_SERVICENAME = (empty($supportedoauth2array[$keyforsupportedoauth2array][
'name']) ?
'Unknown' : $supportedoauth2array[$keyforsupportedoauth2array][
'name'].($keyforprovider ?
'-'.$keyforprovider :
''));
170 if ($keyforsupportedoauth2array ==
'OAUTH_GITHUB_NAME') {
173 $shortscope =
'user,public_repo';
176 $urltorenew = $urlwithroot.
'/core/modules/oauth/github_oauthcallback.php?shortscope='.$shortscope.
'&state='.$shortscope.
'&backtourl='.urlencode(DOL_URL_ROOT.
'/admin/oauthlogintokens.php');
177 $urltodelete = $urlwithroot.
'/core/modules/oauth/github_oauthcallback.php?action=delete&token='.
newToken().
'&backtourl='.urlencode(DOL_URL_ROOT.
'/admin/oauthlogintokens.php');
178 $urltocheckperms =
'https://github.com/settings/applications/';
179 } elseif ($keyforsupportedoauth2array ==
'OAUTH_GOOGLE_NAME') {
183 $shortscope =
'userinfo_email,userinfo_profile';
184 $shortscope .=
',openid,email,profile';
185 if (!empty($conf->printing->enabled)) {
186 $shortscope .=
',cloud_print';
188 if (!empty($conf->global->OAUTH_GOOGLE_GSUITE)) {
189 $shortscope .=
',admin_directory_user';
191 if (!empty($conf->global->OAUTH_GOOGLE_GMAIL)) {
192 $shortscope.=
',gmail_full';
195 $urltorenew = $urlwithroot.
'/core/modules/oauth/google_oauthcallback.php?shortscope='.$shortscope.
'&state='.$shortscope.
'-'.$oauthstateanticsrf.
'&backtourl='.urlencode(DOL_URL_ROOT.
'/admin/oauthlogintokens.php');
196 $urltodelete = $urlwithroot.
'/core/modules/oauth/google_oauthcallback.php?action=delete&token='.
newToken().
'&backtourl='.urlencode(DOL_URL_ROOT.
'/admin/oauthlogintokens.php');
197 $urltocheckperms =
'https://security.google.com/settings/security/permissions';
198 } elseif ($keyforsupportedoauth2array ==
'OAUTH_STRIPE_TEST_NAME') {
199 $shortscope =
'none';
201 $urltorenew = $urlwithroot.
'/core/modules/oauth/stripetest_oauthcallback.php?backtourl='.urlencode(DOL_URL_ROOT.
'/admin/oauthlogintokens.php');
203 $urltocheckperms =
'';
204 } elseif ($keyforsupportedoauth2array ==
'OAUTH_STRIPE_LIVE_NAME') {
205 $shortscope =
'none';
207 $urltorenew = $urlwithroot.
'/core/modules/oauth/stripelive_oauthcallback.php?backtourl='.urlencode(DOL_URL_ROOT.
'/admin/oauthlogintokens.php');
209 $urltocheckperms =
'';
213 $urltocheckperms =
'';
215 $urltorenew .=
'&keyforprovider='.$keyforprovider;
220 require_once DOL_DOCUMENT_ROOT.
'/includes/OAuth/bootstrap.php';
222 $storage =
new DoliStorage($db, $conf);
224 $tokenobj = $storage->retrieveAccessToken($OAUTH_SERVICENAME);
230 $refreshtoken =
false;
235 if (is_object($tokenobj)) {
236 $expire = ($tokenobj->getEndOfLife() !== $tokenobj::EOL_NEVER_EXPIRES && $tokenobj->getEndOfLife() !== $tokenobj::EOL_UNKNOWN && time() > ($tokenobj->getEndOfLife() - 30));
238 if ($key[1] !=
'' && $key[2] !=
'') {
239 if (is_object($tokenobj)) {
240 $refreshtoken = $tokenobj->getRefreshToken();
242 $endoflife = $tokenobj->getEndOfLife();
243 if ($endoflife == $tokenobj::EOL_NEVER_EXPIRES) {
244 $expiredat = $langs->trans(
"Never");
245 } elseif ($endoflife == $tokenobj::EOL_UNKNOWN) {
246 $expiredat = $langs->trans(
"Unknown");
255 print
'<form method="post" action="'.$_SERVER[
"PHP_SELF"].
'?mode=setup&driver='.$driver.
'" autocomplete="off">';
256 print
'<input type="hidden" name="token" value="'.newToken().
'">';
257 print
'<input type="hidden" name="action" value="setconst">';
259 print
'<div class="div-table-responsive-no-min">';
260 print
'<table class="noborder centpercent">'.
"\n";
262 print
'<tr class="liste_titre">';
263 print
'<th class="titlefieldcreate">';
264 print
img_picto(
'', $supportedoauth2array[$keyforsupportedoauth2array][
'picto'],
'class="pictofixedwidth"');
265 print $langs->trans($keyforsupportedoauth2array);
266 if ($keyforprovider) {
267 print
' (<b>'.$keyforprovider.
'</b>)';
269 print
' (<b>'.$langs->trans(
"NoName").
'</b>)';
276 print
'<tr class="oddeven">';
277 print
'<td'.($key[
'required'] ?
' class="required"' :
'').
'>';
279 print $langs->trans(
"OAuthIDSecret").
'</td>';
281 print
'<span class="opacitymedium">'.$langs->trans(
"SeePreviousTab").
'</span>';
287 print
'<tr class="oddeven">';
288 print
'<td'.($key[
'required'] ?
' class="required"' :
'').
'>';
290 print $langs->trans(
"IsTokenGenerated");
293 if (is_object($tokenobj)) {
294 print $langs->trans(
"HasAccessToken");
296 print
'<span class="opacitymedium">'.$langs->trans(
"NoAccessToken").
'</span>';
299 print
'<td width="50%">';
301 if (is_object($tokenobj)) {
303 print
'<a class="button smallpaddingimp" href="'.$urltodelete.
'">'.$langs->trans(
'DeleteAccess').
'</a><br>';
307 print
'<a class="button smallpaddingimp" href="'.$urltorenew.
'">'.$langs->trans(
'RequestAccess').
'</a><br>';
310 if ($urltocheckperms) {
311 print
'<br>'.$langs->trans(
"ToCheckDeleteTokenOnProvider", $OAUTH_SERVICENAME).
': <a href="'.$urltocheckperms.
'" target="_'.strtolower($OAUTH_SERVICENAME).
'">'.$urltocheckperms.
'</a>';
316 print
'<tr class="oddeven">';
317 print
'<td'.($key[
'required'] ?
' class="required"' :
'').
'>';
319 print $langs->trans(
"Token").
'</td>';
320 print
'<td colspan="2">';
322 if (is_object($tokenobj)) {
324 $tokentoshow = $tokenobj->getAccessToken();
336 if (is_object($tokenobj)) {
338 print
'<tr class="oddeven">';
339 print
'<td'.($key[
'required'] ?
' class="required"' :
'').
'>';
341 print $langs->trans(
"TOKEN_REFRESH");
343 print
'<td colspan="2">';
349 print
'<tr class="oddeven">';
350 print
'<td'.($key[
'required'] ?
' class="required"' :
'').
'>';
352 print $langs->trans(
"TOKEN_EXPIRED");
354 print
'<td colspan="2">';
360 print
'<tr class="oddeven">';
361 print
'<td'.($key[
'required'] ?
' class="required"' :
'').
'>';
363 print $langs->trans(
"TOKEN_EXPIRE_AT");
365 print
'<td colspan="2">';
374 if (!empty($driver)) {
375 if ($submit_enabled) {
376 print
$form->buttonsSaveCancel(
"Modify",
'');
385 if ($mode ==
'test' && $user->admin) {
386 print $langs->trans(
'PrintTestDesc'.$driver).
"<br><br>\n";
388 print
'<div class="div-table-responsive-no-min">';
389 print
'<table class="noborder centpercent">';
390 if (!empty($driver)) {
391 require_once DOL_DOCUMENT_ROOT.
'/core/modules/printing/'.$driver.
'.modules.php';
392 $classname =
'printing_'.$driver;
393 $langs->load($driver);
394 $printer =
new $classname($db);
396 if (count($printer->getlistAvailablePrinters())) {
397 if ($printer->listAvailablePrinters() == 0) {
398 print $printer->resprint;
403 print $langs->trans(
'PleaseConfigureDriverfromList');
411 if ($mode ==
'userconf' && $user->admin) {
412 print $langs->trans(
'PrintUserConfDesc'.$driver).
"<br><br>\n";
414 print
'<div class="div-table-responsive">';
415 print
'<table class="noborder centpercent">';
416 print
'<tr class="liste_titre">';
417 print
'<th>'.$langs->trans(
"User").
'</th>';
418 print
'<th>'.$langs->trans(
"PrintModule").
'</th>';
419 print
'<th>'.$langs->trans(
"PrintDriver").
'</th>';
420 print
'<th>'.$langs->trans(
"Printer").
'</th>';
421 print
'<th>'.$langs->trans(
"PrinterLocation").
'</th>';
422 print
'<th>'.$langs->trans(
"PrinterId").
'</th>';
423 print
'<th>'.$langs->trans(
"NumberOfCopy").
'</th>';
424 print
'<th class="center">'.$langs->trans(
"Delete").
'</th>';
426 $sql =
"SELECT p.rowid, p.printer_name, p.printer_location, p.printer_id, p.copy, p.module, p.driver, p.userid, u.login";
427 $sql .=
" FROM ".MAIN_DB_PREFIX.
"printing as p, ".MAIN_DB_PREFIX.
"user as u WHERE p.userid = u.rowid";
428 $resql = $db->query($sql);
429 while ($obj = $db->fetch_object(
$resql)) {
430 print
'<tr class="oddeven">';
431 print
'<td>'.$obj->login.
'</td>';
432 print
'<td>'.$obj->module.
'</td>';
433 print
'<td>'.$obj->driver.
'</td>';
434 print
'<td>'.$obj->printer_name.
'</td>';
435 print
'<td>'.$obj->printer_location.
'</td>';
436 print
'<td>'.$obj->printer_id.
'</td>';
437 print
'<td>'.$obj->copy.
'</td>';
438 print
'<td class="center">'.img_picto($langs->trans(
"Delete"),
'delete').
'</td>';