diff --git a/htdocs/admin/oauthlogintokens.php b/htdocs/admin/oauthlogintokens.php
index 413b57c9694..76c56e25207 100644
--- a/htdocs/admin/oauthlogintokens.php
+++ b/htdocs/admin/oauthlogintokens.php
@@ -156,253 +156,255 @@ if ($mode == 'setup' && $user->admin) {
$oauthstateanticsrf = bin2hex(random_bytes(128/8));
// $list is defined into oauth.lib.php to the list of supporter OAuth providers.
- foreach ($listinsetup as $key) {
- $supported = 0;
- $keyforsupportedoauth2array = $key[0]; // May be OAUTH_GOOGLE_NAME or OAUTH_GOOGLE_xxx_NAME
- $keyforsupportedoauth2array = preg_replace('/^OAUTH_/', '', $keyforsupportedoauth2array);
- $keyforsupportedoauth2array = preg_replace('/_NAME$/', '', $keyforsupportedoauth2array);
- if (preg_match('/^.*-/', $keyforsupportedoauth2array)) {
- $keybeforeprovider = preg_replace('/-.*$/', '', $keyforsupportedoauth2array);
- $keyforprovider = preg_replace('/^.*-/', '', $keyforsupportedoauth2array);
- } else {
- $keybeforeprovider = $keyforsupportedoauth2array;
- $keyforprovider = '';
- }
- $keyforsupportedoauth2array = preg_replace('/-.*$/', '', $keyforsupportedoauth2array);
- $keyforsupportedoauth2array = 'OAUTH_'.$keyforsupportedoauth2array.'_NAME';
+ if (!empty($listinsetup)) {
+ foreach ($listinsetup as $key) {
+ $supported = 0;
+ $keyforsupportedoauth2array = $key[0]; // May be OAUTH_GOOGLE_NAME or OAUTH_GOOGLE_xxx_NAME
+ $keyforsupportedoauth2array = preg_replace('/^OAUTH_/', '', $keyforsupportedoauth2array);
+ $keyforsupportedoauth2array = preg_replace('/_NAME$/', '', $keyforsupportedoauth2array);
+ if (preg_match('/^.*-/', $keyforsupportedoauth2array)) {
+ $keybeforeprovider = preg_replace('/-.*$/', '', $keyforsupportedoauth2array);
+ $keyforprovider = preg_replace('/^.*-/', '', $keyforsupportedoauth2array);
+ } else {
+ $keybeforeprovider = $keyforsupportedoauth2array;
+ $keyforprovider = '';
+ }
+ $keyforsupportedoauth2array = preg_replace('/-.*$/', '', $keyforsupportedoauth2array);
+ $keyforsupportedoauth2array = 'OAUTH_'.$keyforsupportedoauth2array.'_NAME';
- $OAUTH_SERVICENAME = (empty($supportedoauth2array[$keyforsupportedoauth2array]['name']) ? 'Unknown' : $supportedoauth2array[$keyforsupportedoauth2array]['name'].($keyforprovider ? '-'.$keyforprovider : ''));
+ $OAUTH_SERVICENAME = (empty($supportedoauth2array[$keyforsupportedoauth2array]['name']) ? 'Unknown' : $supportedoauth2array[$keyforsupportedoauth2array]['name'].($keyforprovider ? '-'.$keyforprovider : ''));
- $shortscope = '';
- if (getDolGlobalString($key[4])) {
- $shortscope = getDolGlobalString($key[4]);
- }
- $state = $shortscope; // TODO USe a better state
+ $shortscope = '';
+ if (getDolGlobalString($key[4])) {
+ $shortscope = getDolGlobalString($key[4]);
+ }
+ $state = $shortscope; // TODO USe a better state
- // Define $urltorenew, $urltodelete, $urltocheckperms
- if ($keyforsupportedoauth2array == 'OAUTH_GITHUB_NAME') {
- // List of keys that will be converted into scopes (from constants 'SCOPE_state_in_uppercase' in file of service).
- // We pass this param list in to 'state' because we need it before and after the redirect.
+ // Define $urltorenew, $urltodelete, $urltocheckperms
+ if ($keyforsupportedoauth2array == 'OAUTH_GITHUB_NAME') {
+ // List of keys that will be converted into scopes (from constants 'SCOPE_state_in_uppercase' in file of service).
+ // We pass this param list in to 'state' because we need it before and after the redirect.
- // Note: github does not accept csrf key inside the state parameter (only known values)
- $urltorenew = $urlwithroot.'/core/modules/oauth/github_oauthcallback.php?shortscope='.urlencode($shortscope).'&state='.urlencode($shortscope).'&backtourl='.urlencode(DOL_URL_ROOT.'/admin/oauthlogintokens.php');
- $urltodelete = $urlwithroot.'/core/modules/oauth/github_oauthcallback.php?action=delete&token='.newToken().'&backtourl='.urlencode(DOL_URL_ROOT.'/admin/oauthlogintokens.php');
- $urltocheckperms = 'https://github.com/settings/applications/';
- } elseif ($keyforsupportedoauth2array == 'OAUTH_GOOGLE_NAME') {
- // List of keys that will be converted into scopes (from constants 'SCOPE_state_in_uppercase' in file of service).
- // List of scopes for Google are here: https://developers.google.com/identity/protocols/oauth2/scopes
- // We pass this key list into the param 'state' because we need it before and after the redirect.
- $urltorenew = $urlwithroot.'/core/modules/oauth/google_oauthcallback.php?shortscope='.urlencode($shortscope).'&state='.urlencode($state).'-'.$oauthstateanticsrf.'&backtourl='.urlencode(DOL_URL_ROOT.'/admin/oauthlogintokens.php');
- $urltodelete = $urlwithroot.'/core/modules/oauth/google_oauthcallback.php?action=delete&token='.newToken().'&backtourl='.urlencode(DOL_URL_ROOT.'/admin/oauthlogintokens.php');
- $urltocheckperms = 'https://security.google.com/settings/security/permissions';
- } elseif (!empty($supportedoauth2array[$keyforsupportedoauth2array]['returnurl'])) {
- $urltorenew = $urlwithroot.$supportedoauth2array[$keyforsupportedoauth2array]['returnurl'].'?shortscope='.urlencode($shortscope).'&state='.urlencode($state).'&backtourl='.urlencode(DOL_URL_ROOT.'/admin/oauthlogintokens.php');
- $urltodelete = $urlwithroot.$supportedoauth2array[$keyforsupportedoauth2array]['returnurl'].'?action=delete&token='.newToken().'&backtourl='.urlencode(DOL_URL_ROOT.'/admin/oauthlogintokens.php');
- $urltocheckperms = '';
- } else {
- $urltorenew = '';
- $urltodelete = '';
- $urltocheckperms = '';
- }
+ // Note: github does not accept csrf key inside the state parameter (only known values)
+ $urltorenew = $urlwithroot.'/core/modules/oauth/github_oauthcallback.php?shortscope='.urlencode($shortscope).'&state='.urlencode($shortscope).'&backtourl='.urlencode(DOL_URL_ROOT.'/admin/oauthlogintokens.php');
+ $urltodelete = $urlwithroot.'/core/modules/oauth/github_oauthcallback.php?action=delete&token='.newToken().'&backtourl='.urlencode(DOL_URL_ROOT.'/admin/oauthlogintokens.php');
+ $urltocheckperms = 'https://github.com/settings/applications/';
+ } elseif ($keyforsupportedoauth2array == 'OAUTH_GOOGLE_NAME') {
+ // List of keys that will be converted into scopes (from constants 'SCOPE_state_in_uppercase' in file of service).
+ // List of scopes for Google are here: https://developers.google.com/identity/protocols/oauth2/scopes
+ // We pass this key list into the param 'state' because we need it before and after the redirect.
+ $urltorenew = $urlwithroot.'/core/modules/oauth/google_oauthcallback.php?shortscope='.urlencode($shortscope).'&state='.urlencode($state).'-'.$oauthstateanticsrf.'&backtourl='.urlencode(DOL_URL_ROOT.'/admin/oauthlogintokens.php');
+ $urltodelete = $urlwithroot.'/core/modules/oauth/google_oauthcallback.php?action=delete&token='.newToken().'&backtourl='.urlencode(DOL_URL_ROOT.'/admin/oauthlogintokens.php');
+ $urltocheckperms = 'https://security.google.com/settings/security/permissions';
+ } elseif (!empty($supportedoauth2array[$keyforsupportedoauth2array]['returnurl'])) {
+ $urltorenew = $urlwithroot.$supportedoauth2array[$keyforsupportedoauth2array]['returnurl'].'?shortscope='.urlencode($shortscope).'&state='.urlencode($state).'&backtourl='.urlencode(DOL_URL_ROOT.'/admin/oauthlogintokens.php');
+ $urltodelete = $urlwithroot.$supportedoauth2array[$keyforsupportedoauth2array]['returnurl'].'?action=delete&token='.newToken().'&backtourl='.urlencode(DOL_URL_ROOT.'/admin/oauthlogintokens.php');
+ $urltocheckperms = '';
+ } else {
+ $urltorenew = '';
+ $urltodelete = '';
+ $urltocheckperms = '';
+ }
- if ($urltorenew) {
- $urltorenew .= '&keyforprovider='.urlencode($keyforprovider);
- }
- if ($urltodelete) {
- $urltodelete .= '&keyforprovider='.urlencode($keyforprovider);
- }
+ if ($urltorenew) {
+ $urltorenew .= '&keyforprovider='.urlencode($keyforprovider);
+ }
+ if ($urltodelete) {
+ $urltodelete .= '&keyforprovider='.urlencode($keyforprovider);
+ }
- // Show value of token
- $tokenobj = null;
- // Token
- require_once DOL_DOCUMENT_ROOT.'/includes/OAuth/bootstrap.php';
- // Dolibarr storage
- $storage = new DoliStorage($db, $conf, $keyforprovider);
- try {
- // $OAUTH_SERVICENAME is for example 'Google-keyforprovider'
- print ''."\n";
- $tokenobj = $storage->retrieveAccessToken($OAUTH_SERVICENAME);
- //print $storage->token.'
';
- //print $tokenobj->getExtraParams()['id_token'].'
';
- //print $tokenobj->getAccessToken().'
';
- } catch (Exception $e) {
- // Return an error if token not found
- //print $e->getMessage();
- }
+ // Show value of token
+ $tokenobj = null;
+ // Token
+ require_once DOL_DOCUMENT_ROOT.'/includes/OAuth/bootstrap.php';
+ // Dolibarr storage
+ $storage = new DoliStorage($db, $conf, $keyforprovider);
+ try {
+ // $OAUTH_SERVICENAME is for example 'Google-keyforprovider'
+ print ''."\n";
+ $tokenobj = $storage->retrieveAccessToken($OAUTH_SERVICENAME);
+ //print $storage->token.'
';
+ //print $tokenobj->getExtraParams()['id_token'].'
';
+ //print $tokenobj->getAccessToken().'
';
+ } catch (Exception $e) {
+ // Return an error if token not found
+ //print $e->getMessage();
+ }
- // Set other properties
- $refreshtoken = false;
- $expiredat = '';
+ // Set other properties
+ $refreshtoken = false;
+ $expiredat = '';
- $expire = false;
- // Is token expired or will token expire in the next 30 seconds
- if (is_object($tokenobj)) {
- $expire = ($tokenobj->getEndOfLife() !== $tokenobj::EOL_NEVER_EXPIRES && $tokenobj->getEndOfLife() !== $tokenobj::EOL_UNKNOWN && time() > ($tokenobj->getEndOfLife() - 30));
- }
- if ($key[1] != '' && $key[2] != '') {
+ $expire = false;
+ // Is token expired or will token expire in the next 30 seconds
if (is_object($tokenobj)) {
- $refreshtoken = $tokenobj->getRefreshToken();
+ $expire = ($tokenobj->getEndOfLife() !== $tokenobj::EOL_NEVER_EXPIRES && $tokenobj->getEndOfLife() !== $tokenobj::EOL_UNKNOWN && time() > ($tokenobj->getEndOfLife() - 30));
+ }
+ if ($key[1] != '' && $key[2] != '') {
+ if (is_object($tokenobj)) {
+ $refreshtoken = $tokenobj->getRefreshToken();
- $endoflife = $tokenobj->getEndOfLife();
- if ($endoflife == $tokenobj::EOL_NEVER_EXPIRES) {
- $expiredat = $langs->trans("Never");
- } elseif ($endoflife == $tokenobj::EOL_UNKNOWN) {
- $expiredat = $langs->trans("Unknown");
- } else {
- $expiredat = dol_print_date($endoflife, "dayhour", 'tzuserrel');
+ $endoflife = $tokenobj->getEndOfLife();
+ if ($endoflife == $tokenobj::EOL_NEVER_EXPIRES) {
+ $expiredat = $langs->trans("Never");
+ } elseif ($endoflife == $tokenobj::EOL_UNKNOWN) {
+ $expiredat = $langs->trans("Unknown");
+ } else {
+ $expiredat = dol_print_date($endoflife, "dayhour", 'tzuserrel');
+ }
}
}
- }
- $submit_enabled = 0;
+ $submit_enabled = 0;
- print '