179 lines
8.9 KiB
PHP
179 lines
8.9 KiB
PHP
|
<? /*<[ Interval = 1800 ]>*/
|
||
|
|
||
|
require("../classes/Framework.php");
|
||
|
set_time_limit(0);
|
||
|
|
||
|
function getDataFromHTTP($URL, $contend = "", $requestTyp = "application/text")
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
if($contend != "")
|
||
|
{
|
||
|
return file_get_contents($URL, true, stream_context_create(array('http' => array('header' => 'Content-type: '.$requestTyp, 'method' => 'POST', 'timeout' => 2, 'content' => $contend))));
|
||
|
}else{
|
||
|
return file_get_contents($URL);
|
||
|
}
|
||
|
} catch (Exception $e) {
|
||
|
echo "(HTTP REQUEST) error while conntect to remote server. : ".$URL;
|
||
|
dolog("FriendFix", "(HTTP REQUEST) error while conntect to remote server. : ".$URL);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function sendInworldIM($fromUUID, $toUUID, $fromName, $targetURL, $text)
|
||
|
{
|
||
|
$rawXML = "<?xml version=\"1.0\" encoding=\"utf-8\"?><methodCall><methodName>grid_instant_message</methodName><params><param><value><struct><member><name>position_x</name><value><string>0</string></value></member><member><name>position_y</name><value><string>0</string></value></member><member><name>position_z</name><value><string>0</string></value></member><member><name>to_agent_id</name><value><string>".$toUUID."</string></value></member><member><name>from_agent_session</name><value><string>00000000-0000-0000-0000-000000000000</string></value></member><member><name>im_session_id</name><value><string>".$fromUUID."</string></value></member><member><name>from_agent_name</name><value><string>".$fromName."</string></value></member><member><name>from_agent_id</name><value><string>".$fromUUID."</string></value></member><member><name>binary_bucket</name><value><string>AA==</string></value></member><member><name>region_handle</name><value><i4>0</i4></value></member><member><name>region_id</name><value><string>00000000-0000-0000-0000-000000000000</string></value></member><member><name>parent_estate_id</name><value><string>1</string></value></member><member><name>timestamp</name><value><string>".time()."</string></value></member><member><name>dialog</name><value><string>AA==</string></value></member><member><name>offline</name><value><string>AA==</string></value></member><member><name>from_group</name><value><string>FALSE</string></value></member><member><name>message</name><value><string>".$text."</string></value></member></struct></value></param></params></methodCall>";
|
||
|
getDataFromHTTP($targetURL, $rawXML, "text/xml");
|
||
|
}
|
||
|
|
||
|
function getFullGridDomainList()
|
||
|
{
|
||
|
$Domains = array();
|
||
|
$gridUsers = $GLOBALS[MySql]->query("SELECT userID FROM ".$GLOBALS[GridSettings]["robustdb"].".griduser", array($LocalUserUUID));
|
||
|
|
||
|
while($UserData = $gridUsers->fetch())
|
||
|
{
|
||
|
$found = FALSE;
|
||
|
$data = explode(";", $UserData[userID]);
|
||
|
$userDomain = strtolower(trim($data[1]));
|
||
|
|
||
|
foreach($Domains as $domain)
|
||
|
if($userDomain == $domain)
|
||
|
{
|
||
|
$found = TRUE;
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
if($found == FALSE && $userDomain != "")
|
||
|
array_push($Domains, $userDomain);
|
||
|
}
|
||
|
|
||
|
return $Domains;
|
||
|
}
|
||
|
|
||
|
function getUserInfo($homeURI, $UUID)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
$homeURIParts = parse_url($homeURI);
|
||
|
$HTTPUSerInfo = new SimpleXMLElement(getDataFromHTTP("http://".$homeURIParts['host'].":".$homeURIParts['port'], "<?xml version=\"1.0\" encoding=\"utf-8\"?><methodCall><methodName>get_user_info</methodName><params><param><value><struct><member><name>userID</name><value><string>".$UUID."</string></value></member></struct></value></param></params></methodCall>", "application/xml"));
|
||
|
$HTTPUSerInfo = $HTTPUSerInfo->params->param->value->struct->member;
|
||
|
|
||
|
$UserInfoData = array();
|
||
|
foreach($HTTPUSerInfo as $userRequestElement)
|
||
|
{
|
||
|
if($userRequestElement->value->string->__toString() != "")
|
||
|
$UserInfoData[strtoupper($userRequestElement->name->__toString())] = $userRequestElement->value->string->__toString();
|
||
|
|
||
|
if($userRequestElement->value->i4->__toString() != "")
|
||
|
$UserInfoData[strtoupper($userRequestElement->name->__toString())] = $userRequestElement->value->i4->__toString();
|
||
|
}
|
||
|
|
||
|
return $UserInfoData;
|
||
|
} catch (Exception $e) {
|
||
|
echo "(getUserInfo) error while getting data";
|
||
|
dolog("FriendFix", "(getUserInfo) error while getting data");
|
||
|
}
|
||
|
|
||
|
$UserInfoData = array();
|
||
|
$UserInfoData['RESULT'] = "failure";
|
||
|
|
||
|
return $UserInfoData;
|
||
|
}
|
||
|
|
||
|
function tryToGetUserDataFromHomeURIList($homeURLs, $UUID)
|
||
|
{
|
||
|
foreach($homeURLs as $url)
|
||
|
{
|
||
|
$tempUserData = getUserInfo($url, $UUID);
|
||
|
$tempUserData['HOMEURL'] = $url;
|
||
|
if($tempUserData['RESULT'] != "failure")
|
||
|
{
|
||
|
return $tempUserData;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return array();
|
||
|
}
|
||
|
|
||
|
$AllGrids = HTTP_Request($GLOBALS[Sqlite]->setting("SMTP.ORIGIN")."/opensim/triggers", "pass=".$GLOBALS[Sqlite]->setting("MANAGER.AUTH.PASS"), "", 3, "application/x-www-form-urlencoded");
|
||
|
if (empty($AllGrids))
|
||
|
{
|
||
|
dolog("FriendFix", "Grids konnten nicht abgerufen werden!");
|
||
|
die("Grids konnten nicht abgerufen werden!");
|
||
|
}
|
||
|
$AllGrids = json_decode($AllGrids, true);
|
||
|
dolog("FriendFix", count($AllGrids)." Grids gefunden...");
|
||
|
|
||
|
for ($z = 0; $z < count($AllGrids); ++$z)
|
||
|
{
|
||
|
RequestGridSpecificData($GLOBALS[Sqlite]->setting("SMTP.ORIGIN"), $AllGrids[$z]);
|
||
|
|
||
|
if ($GLOBALS[GridSettings]["hasrobust"] == "1")
|
||
|
{
|
||
|
if(is_file(dirname($GLOBALS[GridSettings]["osbasepath"])."/friends.txt"))
|
||
|
{
|
||
|
$FriendFixFile = explode("\n", file_get_contents(dirname($GLOBALS[GridSettings]["osbasepath"])."/friends.txt"));
|
||
|
|
||
|
foreach ($FriendFixFile as $rawLine)
|
||
|
{
|
||
|
$DataLine = trim($rawLine);
|
||
|
$LineData = explode(";", $DataLine);
|
||
|
|
||
|
if(count($LineData) == 5)
|
||
|
{
|
||
|
$LocalUserUUID = $LineData[1];
|
||
|
$RemoteUserUUID = $LineData[0];
|
||
|
$LocalAvatarName = "Unknown User";
|
||
|
|
||
|
$AvatarData = $GLOBALS[MySql]->query("SELECT * FROM ".$GLOBALS[GridSettings]["robustdb"].".useraccounts WHERE PrincipalID = '{0}' LIMIT 1", array($LocalUserUUID))->fetch();
|
||
|
$RemoteUserData = $GLOBALS[MySql]->query("SELECT * FROM ".$GLOBALS[GridSettings]["robustdb"].".griduser WHERE userID LIKE '{0}' LIMIT 1", array($RemoteUserUUID."%"))->fetch();
|
||
|
|
||
|
if(!empty($AvatarData))
|
||
|
$LocalAvatarName = $AvatarData[FirstName]." ".$AvatarData[LastName];
|
||
|
|
||
|
if (!empty($RemoteUserData))
|
||
|
{
|
||
|
$DBUserData = explode(";", $RemoteUserData[UserID]);
|
||
|
|
||
|
if(count($DBUserData) == 3)
|
||
|
{
|
||
|
$RemoteUserString = $LineData[0].";".$DBUserData[1].";".$DBUserData[2].";".$LineData[4];
|
||
|
$FriendData = $GLOBALS[MySql]->query("SELECT * FROM ".$GLOBALS[GridSettings]["robustdb"].".friends WHERE Friend LIKE '{0}' LIMIT 1", array($RemoteUserUUID."%"))->fetch();
|
||
|
|
||
|
if(empty($FriendData))
|
||
|
{
|
||
|
echo "Generiere freundschaft für ".$LocalUserUUID."(".$LocalAvatarName.")<->".$RemoteUserUUID."(".$DBUserData[2]."@".$DBUserData[1].").\n";
|
||
|
dolog("FriendFix", "Generiere freundschaft für ".$LocalUserUUID."(".$LocalAvatarName.")<->".$RemoteUserUUID."(".$DBUserData[2]."@".$DBUserData[1].").");
|
||
|
sendInworldIM("00000000-0000-0000-0000-000000000000", $LocalUserUUID, "GRID SERVICE", $GLOBALS[GridSettings][robust], "Es wurde eine Freundschaft für '".$DBUserData[2]." @ ".$DBUserData[1]."' generiert.");
|
||
|
|
||
|
$GLOBALS[MySql]->query("INSERT INTO ".$GLOBALS[GridSettings]["robustdb"].".friends (PrincipalID, Friend) VALUES ('{0}', '{1}')", array($LocalUserUUID, $RemoteUserString));
|
||
|
$GLOBALS[MySql]->query("INSERT INTO ".$GLOBALS[GridSettings]["robustdb"].".friends (PrincipalID, Friend) VALUES ('{0}', '{1}')", array($RemoteUserString, $LocalUserUUID));
|
||
|
}
|
||
|
}
|
||
|
}else{
|
||
|
echo "Kann User ".$RemoteUserUUID." für ".$LocalUserUUID."(".$LocalAvatarName.")<->".$RemoteUserUUID." nicht in der DB finden.\n";
|
||
|
dolog("FriendFix", "Kann User ".$RemoteUserUUID." für ".$LocalUserUUID."(".$LocalAvatarName.")<->".$RemoteUserUUID." nicht in der DB finden.");
|
||
|
|
||
|
$userData = tryToGetUserDataFromHomeURIList(getFullGridDomainList(), $RemoteUserUUID);
|
||
|
|
||
|
if(count($userData) != 0)
|
||
|
{
|
||
|
echo "Erfolgreich Remotedaten zu User ".$RemoteUserUUID." abrufen: ".str_replace("\r", "", str_replace("\n", "", print_r($userData, true)))."\n";
|
||
|
dolog("FriendFix", "Erfolgreich Remotedaten zu User ".$RemoteUserUUID." abrufen: ".str_replace("\r", "", str_replace("\n", "", print_r($userData, true))));
|
||
|
|
||
|
//echo $RemoteUserUUID.";".$userData['HOMEURL'].";".$userData['USER_FIRSTNAME']." ".$userData['USER_LASTNAME'];
|
||
|
$GLOBALS[MySql]->query("INSERT INTO ".$GLOBALS[GridSettings]["robustdb"].".griduser (UserID) VALUES ('{0}')", array($RemoteUserUUID.";".$userData['HOMEURL'].";".$userData['USER_FIRSTNAME']." ".$userData['USER_LASTNAME']));
|
||
|
}else{
|
||
|
echo "Kann keine Remotedaten für User ".$RemoteUserUUID." abrufen. Dieser User ist keinem Grid bekannt.\n";
|
||
|
dolog("FriendFix", "Kann keine Remotedaten für User ".$RemoteUserUUID." abrufen. Dieser User ist keinem Grid bekannt.");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}else{
|
||
|
echo "Konnte keine Daten für das Grid '".$AllGrids[$z]."' finden.";
|
||
|
dolog("FriendFix", "Konnte keine Daten für das Grid '".$AllGrids[$z]."' finden.");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
?>
|