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);
129$title = $langs->trans(
"TokenManager");
130$help_url =
'EN:Module_OAuth|FR:Module_OAuth_FR|ES:Módulo_OAuth_ES';
132llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-admin page-oauthlogintokens');
134$linkback =
'<a href="'.DOL_URL_ROOT.
'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToModuleList").
'</a>';
135print
load_fiche_titre($langs->trans(
'ConfigOAuth'), $linkback,
'title_setup');
145if ($mode ==
'setup' && $user->admin) {
146 print
'<span class="opacitymedium">'.$langs->trans(
"OAuthSetupForLogin").
"</span><br><br>\n";
149 $listinsetup = array();
150 foreach ($conf->global as $key => $val) {
151 if (!empty($val) && preg_match(
'/^OAUTH_.*_ID$/', $key)) {
152 $provider = preg_replace(
'/_ID$/',
'', $key);
153 $listinsetup[] = array(
157 $provider.
'_URLAUTHORIZE',
163 $oauthstateanticsrf = bin2hex(random_bytes(128 / 8));
166 if (!empty($listinsetup)) {
167 foreach ($listinsetup as $key) {
169 $keyforsupportedoauth2array = $key[0];
170 $keyforsupportedoauth2array = preg_replace(
'/^OAUTH_/',
'', $keyforsupportedoauth2array);
171 $keyforsupportedoauth2array = preg_replace(
'/_NAME$/',
'', $keyforsupportedoauth2array);
172 if (preg_match(
'/^.*-/', $keyforsupportedoauth2array)) {
173 $keybeforeprovider = preg_replace(
'/-.*$/',
'', $keyforsupportedoauth2array);
174 $keyforprovider = preg_replace(
'/^.*-/',
'', $keyforsupportedoauth2array);
176 $keybeforeprovider = $keyforsupportedoauth2array;
177 $keyforprovider =
'';
179 $keyforsupportedoauth2array = preg_replace(
'/-.*$/',
'', $keyforsupportedoauth2array);
180 $keyforsupportedoauth2array =
'OAUTH_'.$keyforsupportedoauth2array.
'_NAME';
182 $nameofservice = ucfirst(strtolower(empty($supportedoauth2array[$keyforsupportedoauth2array][
'callbackfile']) ?
'Unknown' : $supportedoauth2array[$keyforsupportedoauth2array][
'callbackfile']));
183 $nameofservice .= ($keyforprovider ?
'-'.$keyforprovider :
'');
184 $OAUTH_SERVICENAME = $nameofservice;
186 $keyforparamtenant =
'OAUTH_'.strtoupper(empty($supportedoauth2array[$keyforsupportedoauth2array][
'callbackfile']) ?
'Unknown' : $supportedoauth2array[$keyforsupportedoauth2array][
'callbackfile']).($keyforprovider ?
'-'.$keyforprovider :
'').
'_TENANT';
192 $state = $shortscope;
195 if ($keyforsupportedoauth2array ==
'OAUTH_GITHUB_NAME') {
200 $urltorenew = $urlwithroot.
'/core/modules/oauth/github_oauthcallback.php?shortscope='.urlencode($shortscope).
'&state='.urlencode($shortscope).
'&backtourl='.urlencode(DOL_URL_ROOT.
'/admin/oauthlogintokens.php');
201 $urltodelete = $urlwithroot.
'/core/modules/oauth/github_oauthcallback.php?action=delete&token='.
newToken().
'&backtourl='.urlencode(DOL_URL_ROOT.
'/admin/oauthlogintokens.php');
202 $urltocheckperms =
'https://github.com/settings/applications/';
203 } elseif ($keyforsupportedoauth2array ==
'OAUTH_GOOGLE_NAME') {
207 $urltorenew = $urlwithroot.
'/core/modules/oauth/google_oauthcallback.php?shortscope='.urlencode($shortscope).
'&state='.urlencode($state).
'-'.$oauthstateanticsrf.
'&backtourl='.urlencode(DOL_URL_ROOT.
'/admin/oauthlogintokens.php');
208 $urltodelete = $urlwithroot.
'/core/modules/oauth/google_oauthcallback.php?action=delete&token='.
newToken().
'&backtourl='.urlencode(DOL_URL_ROOT.
'/admin/oauthlogintokens.php');
209 $urltocheckperms =
'https://security.google.com/settings/security/permissions';
210 } elseif (!empty($supportedoauth2array[$keyforsupportedoauth2array][
'returnurl'])) {
211 $urltorenew = $urlwithroot.$supportedoauth2array[$keyforsupportedoauth2array][
'returnurl'].
'?shortscope='.urlencode($shortscope).
'&state='.urlencode($state).
'&backtourl='.urlencode(DOL_URL_ROOT.
'/admin/oauthlogintokens.php');
212 $urltodelete = $urlwithroot.$supportedoauth2array[$keyforsupportedoauth2array][
'returnurl'].
'?action=delete&token='.
newToken().
'&backtourl='.urlencode(DOL_URL_ROOT.
'/admin/oauthlogintokens.php');
213 $urltocheckperms =
'';
217 $urltocheckperms =
'';
221 $urltorenew .=
'&keyforprovider='.urlencode($keyforprovider);
224 $urltodelete .=
'&keyforprovider='.urlencode($keyforprovider);
230 require_once DOL_DOCUMENT_ROOT.
'/includes/OAuth/bootstrap.php';
232 $storage =
new DoliStorage($db, $conf, $keyforprovider,
getDolGlobalString($keyforparamtenant));
235 print
'<!-- '.$OAUTH_SERVICENAME.
' -->'.
"\n";
236 $tokenobj = $storage->retrieveAccessToken($OAUTH_SERVICENAME);
246 $refreshtoken =
false;
251 if (is_object($tokenobj)) {
252 $expire = ($tokenobj->getEndOfLife() !== $tokenobj::EOL_NEVER_EXPIRES && $tokenobj->getEndOfLife() !== $tokenobj::EOL_UNKNOWN && time() > ($tokenobj->getEndOfLife() - 30));
254 if ($key[1] !=
'' && $key[2] !=
'') {
255 if (is_object($tokenobj)) {
256 $refreshtoken = $tokenobj->getRefreshToken();
258 $endoflife = $tokenobj->getEndOfLife();
259 if ($endoflife == $tokenobj::EOL_NEVER_EXPIRES) {
260 $expiredat = $langs->trans(
"Never");
261 } elseif ($endoflife == $tokenobj::EOL_UNKNOWN) {
262 $expiredat = $langs->trans(
"Unknown");
271 print
'<form method="post" action="'.$_SERVER[
"PHP_SELF"].
'?mode=setup&driver='.$driver.
'" autocomplete="off">';
272 print
'<input type="hidden" name="token" value="'.newToken().
'">';
273 print
'<input type="hidden" name="action" value="setconst">';
274 print
'<input type="hidden" name="page_y" value="">';
276 print
'<div class="div-table-responsive-no-min">';
277 print
'<table class="noborder centpercent">'.
"\n";
280 $label = $langs->trans($keyforsupportedoauth2array);
281 print
'<tr class="liste_titre">';
282 print
'<th class="titlefieldcreate">';
283 print
img_picto(
'', $supportedoauth2array[$keyforsupportedoauth2array][
'picto'],
'class="pictofixedwidth"');
284 if ($label == $keyforsupportedoauth2array) {
285 print $supportedoauth2array[$keyforsupportedoauth2array][
'name'];
289 if ($keyforprovider) {
290 print
' (<b>'.$keyforprovider.
'</b>)';
292 print
' (<b>'.$langs->trans(
"NoName").
'</b>)';
299 print
'<tr class="oddeven">';
302 print $langs->trans(
"OAuthIDSecret").
'</td>';
304 print
'<span class="opacitymedium">'.$langs->trans(
"SeePreviousTab").
'</span>';
311 print
'<tr class="oddeven">';
312 print
'<td>'.$langs->trans(
"Scopes").
'</td>';
313 print
'<td colspan="2">';
315 print $currentscopes;
318 print
'<tr class="oddeven">';
321 print $langs->trans(
"IsTokenGenerated");
324 if ($keyforprovider !=
'Login') {
325 if (is_object($tokenobj)) {
326 print $form->textwithpicto(
yn(1), $langs->trans(
"HasAccessToken").
' : '.
dol_print_date($storage->date_modification,
'dayhour').
' state='.
dol_escape_htmltag($storage->state));
328 print
'<span class="opacitymedium">'.$langs->trans(
"NoAccessToken").
'</span>';
331 print
'<span class="opacitymedium">'.$langs->trans(
"TokenNotRequiredForOAuthLogin").
'</span>';
334 print
'<td width="50%">';
335 if ($keyforprovider !=
'Login') {
337 if (is_object($tokenobj)) {
340 print
'<a class="button smallpaddingimp reposition" href="'.$urltodelete.
'">'.$langs->trans(
'DeleteAccess').
'</a><br>';
342 print
'<span class="opacitymedium">'.$langs->trans(
'GoOnTokenProviderToDeleteToken').
'</span><br>';
347 print
'<a class="button smallpaddingimp reposition" href="'.$urltorenew.
'">'.$langs->trans(
'GetAccess').
'</a>';
348 print $form->textwithpicto(
'', $langs->trans(
'RequestAccess'));
352 if ($urltocheckperms) {
353 print
'<br>'.$langs->trans(
"ToCheckDeleteTokenOnProvider", $OAUTH_SERVICENAME).
': <a href="'.$urltocheckperms.
'" target="_'.strtolower($OAUTH_SERVICENAME).
'">'.$urltocheckperms.
'</a>';
359 print
'<tr class="oddeven">';
362 print $langs->trans(
"Token").
'</td>';
363 print
'<td colspan="2">';
365 if (is_object($tokenobj)) {
366 $tokentoshow = $tokenobj->getAccessToken();
378 if (is_object($tokenobj)) {
380 print
'<tr class="oddeven">';
383 print $langs->trans(
"TOKEN_REFRESH");
385 print
'<td colspan="2">';
391 print
'<tr class="oddeven">';
394 print $langs->trans(
"TOKEN_EXPIRED");
396 print
'<td colspan="2">';
402 print
'<tr class="oddeven">';
405 print $langs->trans(
"TOKEN_EXPIRE_AT");
407 print
'<td colspan="2">';
416 if (!empty($driver)) {
417 if ($submit_enabled) {
418 print $form->buttonsSaveCancel(
"Modify",
'');
428if ($mode ==
'test' && $user->admin) {
429 print $langs->trans(
'PrintTestDesc'.$driver).
"<br><br>\n";
431 print
'<div class="div-table-responsive-no-min">';
432 print
'<table class="noborder centpercent">';
433 if (!empty($driver)) {
434 require_once DOL_DOCUMENT_ROOT.
'/core/modules/printing/'.$driver.
'.modules.php';
435 $classname =
'printing_'.$driver;
436 $langs->load($driver);
437 $printer =
new $classname($db);
439 if (count($printer->getlistAvailablePrinters())) {
440 if ($printer->listAvailablePrinters() == 0) {
441 print $printer->resprint;
446 print $langs->trans(
'PleaseConfigureDriverfromList');
454if ($mode ==
'userconf' && $user->admin) {
455 print $langs->trans(
'PrintUserConfDesc'.$driver).
"<br><br>\n";
457 print
'<div class="div-table-responsive">';
458 print
'<table class="noborder centpercent">';
459 print
'<tr class="liste_titre">';
460 print
'<th>'.$langs->trans(
"User").
'</th>';
461 print
'<th>'.$langs->trans(
"PrintModule").
'</th>';
462 print
'<th>'.$langs->trans(
"PrintDriver").
'</th>';
463 print
'<th>'.$langs->trans(
"Printer").
'</th>';
464 print
'<th>'.$langs->trans(
"PrinterLocation").
'</th>';
465 print
'<th>'.$langs->trans(
"PrinterId").
'</th>';
466 print
'<th>'.$langs->trans(
"NumberOfCopy").
'</th>';
467 print
'<th class="center">'.$langs->trans(
"Delete").
'</th>';
469 $sql =
"SELECT p.rowid, p.printer_name, p.printer_location, p.printer_id, p.copy, p.module, p.driver, p.userid, u.login";
470 $sql .=
" FROM ".MAIN_DB_PREFIX.
"printing as p, ".MAIN_DB_PREFIX.
"user as u WHERE p.userid = u.rowid";
471 $resql = $db->query($sql);
472 while ($obj = $db->fetch_object($resql)) {
473 print
'<tr class="oddeven">';
474 print
'<td>'.$obj->login.
'</td>';
475 print
'<td>'.$obj->module.
'</td>';
476 print
'<td>'.$obj->driver.
'</td>';
477 print
'<td>'.$obj->printer_name.
'</td>';
478 print
'<td>'.$obj->printer_location.
'</td>';
479 print
'<td>'.$obj->printer_id.
'</td>';
480 print
'<td>'.$obj->copy.
'</td>';
481 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($title, $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).
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
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_get_fiche_end($notab=0)
Return tab footer of a card.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
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.