230 lines
5.8 KiB
PHP
230 lines
5.8 KiB
PHP
|
<?php
|
||
|
class OpenSim
|
||
|
{
|
||
|
public function isLoginValid($name, $password)
|
||
|
{
|
||
|
global $RUNTIME;
|
||
|
|
||
|
$statementUser = $RUNTIME['PDO']->prepare("SELECT PrincipalID FROM UserAccounts WHERE FirstName = ? AND LastName = ? LIMIT 1");
|
||
|
$statementUser->execute(explode(" ", trim($name)));
|
||
|
|
||
|
while($rowUser = $statementUser->fetch())
|
||
|
{
|
||
|
$statementAuth = $RUNTIME['PDO']->prepare("SELECT passwordHash,passwordSalt FROM auth WHERE UUID = ? LIMIT 1");
|
||
|
$statementAuth->execute(array($rowUser['PrincipalID']));
|
||
|
|
||
|
while($rowAuth = $statementAuth->fetch())
|
||
|
{
|
||
|
$passwordCorrect = false;
|
||
|
if(strlen($rowAuth['passwordHash']) == 32) {
|
||
|
if(md5(md5($password).":".$rowAuth['passwordSalt']) == $rowAuth['passwordHash']) {
|
||
|
$passwordCorrect = true;
|
||
|
|
||
|
$newHash = password_hash($password, PASSWORD_ARGON2ID);
|
||
|
$updateHash = $RUNTIME['PDO']->prepare("UPDATE auth SET passwordHash = ?, passwordSalt = ? WHERE UUID = ?");
|
||
|
$updateHash->execute(array($newHash, '', $rowUser['PrincipalID']));
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
$passwordCorrect = password_verify($password, $rowAuth['passwordHash']);
|
||
|
}
|
||
|
|
||
|
return $passwordCorrect;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
public function getUserName($userID)
|
||
|
{
|
||
|
global $RUNTIME;
|
||
|
|
||
|
if($userID == "00000000-0000-0000-0000-000000000000")
|
||
|
return "Unknown User";
|
||
|
|
||
|
if(isset($RUNTIME['CACHE']['USERNAME'][$userID]))
|
||
|
return $RUNTIME['CACHE']['USERNAME'][$userID];
|
||
|
|
||
|
$statementUser = $RUNTIME['PDO']->prepare("SELECT FirstName,LastName FROM UserAccounts WHERE PrincipalID = ?");
|
||
|
$statementUser->execute(array($userID));
|
||
|
|
||
|
while($rowUser = $statementUser->fetch())
|
||
|
{
|
||
|
$RUNTIME['CACHE']['USERNAME'][$userID] = $rowUser['FirstName']." ".$rowUser['LastName'];
|
||
|
return $rowUser['FirstName']." ".$rowUser['LastName'];
|
||
|
}
|
||
|
|
||
|
$statementGridUser = $RUNTIME['PDO']->prepare("SELECT UserID FROM GridUser");
|
||
|
$statementGridUser->execute(array($userID));
|
||
|
|
||
|
while($rowGridUser = $statementGridUser->fetch())
|
||
|
{
|
||
|
$UserData = explode(";", $rowGridUser['UserID']);
|
||
|
|
||
|
if(count($UserData) >= 3)
|
||
|
{
|
||
|
$DBUserID = $UserData[0];
|
||
|
$DBUserName = $UserData[2];
|
||
|
|
||
|
$RUNTIME['CACHE']['USERNAME'][$userID] = $DBUserName;
|
||
|
|
||
|
if($DBUserID == $userID)
|
||
|
return $DBUserName;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$statementFriends = $RUNTIME['PDO']->prepare("SELECT PrincipalID FROM Friends");
|
||
|
$statementFriends->execute(array($userID));
|
||
|
|
||
|
while($rowFriends = $statementFriends->fetch())
|
||
|
{
|
||
|
$UserData = explode(";", $rowFriends['PrincipalID']);
|
||
|
|
||
|
if(count($UserData) == 4)
|
||
|
{
|
||
|
$DBUserID = $UserData[0];
|
||
|
$DBUserName = $UserData[2];
|
||
|
|
||
|
$RUNTIME['CACHE']['USERNAME'][$userID] = $DBUserName;
|
||
|
|
||
|
if($DBUserID == $userID)
|
||
|
return $DBUserName;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return "Unknown User";
|
||
|
}
|
||
|
|
||
|
public function getUserUUID($UserName)
|
||
|
{
|
||
|
global $RUNTIME;
|
||
|
|
||
|
$statementUser = $RUNTIME['PDO']->prepare("SELECT PrincipalID,FirstName,LastName FROM UserAccounts");
|
||
|
$statementUser->execute();
|
||
|
|
||
|
while($rowUser = $statementUser->fetch())
|
||
|
{
|
||
|
$SQLUserName = $rowUser['FirstName']." ".$rowUser['LastName'];
|
||
|
|
||
|
if($SQLUserName == $UserName)
|
||
|
{
|
||
|
return $rowUser['PrincipalID'];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
public function getRegionName($regionID)
|
||
|
{
|
||
|
global $RUNTIME;
|
||
|
|
||
|
$statementRegion = $RUNTIME['PDO']->prepare("SELECT regionName FROM regions WHERE uuid = ?");
|
||
|
$statementRegion->execute(array($regionID));
|
||
|
|
||
|
while($rowRegion = $statementRegion->fetch())
|
||
|
{
|
||
|
return $rowRegion['regionName'];
|
||
|
}
|
||
|
|
||
|
return "Unknown Region";
|
||
|
}
|
||
|
|
||
|
public function getPartner($userID)
|
||
|
{
|
||
|
global $RUNTIME;
|
||
|
|
||
|
$statement = $RUNTIME['PDO']->prepare("SELECT profilePartner FROM userprofile WHERE useruuid = ?");
|
||
|
$statement->execute(array($userID));
|
||
|
|
||
|
while($row = $statement->fetch())
|
||
|
{
|
||
|
if($row['profilePartner'] != "00000000-0000-0000-0000-000000000000")
|
||
|
return $row['profilePartner'];
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
public function allowOfflineIM($userID)
|
||
|
{
|
||
|
global $RUNTIME;
|
||
|
|
||
|
$statement = $RUNTIME['PDO']->prepare("SELECT imviaemail FROM usersettings WHERE useruuid = ?");
|
||
|
$statement->execute(array($userID));
|
||
|
|
||
|
while($row = $statement->fetch())
|
||
|
{
|
||
|
return strtoupper($row['imviaemail']);
|
||
|
}
|
||
|
|
||
|
return "FALSE";
|
||
|
}
|
||
|
|
||
|
public function getUserMail($userID)
|
||
|
{
|
||
|
global $RUNTIME;
|
||
|
|
||
|
$statement = $RUNTIME['PDO']->prepare("SELECT Email FROM UserAccounts WHERE PrincipalID = ?");
|
||
|
$statement->execute(array($userID));
|
||
|
|
||
|
while($row = $statement->fetch())
|
||
|
{
|
||
|
return $row['Email'];
|
||
|
}
|
||
|
|
||
|
return "";
|
||
|
}
|
||
|
|
||
|
public function getUserCount()
|
||
|
{
|
||
|
global $RUNTIME;
|
||
|
|
||
|
$statementUser = $RUNTIME['PDO']->prepare("SELECT COUNT(*) FROM UserAccounts");
|
||
|
$statementUser->execute();
|
||
|
return $statementUser->fetchColumn();
|
||
|
}
|
||
|
|
||
|
public function getRegionCount()
|
||
|
{
|
||
|
global $RUNTIME;
|
||
|
|
||
|
$statementUser = $RUNTIME['PDO']->prepare("SELECT COUNT(*) FROM regions");
|
||
|
$statementUser->execute();
|
||
|
return $statementUser->fetchColumn();
|
||
|
}
|
||
|
|
||
|
public function getOnlineCount()
|
||
|
{
|
||
|
global $RUNTIME;
|
||
|
|
||
|
$statementUser = $RUNTIME['PDO']->prepare("SELECT COUNT(*) FROM Presence");
|
||
|
$statementUser->execute();
|
||
|
return $statementUser->fetchColumn();
|
||
|
}
|
||
|
|
||
|
public function gen_uuid()
|
||
|
{
|
||
|
return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
|
||
|
// 32 bits for "time_low"
|
||
|
mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
|
||
|
|
||
|
// 16 bits for "time_mid"
|
||
|
mt_rand( 0, 0xffff ),
|
||
|
|
||
|
// 16 bits for "time_hi_and_version",
|
||
|
// four most significant bits holds version number 4
|
||
|
mt_rand( 0, 0x0fff ) | 0x4000,
|
||
|
|
||
|
// 16 bits, 8 bits for "clk_seq_hi_res",
|
||
|
// 8 bits for "clk_seq_low",
|
||
|
// two most significant bits holds zero and one for variant DCE1.1
|
||
|
mt_rand( 0, 0x3fff ) | 0x8000,
|
||
|
|
||
|
// 48 bits for "node"
|
||
|
mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff )
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
?>
|