Attempt to make the code nicer
This commit is contained in:
parent
d57aa9a09c
commit
ef76b60f7d
3 changed files with 107 additions and 48 deletions
|
@ -1,10 +1,18 @@
|
||||||
<?php
|
<?php
|
||||||
class LoginCb extends CLoginServiceWeb
|
class LoginCb extends CLoginServiceWeb
|
||||||
{
|
{
|
||||||
|
private $ring_web_host;
|
||||||
|
private $ring_web_host_php;
|
||||||
|
|
||||||
|
public function __construct($ring_web_host, $ring_web_host_php)
|
||||||
|
{
|
||||||
|
$this->ring_web_host_php = $ring_web_host_php;
|
||||||
|
$this->ring_web_host = $ring_web_host;
|
||||||
|
}
|
||||||
|
|
||||||
// receive the login result sent back by the LS
|
// receive the login result sent back by the LS
|
||||||
public function loginResult($userId, $cookie, $resultCode, $errorString)
|
public function loginResult($userId, $cookie, $resultCode, $errorString)
|
||||||
{
|
{
|
||||||
global $RingWebHost, $RingWebHostPHP;
|
|
||||||
global $domainId;
|
global $domainId;
|
||||||
|
|
||||||
if ($resultCode == 0 && $cookie != "") {
|
if ($resultCode == 0 && $cookie != "") {
|
||||||
|
@ -31,7 +39,7 @@ class LoginCb extends CLoginServiceWeb
|
||||||
$res = joinMainland($userId, $domainId, $row["domain_name"]);
|
$res = joinMainland($userId, $domainId, $row["domain_name"]);
|
||||||
|
|
||||||
if ($res) {
|
if ($res) {
|
||||||
echo "1#" . $cookie . "#" . $FSHostResultStr . "#http://" . $RingWebHost . "/ring/web_start.php#http://" . $RingWebHostPHP . "/ring/\n";
|
echo "1#" . $cookie . "#" . $FSHostResultStr . "#http://" . $this->ring_web_host_php . "/ring/web_start.php#http://" . $this->ring_web_host . "/ring/\n";
|
||||||
// return the ring domain information
|
// return the ring domain information
|
||||||
echo $row["patch_version"] . "#" . $row["backup_patch_url"] . "#" . $row["patch_urls"];
|
echo $row["patch_version"] . "#" . $row["backup_patch_url"] . "#" . $row["patch_urls"];
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -10,34 +10,81 @@ include_once './../../tools/domain_info.php';
|
||||||
|
|
||||||
class ConnectionHandler
|
class ConnectionHandler
|
||||||
{
|
{
|
||||||
private $db_Connection;
|
private $db_base_connection;
|
||||||
|
private $db_ring_connection;
|
||||||
|
|
||||||
public function __construct()
|
private $db_ring_connection_host;
|
||||||
|
private $db_ring_connection_username;
|
||||||
|
private $db_ring_connection_password;
|
||||||
|
|
||||||
|
private $db_base_connection_host;
|
||||||
|
private $db_base_connection_username;
|
||||||
|
private $db_base_connection_password;
|
||||||
|
private $db_base_connection_dbname;
|
||||||
|
|
||||||
|
public function __construct($db_base_connection_host, $db_base_connection_username, $db_base_connection_password, $db_base_connection_dbname, $db_ring_connection_host, $db_ring_connection_username, $db_ring_connection_password)
|
||||||
{
|
{
|
||||||
|
$this->db_ring_connection_host = $db_ring_connection_host;
|
||||||
|
$this->db_ring_connection_username = $db_ring_connection_username;
|
||||||
|
$this->db_ring_connection_password = $db_ring_connection_password;
|
||||||
|
|
||||||
|
$this->db_base_connection_host = $db_base_connection_host;
|
||||||
|
$this->db_base_connection_username = $db_base_connection_username;
|
||||||
|
$this->db_base_connection_password = $db_base_connection_password;
|
||||||
|
$this->db_base_connection_dbname = $db_base_connection_dname;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function connect($dbhost, $dbusername, $dbpassword, $dbname)
|
/**
|
||||||
|
* Connects to the database using the constructor provided arguments
|
||||||
|
*/
|
||||||
|
public function connect()
|
||||||
{
|
{
|
||||||
$this->db_Connection = new mysqli($dbhost, $dbusername, $dbpassword) or die(errorMsgBlock(3004, 'main', $DBHost, $DBUserName));
|
connect_to_base_db($this->db_base_connection_host,
|
||||||
$this->db_Connection->select_db($dbname) or die(errorMsgBlock(3005, 'main', $dbname, $dbhost, $dbusername));
|
$this->db_base_connection_username,
|
||||||
|
$this->db_base_connection_password,
|
||||||
|
$this->db_base_connection_dbname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connect to the base database and sets the fields.
|
||||||
|
*/
|
||||||
|
public function connect_to_base_db($dbhost, $dbusername, $dbpassword, $dbname)
|
||||||
|
{
|
||||||
|
$this->db_base_connection = new mysqli($dbhost, $dbusername, $dbpassword) or die(errorMsgBlock(3004, 'main', $dbhost, $dbusername));
|
||||||
|
$this->db_base_connection->select_db($dbname) or die(errorMsgBlock(3005, 'main', $dbname, $dbhost, $dbusername));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connect to the ring database and set the fields.
|
||||||
|
*/
|
||||||
|
public function connect_to_ring_db($dbhost, $dbusername, $dbpassword, $dbname)
|
||||||
|
{
|
||||||
|
$this->db_ring_connection = new mysqli($dbhost, $dbusername, $dbpassword) or die(errorMsgBlock(3004, 'ring', $dbhost, $dbusername));
|
||||||
|
$this->db_ring_connection->select_db($dbname) or die(errorMsgBlock(3005, 'ring', $dbname, $dbhost, $dbusername));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the object goes out of scope.
|
||||||
|
*/
|
||||||
public function __destruct()
|
public function __destruct()
|
||||||
{
|
{
|
||||||
if ($this->db_Connection != null) {
|
if ($this->db_base_connection != null) {
|
||||||
$this->db_Connection->close();
|
$this->db_base_connection->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->db_ring_connection != null) {
|
||||||
|
$this->db_ring_connection->close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function askSalt($login, $lang)
|
private function askSalt($login, $lang)
|
||||||
{
|
{
|
||||||
setMsgLanguage($lang);
|
setMsgLanguage($lang);
|
||||||
$escaped_login = $this->db_Connection->escape_string($login);
|
$escaped_login = $this->db_base_connection->escape_string($login);
|
||||||
if ($stmt = $this->db_Connection->prepare('SELECT Password FROM user WHERE Login=\'?\' LIMIT 1')) {
|
if ($stmt = $this->db_base_connection->prepare('SELECT Password FROM user WHERE Login=\'?\' LIMIT 1')) {
|
||||||
$stmt->bind_param('s', $escaped_login);
|
$stmt->bind_param('s', $escaped_login);
|
||||||
$stmt->execute();
|
$stmt->execute();
|
||||||
$stmt->bind_result($password) or die(errorMsgBlock(3006, $query, 'main', $DBName, $DBHost, $DBUserName, $this->db_Connection->error));
|
$stmt->bind_result($password) or die(errorMsgBlock(3006, $query, 'main', $DBName, $DBHost, $DBUserName, $this->db_base_connection->error));
|
||||||
$stmt->fetch();
|
$stmt->fetch();
|
||||||
if ($stmt->num_rows == 1) {
|
if ($stmt->num_rows == 1) {
|
||||||
$salt = '1:' . get_salt($password);
|
$salt = '1:' . get_salt($password);
|
||||||
|
@ -53,46 +100,47 @@ class ConnectionHandler
|
||||||
* Create the db ring.
|
* Create the db ring.
|
||||||
* @todo: currently broken, because it uses globals.
|
* @todo: currently broken, because it uses globals.
|
||||||
*/
|
*/
|
||||||
private function CreateRing($domainInfo)
|
private function CreateRing($domainInfo, $id, $login)
|
||||||
{ // check if the ring user exist, and create it if not
|
{
|
||||||
// $ringDb = mysqli_connect($DBHost, $RingDBUserName, $RingDBPassword) or die(errorMsgBlock(3004, 'Ring', $DBHost, $RingDBUserName));
|
connect_to_ring_db($this->db_ring_connection_host,
|
||||||
// mysqli_select_db($ringDb, $domainInfo['ring_db_name']) or die(errorMsgBlock(3005, 'Ring', $domainInfo['ring_db_name'], $DBHost, $RingDBUserName));
|
$this->db_ring_connection_username,
|
||||||
// $query = "SELECT user_id FROM ring_users where user_id = '" . $id . "'";
|
$this->db_ring_connection_password,
|
||||||
// $result = mysqli_query($ringDb, $query) or die(errorMsgBlock(3006, $query, 'Ring', $domainInfo['ring_db_name'], $DBHost, $RingDBUserName, mysqli_error($ringDb)));
|
$domainInfo['ring_db_name']);
|
||||||
|
|
||||||
// if (mysqli_num_rows($result) == 0) {
|
if ($stmt = $this->db_base_connection->prepare('SELECT user_id FROM ring_users where user_id = \'?\' LIMIT 1')) {
|
||||||
// // no ring user record, build one
|
$stmt->bind_param('i', $id);
|
||||||
// $login = mysqli_real_escape_string($ringDb, $_GET['login']);
|
$stmt->execute();
|
||||||
// $query = "INSERT INTO ring_users SET user_id = '$id', user_name = '$login', user_type='ut_pioneer'";
|
$stmt->bind_result($password) or die(errorMsgBlock(3006, $query, 'main', $DBName, $DBHost, $DBUserName, $this->db_base_connection->error));
|
||||||
// $result = mysqli_query($ringDb, $query) or die(errorMsgBlock(3006, $query, 'Ring', $domainInfo['ring_db_name'], $DBHost, $RingDBUserName, mysqli_error($ringDb)));
|
$stmt->fetch();
|
||||||
// }
|
if ($stmt->num_rows == 0) {
|
||||||
|
// no ring user record, build one
|
||||||
|
$escaped_login = $this->db_ring_connection->escape_string($login);
|
||||||
|
$query = "INSERT INTO ring_users SET user_id = '$id', user_name = '$escaped_login', user_type='ut_pioneer'";
|
||||||
|
$result = $this->db_ring_connection->query($query) or die(errorMsgBlock(3006, $query, 'Ring', $domainInfo['ring_db_name'], $this->db_ring_connection_host, $this->db_ring_connection_username, $this->db_ring_connection->error));
|
||||||
|
}
|
||||||
|
$stmt->close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function Login($login, $password, $clientApplication, $cp, $submittedLang)
|
private function Login($login, $password, $clientApplication, $cp, $submittedLang)
|
||||||
{
|
{
|
||||||
$domainId = -1;
|
$domainId = -1;
|
||||||
|
$loginSuccessful = checkUserValidity($login, $password, $clientApplication, $cp, $id, $reason, $priv, $extended, $domainId, $submittedLang);
|
||||||
// Client sent his login info
|
// Client sent his login info
|
||||||
if (checkUserValidity($login, $password, $clientApplication, $cp, $id, $reason, $priv, $extended, $domainId, $submittedLang)) {
|
if (!$loginSuccessful) {
|
||||||
echo '0:' . $reason;
|
echo '0:' . $reason;
|
||||||
} else {
|
} else {
|
||||||
// retrieve the domain info
|
// retrieve the domain info
|
||||||
$domainInfo = getDomainInfo($domainId);
|
$domainInfo = getDomainInfo($domainId);
|
||||||
// if we need to create missing ring info
|
// if we need to create missing ring info
|
||||||
if ($AutoCreateRingInfo) {
|
if ($AutoCreateRingInfo) {
|
||||||
CreateRing($domainInfo);
|
CreateRing($domainInfo, $id, $login);
|
||||||
}
|
}
|
||||||
|
|
||||||
// store the web host for this domain
|
|
||||||
global $RingWebHost;
|
|
||||||
global $RingWebHostPHP;
|
|
||||||
|
|
||||||
$RingWebHost = $domainInfo['web_host'];
|
|
||||||
$RingWebHostPHP = $domainInfo['web_host_php'];
|
|
||||||
|
|
||||||
$LSaddr = explode(":", $domainInfo['login_address']);
|
$LSaddr = explode(":", $domainInfo['login_address']);
|
||||||
|
|
||||||
// ask for a session cookie to the login service
|
// ask for a session cookie to the login service
|
||||||
$loginCb = new LoginCb();
|
$loginCb = new LoginCb($domainInfo['web_host'], $domainInfo['web_host_php']);
|
||||||
$loginCb->connect($LSaddr[0], $LSaddr[1], '');
|
$loginCb->connect($LSaddr[0], $LSaddr[1], '');
|
||||||
$loginCb->login($id, $_SERVER['REMOTE_ADDR'], $domainId);
|
$loginCb->login($id, $_SERVER['REMOTE_ADDR'], $domainId);
|
||||||
|
|
||||||
|
@ -147,12 +195,12 @@ class ConnectionHandler
|
||||||
{
|
{
|
||||||
$res = false;
|
$res = false;
|
||||||
setMsgLanguage($lang);
|
setMsgLanguage($lang);
|
||||||
$domainName = $this->db_Connection->escape_string($clientApplication);
|
$domainName = $this->db_base_connection->escape_string($clientApplication);
|
||||||
|
|
||||||
if ($stmt = $this->db_Connection->prepare('SELECT domain_id FROM domain WHERE domain_name=\'?\' LIMIT 1')) {
|
if ($stmt = $this->db_base_connection->prepare('SELECT domain_id FROM domain WHERE domain_name=\'?\' LIMIT 1')) {
|
||||||
$stmt->bind_param("s", $domainName);
|
$stmt->bind_param("s", $domainName);
|
||||||
$stmt->execute();
|
$stmt->execute();
|
||||||
$stmt->bind_result($domainId) or die(errorMsgBlock(3006, $query, 'main', $DBName, $DBHost, $DBUserName, $db_Connection->error));
|
$stmt->bind_result($domainId) or die(errorMsgBlock(3006, $query, 'main', $DBName, $DBHost, $DBUserName, $db_base_connection->error));
|
||||||
$stmt->fetch();
|
$stmt->fetch();
|
||||||
if ($stmt->num_rows == 0) {
|
if ($stmt->num_rows == 0) {
|
||||||
// unrecoverable error, we must giveup
|
// unrecoverable error, we must giveup
|
||||||
|
@ -170,20 +218,20 @@ class ConnectionHandler
|
||||||
$accessPriv = strtoupper(substr($domainInfo['status'], 3));
|
$accessPriv = strtoupper(substr($domainInfo['status'], 3));
|
||||||
|
|
||||||
// now, retrieve the user infos
|
// now, retrieve the user infos
|
||||||
$login = $this->db_Connection->escape_string($login);
|
$login = $this->db_base_connection->escape_string($login);
|
||||||
$numrows = 0;
|
$numrows = 0;
|
||||||
if ($stmt = $this->db_Connection->prepare('SELECT Password, UId FROM user WHERE Login=\'?\' LIMIT 1')) {
|
if ($stmt = $this->db_base_connection->prepare('SELECT Password, UId FROM user WHERE Login=\'?\' LIMIT 1')) {
|
||||||
$stmt->bind_param('s', $login);
|
$stmt->bind_param('s', $login);
|
||||||
$stmt->execute();
|
$stmt->execute();
|
||||||
$stmt->bind_result($dbPassword, $dbUid) or die(errorMsgBlock(3006, $query, 'main', $DBName, $DBHost, $DBUserName, $this->db_Connection->error));
|
$stmt->bind_result($dbPassword, $dbUid) or die(errorMsgBlock(3006, $query, 'main', $DBName, $DBHost, $DBUserName, $this->db_base_connection->error));
|
||||||
$stmt->fetch();
|
$stmt->fetch();
|
||||||
if ($stmt->num_rows) {
|
if ($stmt->num_rows) {
|
||||||
$salt = get_salt($dbPassword);
|
$salt = get_salt($dbPassword);
|
||||||
if (($cp && $dbPassword == $password) || (!$cp && $dbPassword == crypt($password, $salt))) {
|
if (($cp && $dbPassword == $password) || (!$cp && $dbPassword == crypt($password, $salt))) {
|
||||||
if ($stmt2 = $this->db_Connection->prepare('SELECT AccessPrivilege, Privilege, ExtendedPrivilege FROM permission WHERE UId=\'' . $dbUid . '\' AND DomainId=\'$domainId\'')) {
|
if ($stmt2 = $this->db_base_connection->prepare('SELECT AccessPrivilege, Privilege, ExtendedPrivilege FROM permission WHERE UId=\'' . $dbUid . '\' AND DomainId=\'$domainId\'')) {
|
||||||
$stmt2->bind_param('i', $dbUid);
|
$stmt2->bind_param('i', $dbUid);
|
||||||
$stmt2->execute();
|
$stmt2->execute();
|
||||||
$stmt2->bind_result($dbAccessPrivilege, $dbPrivilege, $dbExtendedPrivilege) or die(errorMsgBlock(3006, $query, 'main', $DBName, $DBHost, $DBUserName, $this->db_Connection->error));
|
$stmt2->bind_result($dbAccessPrivilege, $dbPrivilege, $dbExtendedPrivilege) or die(errorMsgBlock(3006, $query, 'main', $DBName, $DBHost, $DBUserName, $this->db_base_connection->error));
|
||||||
$stmt2->fetch();
|
$stmt2->fetch();
|
||||||
if ($stmt->num_rows == 0) {
|
if ($stmt->num_rows == 0) {
|
||||||
// no permission
|
// no permission
|
||||||
|
@ -194,9 +242,7 @@ class ConnectionHandler
|
||||||
// no permission
|
// no permission
|
||||||
$reason = errorMsg(3013, $clientApplication, $domainName, $accessPriv);
|
$reason = errorMsg(3013, $clientApplication, $domainName, $accessPriv);
|
||||||
} else {
|
} else {
|
||||||
if (IsUserOnline()) {
|
if (!IsUserOnline($res)) {
|
||||||
|
|
||||||
} else {
|
|
||||||
$id = $dbUid;
|
$id = $dbUid;
|
||||||
$priv = $dbPrivilege;
|
$priv = $dbPrivilege;
|
||||||
$extended = $dbExtendedPrivilege;
|
$extended = $dbExtendedPrivilege;
|
||||||
|
@ -215,7 +261,12 @@ class ConnectionHandler
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function IsUserOnline()
|
/**
|
||||||
|
* Check if user is online and try to disconnect him.
|
||||||
|
* Sets res to false if it failed.
|
||||||
|
* @todo fix it.
|
||||||
|
*/
|
||||||
|
private function IsUserOnline(&$res)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
// // check if the user not already online
|
// // check if the user not already online
|
||||||
|
|
|
@ -21,8 +21,8 @@ if (isset($_GET['dbg']) && ($_GET['dbg'] == 1)) {
|
||||||
// Create a command object using the user's parameters.
|
// Create a command object using the user's parameters.
|
||||||
$nel_command = new NelCommand($_GET);
|
$nel_command = new NelCommand($_GET);
|
||||||
// Create a connexion handler to process that command.
|
// Create a connexion handler to process that command.
|
||||||
$connection_handler = new ConnectionHandler();
|
$connection_handler = new ConnectionHandler($DBHost, $DBUserName, $DBPassword, $DBName, $DBHost, $RingDBUserName, $RingDBPassword);
|
||||||
// Connect the connection handler to the database.
|
// Connect the connection handler to the database.
|
||||||
$connection_handler->connect($DBHost, $DBUserName, $DBPassword, $DBName);
|
$connection_handler->connect();
|
||||||
// Process the command sent by the user.
|
// Process the command sent by the user.
|
||||||
$connection_handler->process_command($nel_command);
|
$connection_handler->process_command($nel_command);
|
||||||
|
|
Loading…
Reference in a new issue