27require
'../main.inc.php';
28require_once DOL_DOCUMENT_ROOT.
'/core/lib/admin.lib.php';
29require_once DOL_DOCUMENT_ROOT.
'/core/lib/oauth.lib.php';
30require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
32use OAuth\Common\Storage\DoliStorage;
37$langs->loadLangs(array(
'admin',
'printing',
'oauth'));
39$action =
GETPOST(
'action',
'aZ09');
40$mode =
GETPOST(
'mode',
'alpha');
41$value =
GETPOST(
'value',
'alpha');
42$varname =
GETPOST(
'varname',
'alpha');
43$driver =
GETPOST(
'driver',
'alpha');
46 $langs->load($driver);
69if ($action ==
'setconst' && $user->admin) {
73 $setupconstarray =
GETPOST(
'setupdriver',
'array');
75 foreach ($setupconstarray as $setupconst) {
83 $result =
dolibarr_set_const($db, $constname, $constvalue, $consttype, 0, $constnote, $conf->entity);
99if ($action ==
'setvalue' && $user->admin) {
103 if (!($result > 0)) {
123$urlwithouturlroot = preg_replace(
'/'.preg_quote(DOL_URL_ROOT,
'/').
'$/i',
'', trim($dolibarr_main_url_root));
124$urlwithroot = $urlwithouturlroot.DOL_URL_ROOT;
127$form =
new Form($db);
129llxHeader(
'', $langs->trans(
"TokenManager"));
131$linkback =
'<a href="'.DOL_URL_ROOT.
'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToModuleList").
'</a>';
132print
load_fiche_titre($langs->trans(
'ConfigOAuth'), $linkback,
'title_setup');
142if ($mode ==
'setup' && $user->admin) {
143 print
'<span class="opacitymedium">'.$langs->trans(
"OAuthSetupForLogin").
"</span><br><br>\n";
146 foreach ($conf->global as $key => $val) {
147 if (!empty($val) && preg_match(
'/^OAUTH_.*_ID$/', $key)) {
148 $provider = preg_replace(
'/_ID$/',
'', $key);
149 $listinsetup[] = array(
153 $provider.
'_URLAUTHORIZE',
159 $oauthstateanticsrf = bin2hex(random_bytes(128/8));
162 if (!empty($listinsetup)) {
163 foreach ($listinsetup as $key) {
165 $keyforsupportedoauth2array = $key[0];
166 $keyforsupportedoauth2array = preg_replace(
'/^OAUTH_/',
'', $keyforsupportedoauth2array);
167 $keyforsupportedoauth2array = preg_replace(
'/_NAME$/',
'', $keyforsupportedoauth2array);
168 if (preg_match(
'/^.*-/', $keyforsupportedoauth2array)) {
169 $keybeforeprovider = preg_replace(
'/-.*$/',
'', $keyforsupportedoauth2array);
170 $keyforprovider = preg_replace(
'/^.*-/',
'', $keyforsupportedoauth2array);
172 $keybeforeprovider = $keyforsupportedoauth2array;
173 $keyforprovider =
'';
175 $keyforsupportedoauth2array = preg_replace(
'/-.*$/',
'', $keyforsupportedoauth2array);
176 $keyforsupportedoauth2array =
'OAUTH_'.$keyforsupportedoauth2array.
'_NAME';
179 $OAUTH_SERVICENAME = (empty($supportedoauth2array[$keyforsupportedoauth2array][
'name']) ?
'Unknown' : $supportedoauth2array[$keyforsupportedoauth2array][
'name'].($keyforprovider ?
'-'.$keyforprovider :
''));
185 $state = $shortscope;
188 if ($keyforsupportedoauth2array ==
'OAUTH_GITHUB_NAME') {
193 $urltorenew = $urlwithroot.
'/core/modules/oauth/github_oauthcallback.php?shortscope='.urlencode($shortscope).
'&state='.urlencode($shortscope).
'&backtourl='.urlencode(DOL_URL_ROOT.
'/admin/oauthlogintokens.php');
194 $urltodelete = $urlwithroot.
'/core/modules/oauth/github_oauthcallback.php?action=delete&token='.newToken().
'&backtourl='.urlencode(DOL_URL_ROOT.
'/admin/oauthlogintokens.php');
195 $urltocheckperms =
'https://github.com/settings/applications/';
196 } elseif ($keyforsupportedoauth2array ==
'OAUTH_GOOGLE_NAME') {
200 $urltorenew = $urlwithroot.
'/core/modules/oauth/google_oauthcallback.php?shortscope='.urlencode($shortscope).
'&state='.urlencode($state).
'-'.$oauthstateanticsrf.
'&backtourl='.urlencode(DOL_URL_ROOT.
'/admin/oauthlogintokens.php');
201 $urltodelete = $urlwithroot.
'/core/modules/oauth/google_oauthcallback.php?action=delete&token='.newToken().
'&backtourl='.urlencode(DOL_URL_ROOT.
'/admin/oauthlogintokens.php');
202 $urltocheckperms =
'https://security.google.com/settings/security/permissions';
203 } elseif (!empty($supportedoauth2array[$keyforsupportedoauth2array][
'returnurl'])) {
204 $urltorenew = $urlwithroot.$supportedoauth2array[$keyforsupportedoauth2array][
'returnurl'].
'?shortscope='.urlencode($shortscope).
'&state='.urlencode($state).
'&backtourl='.urlencode(DOL_URL_ROOT.
'/admin/oauthlogintokens.php');
205 $urltodelete = $urlwithroot.$supportedoauth2array[$keyforsupportedoauth2array][
'returnurl'].
'?action=delete&token='.newToken().
'&backtourl='.urlencode(DOL_URL_ROOT.
'/admin/oauthlogintokens.php');
206 $urltocheckperms =
'';
210 $urltocheckperms =
'';
214 $urltorenew .=
'&keyforprovider='.urlencode($keyforprovider);
217 $urltodelete .=
'&keyforprovider='.urlencode($keyforprovider);
223 require_once DOL_DOCUMENT_ROOT.
'/includes/OAuth/bootstrap.php';
225 $storage =
new DoliStorage($db, $conf, $keyforprovider);
228 print
'<!-- '.$OAUTH_SERVICENAME.
' -->'.
"\n";
229 $tokenobj = $storage->retrieveAccessToken($OAUTH_SERVICENAME);
239 $refreshtoken =
false;
244 if (is_object($tokenobj)) {
245 $expire = ($tokenobj->getEndOfLife() !== $tokenobj::EOL_NEVER_EXPIRES && $tokenobj->getEndOfLife() !== $tokenobj::EOL_UNKNOWN && time() > ($tokenobj->getEndOfLife() - 30));
247 if ($key[1] !=
'' && $key[2] !=
'') {
248 if (is_object($tokenobj)) {
249 $refreshtoken = $tokenobj->getRefreshToken();
251 $endoflife = $tokenobj->getEndOfLife();
252 if ($endoflife == $tokenobj::EOL_NEVER_EXPIRES) {
253 $expiredat = $langs->trans(
"Never");
254 } elseif ($endoflife == $tokenobj::EOL_UNKNOWN) {
255 $expiredat = $langs->trans(
"Unknown");
264 print
'<form method="post" action="'.$_SERVER[
"PHP_SELF"].
'?mode=setup&driver='.$driver.
'" autocomplete="off">';
265 print
'<input type="hidden" name="token" value="'.newToken().
'">';
266 print
'<input type="hidden" name="action" value="setconst">';
268 print
'<div class="div-table-responsive-no-min">';
269 print
'<table class="noborder centpercent">'.
"\n";
272 $label = $langs->trans($keyforsupportedoauth2array);
273 print
'<tr class="liste_titre">';
274 print
'<th class="titlefieldcreate">';
275 print
img_picto(
'', $supportedoauth2array[$keyforsupportedoauth2array][
'picto'],
'class="pictofixedwidth"');
276 if ($label == $keyforsupportedoauth2array) {
277 print $supportedoauth2array[$keyforsupportedoauth2array][
'name'];
281 if ($keyforprovider) {
282 print
' (<b>'.$keyforprovider.
'</b>)';
284 print
' (<b>'.$langs->trans(
"NoName").
'</b>)';
291 print
'<tr class="oddeven">';
292 print
'<td'.(empty($key[
'required']) ?
'' :
' class="required"').
'>';
294 print $langs->trans(
"OAuthIDSecret").
'</td>';
296 print
'<span class="opacitymedium">'.$langs->trans(
"SeePreviousTab").
'</span>';
303 print
'<tr class="oddeven">';
304 print
'<td>'.$langs->trans(
"Scopes").
'</td>';
305 print
'<td colspan="2">';
307 print $currentscopes;
310 print
'<tr class="oddeven">';
311 print
'<td'.(empty($key[
'required']) ?
'' :
' class="required"').
'>';
313 print $langs->trans(
"IsTokenGenerated");
316 if (is_object($tokenobj)) {
317 print $form->textwithpicto(
yn(1), $langs->trans(
"HasAccessToken").
' : '.
dol_print_date($storage->date_modification,
'dayhour').
' state='.
dol_escape_htmltag($storage->state));
319 print
'<span class="opacitymedium">'.$langs->trans(
"NoAccessToken").
'</span>';
322 print
'<td width="50%">';
324 if (is_object($tokenobj)) {
327 print
'<a class="button smallpaddingimp" href="'.$urltodelete.
'">'.$langs->trans(
'DeleteAccess').
'</a><br>';
329 print
'<span class="opacitymedium">'.$langs->trans(
'GoOnTokenProviderToDeleteToken').
'</span><br>';
334 print
'<a class="button smallpaddingimp" href="'.$urltorenew.
'">'.$langs->trans(
'GetAccess').
'</a>';
335 print $form->textwithpicto(
'', $langs->trans(
'RequestAccess'));
339 if ($urltocheckperms) {
340 print
'<br>'.$langs->trans(
"ToCheckDeleteTokenOnProvider", $OAUTH_SERVICENAME).
': <a href="'.$urltocheckperms.
'" target="_'.strtolower($OAUTH_SERVICENAME).
'">'.$urltocheckperms.
'</a>';
345 print
'<tr class="oddeven">';
346 print
'<td'.(empty($key[
'required']) ?
'' :
' class="required"').
'>';
348 print $langs->trans(
"Token").
'</td>';
349 print
'<td colspan="2">';
351 if (is_object($tokenobj)) {
352 $tokentoshow = $tokenobj->getAccessToken();
364 if (is_object($tokenobj)) {
366 print
'<tr class="oddeven">';
367 print
'<td'.(empty($key[
'required']) ?
'' :
' class="required"').
'>';
369 print $langs->trans(
"TOKEN_REFRESH");
371 print
'<td colspan="2">';
377 print
'<tr class="oddeven">';
378 print
'<td'.(empty($key[
'required']) ?
'' :
' class="required"').
'>';
380 print $langs->trans(
"TOKEN_EXPIRED");
382 print
'<td colspan="2">';
388 print
'<tr class="oddeven">';
389 print
'<td'.(empty($key[
'required']) ?
'' :
' class="required"').
'>';
391 print $langs->trans(
"TOKEN_EXPIRE_AT");
393 print
'<td colspan="2">';
402 if (!empty($driver)) {
403 if ($submit_enabled) {
404 print $form->buttonsSaveCancel(
"Modify",
'');
414if ($mode ==
'test' && $user->admin) {
415 print $langs->trans(
'PrintTestDesc'.$driver).
"<br><br>\n";
417 print
'<div class="div-table-responsive-no-min">';
418 print
'<table class="noborder centpercent">';
419 if (!empty($driver)) {
420 require_once DOL_DOCUMENT_ROOT.
'/core/modules/printing/'.$driver.
'.modules.php';
421 $classname =
'printing_'.$driver;
422 $langs->load($driver);
423 $printer =
new $classname($db);
425 if (count($printer->getlistAvailablePrinters())) {
426 if ($printer->listAvailablePrinters() == 0) {
427 print $printer->resprint;
432 print $langs->trans(
'PleaseConfigureDriverfromList');
440if ($mode ==
'userconf' && $user->admin) {
441 print $langs->trans(
'PrintUserConfDesc'.$driver).
"<br><br>\n";
443 print
'<div class="div-table-responsive">';
444 print
'<table class="noborder centpercent">';
445 print
'<tr class="liste_titre">';
446 print
'<th>'.$langs->trans(
"User").
'</th>';
447 print
'<th>'.$langs->trans(
"PrintModule").
'</th>';
448 print
'<th>'.$langs->trans(
"PrintDriver").
'</th>';
449 print
'<th>'.$langs->trans(
"Printer").
'</th>';
450 print
'<th>'.$langs->trans(
"PrinterLocation").
'</th>';
451 print
'<th>'.$langs->trans(
"PrinterId").
'</th>';
452 print
'<th>'.$langs->trans(
"NumberOfCopy").
'</th>';
453 print
'<th class="center">'.$langs->trans(
"Delete").
'</th>';
455 $sql =
"SELECT p.rowid, p.printer_name, p.printer_location, p.printer_id, p.copy, p.module, p.driver, p.userid, u.login";
456 $sql .=
" FROM ".MAIN_DB_PREFIX.
"printing as p, ".MAIN_DB_PREFIX.
"user as u WHERE p.userid = u.rowid";
457 $resql = $db->query($sql);
458 while ($obj = $db->fetch_object($resql)) {
459 print
'<tr class="oddeven">';
460 print
'<td>'.$obj->login.
'</td>';
461 print
'<td>'.$obj->module.
'</td>';
462 print
'<td>'.$obj->driver.
'</td>';
463 print
'<td>'.$obj->printer_name.
'</td>';
464 print
'<td>'.$obj->printer_location.
'</td>';
465 print
'<td>'.$obj->printer_id.
'</td>';
466 print
'<td>'.$obj->copy.
'</td>';
467 print
'<td class="center">'.img_picto($langs->trans(
"Delete"),
'delete').
'</td>';
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()
Empty header.
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
showValueWithClipboardCPButton($valuetocopy, $showonlyonhover=1, $texttoshow='')
Create a button to copy $valuetocopy in the clipboard (for copy and paste feature).
yn($yesno, $case=1, $color=0)
Return yes or no in current language.
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_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_get_fiche_end($notab=0)
Return tab footer of a card.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_trunc($string, $size=40, $trunc='right', $stringencoding='UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '…' if string larger than length.
getDolGlobalString($key, $default='')
Return 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...
getSupportedOauth2Array()
Return array of tabs to used on pages to setup cron module.
oauthadmin_prepare_head()
Return array of tabs to used on pages to setup cron module.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.