diff --git a/workflow/engine/classes/class.sso.php b/workflow/engine/classes/class.sso.php new file mode 100644 index 000000000..d099b3bcd --- /dev/null +++ b/workflow/engine/classes/class.sso.php @@ -0,0 +1,74 @@ +initRBAC(); + $server = $_SERVER['SERVER_SOFTWARE']; + $webserver = explode("/", $server); + if(isset($_SERVER['REMOTE_USER']) && $_SERVER['REMOTE_USER'] !=''){ + // IIS Verification + if (!is_array($webserver) || (is_array($webserver) && ($webserver[0] == 'Microsoft-IIS'))){ + $userFull = $_SERVER['REMOTE_USER']; + $userPN = explode("\\", $userFull); + if (is_array($userPN)){ + $user = $userPN[1]; + } else { + $user = $userFull; + } + } else { + $userFull = $_SERVER['REMOTE_USER']; + $user = $_SERVER['REMOTE_USER']; + } + // End IIS Verification + + $resVerifyUser = $RBAC->verifyUser($user); + if ($resVerifyUser == 0) { + // Here we are checking if the automatic user Register is enabled, ioc return -1 + $fakepswd = G::generate_password(); + $res = $RBAC->checkAutomaticRegister($user, $fakepswd); + if ($res === -1) { + return false; // No successful auto register, skipping the auto register and back to normal login form + } + $RBAC->verifyUser($user); + } + if (!isset($RBAC->userObj->fields['USR_STATUS']) || $RBAC->userObj->fields['USR_STATUS'] == 0) { + $errLabel = 'ID_USER_INACTIVE'; + G::SendTemporalMessage($errLabel, "warning"); + return false; + } + $sSQL = "SELECT USR_UID FROM USERS WHERE USR_USERNAME = '$user' "; + $aResSQL = executeQuery($sSQL); + if(sizeof($aResSQL)){ + $nUserId = $aResSQL[1]['USR_UID']; + $RBAC->singleSignOn = true; + $RBAC->userObj->fields['USR_UID'] = $nUserId; + $RBAC->userObj->fields['USR_USERNAME'] = $user; + $res = true; + } + } + return $res; + } + } +?> \ No newline at end of file diff --git a/workflow/engine/methods/login/login.php b/workflow/engine/methods/login/login.php index d8d9aadea..83aa96f16 100755 --- a/workflow/engine/methods/login/login.php +++ b/workflow/engine/methods/login/login.php @@ -103,6 +103,22 @@ if (isset ($_SESSION['USER_LOGGED'])) { // Execute SSO trigger $pluginRegistry =& PMPluginRegistry::getSingleton(); if (defined('PM_SINGLE_SIGN_ON')) { + //Check in SSO class + G::LoadClass("sso"); + $oSso = new ssoClass(); + $res = $oSso->ssocVerifyUser(); + if($res){ + // Start new session + @session_destroy(); + session_start(); + session_regenerate_id(); + + // Authenticate + require_once 'authentication.php'; + + die(); + } + //Check in SSO class if ($pluginRegistry->existsTrigger(PM_SINGLE_SIGN_ON)) { if ($pluginRegistry->executeTriggers(PM_SINGLE_SIGN_ON, null)) { // Start new session