function SSO_ActivateUser($id, $entropy, $info, $created = false, $automate = false, $activatesession = true) { global $sso_rng, $sso_db, $sso_db_users, $sso_db_user_tags, $sso_db_tags, $sso_provider, $sso_ipaddr, $sso_settings; try { // Create or update the user. $row = $sso_db->GetRow("SELECT", array("*", "FROM" => "?", "WHERE" => "provider_name = ? AND provider_id = ?"), $sso_db_users, $sso_provider, $id); if ($row) { // Check for the account locked tag. if (SSO_IsLockedUser($row->id)) { return false; } $info2 = SSO_LoadDecryptedUserInfo($row); SSO_AddGeoIPMapFields($info2); foreach ($info as $key => $val) { $info2[$key] = $val; } $info3 = SSO_CreateEncryptedUserInfo($info2); $sso_db->Query("UPDATE", array($sso_db_users, array("lastipaddr" => $sso_ipaddr["ipv6"], "lastactivated" => CSDB::ConvertToDBTime(time()), "info" => serialize($info2), "info2" => $info3), "WHERE" => "id = ?"), $row->id); } else { $extra = $sso_rng->GenerateString(64); $info2 = array(); SSO_AddGeoIPMapFields($info2); if (isset($sso_settings[""]["first_activated_map"]) && SSO_IsField($sso_settings[""]["first_activated_map"])) { $info2[$sso_settings[""]["first_activated_map"]] = CSDB::ConvertToDBTime(time()); } if (isset($sso_settings[""]["created_map"]) && SSO_IsField($sso_settings[""]["created_map"])) { $info2[$sso_settings[""]["created_map"]] = CSDB::ConvertToDBTime($created !== false ? $created : time()); } foreach ($info as $key => $val) { $info2[$key] = $val; } $info3 = SSO_CreateEncryptedUserInfo($info2); $sso_db->Query("INSERT", array($sso_db_users, array("provider_name" => $sso_provider, "provider_id" => $id, "session_extra" => $extra, "version" => 0, "lastipaddr" => $sso_ipaddr["ipv6"], "lastactivated" => CSDB::ConvertToDBTime(time()), "info" => serialize($info2), "info2" => $info3))); $row = $sso_db->GetRow("SELECT", array("*", "FROM" => "?", "WHERE" => "provider_name = ? AND provider_id = ?"), $sso_db_users, $sso_provider, $id); } if ($activatesession) { SSO_ActivateUserSession($row, $automate); } } catch (Exception $e) { // Don't do anything here. Just catch the database exception and let the code fall through. // It should be nearly impossible to get here in the first place. } return false; }
} $sso_session_info2 = unserialize($sso_sessionrow2->info); if ($sso_session_info2["validated"]) { SSO_DisplayError("The new session ID is already validated."); } $sso_automate = $sso_session_info2["automate"]; $sso_userrow = $sso_db->GetRow("SELECT", array("*", "FROM" => "?", "WHERE" => "id = ?"), $sso_db_users, $sso_sessionrow2->user_id); if ($sso_userrow === false) { SSO_DisplayError("The new session ID maps to an invalid user. Most likely cause: Internal error."); } $sso_provider = $sso_userrow->provider_name; if (!isset($sso_providers[$sso_provider])) { SSO_DisplayError("The session ID maps to an invalid provider."); } $sso_protectedfields = $sso_providers[$sso_provider]->GetProtectedFields(); $sso_user_info = SSO_LoadDecryptedUserInfo($sso_userrow); // Load API key field mapping. $sso_missingfields = array(); foreach ($sso_apikey_info["field_map"] as $key => $info) { if (!isset($sso_user_info[$key]) && (!isset($sso_protectedfields[$key]) || !$sso_protectedfields[$key])) { $sso_missingfields[$key] = $key; } } $sso_target_url = SSO_ROOT_URL . "/" . $sso_indexphp . "?sso_action=sso_validate" . (isset($_REQUEST["lang"]) ? "&lang=" . urlencode($_REQUEST["lang"]) : ""); // A developer can optionally hook into the SSO server here. // The "version" of the user account is checked and the user updates their account prior to continuing. if (file_exists(SSO_ROOT_PATH . "/index_hook.php")) { require_once SSO_ROOT_PATH . "/index_hook.php"; } else { SSO_ValidateUser(); SSO_DisplayError("Unable to validate the new session. Most likely cause: Internal error.");
} if (!count($optdesc)) { $optdesc[] = BB_Translate("Latest Accounts"); } $desc = "<ul><li>" . implode("</li><li>", $optdesc) . "</li></ul>"; SSO_LoadFieldSearchOrder(); $rows = array(); $sqlopts = array("u.*", "FROM" => implode(", ", $sqlfrom), "LIMIT" => "300"); if (count($sqlwhere)) { $sqlopts["WHERE"] = implode(" AND ", $sqlwhere); } else { $sqlopts["ORDER BY"] = "u.id DESC"; } $result = $sso_db->Query("SELECT", $sqlopts, $sqlvars); while ($row = $result->NextRow()) { $userinfo = SSO_LoadDecryptedUserInfo($row); $user = ""; foreach ($sso_settings[""]["search_order"] as $key => $display) { $desc2 = false; $val = false; if ($key === "id") { $desc2 = "Account ID"; $val = $row->id; } else { if ($key === "provider_name") { $desc2 = "Provider Name"; $val = $row->provider_name . (isset($sso_providers[$row->provider_name]) ? " - " . $sso_providers[$row->provider_name]->DisplayName() : ""); } else { if ($key === "provider_id") { $desc2 = "Provider ID"; $val = $row->provider_id;