2018-06-07 10:56:13 +00:00
|
|
|
<?php
|
|
|
|
class Application
|
|
|
|
{
|
|
|
|
private $database = [];
|
|
|
|
|
|
|
|
private $db;
|
|
|
|
|
|
|
|
public function __construct()
|
|
|
|
{
|
|
|
|
$config = new Config();
|
2018-06-08 15:16:16 +00:00
|
|
|
$cConfigArray = $config->getConfig();
|
2018-06-07 10:56:13 +00:00
|
|
|
|
2018-06-08 15:38:27 +00:00
|
|
|
|
|
|
|
|
2018-06-08 15:16:16 +00:00
|
|
|
$this->database['username'] = $cConfigArray['core']['database']['username'];
|
|
|
|
$this->database['password'] = $cConfigArray['core']['database']['password'];
|
|
|
|
$this->database['hostname'] = $cConfigArray['core']['database']['hostname'];
|
|
|
|
$this->database['dbname'] = $cConfigArray['core']['database']['dbname'];
|
2018-06-07 10:56:13 +00:00
|
|
|
|
2018-06-08 17:58:18 +00:00
|
|
|
$this->instDB();
|
|
|
|
}
|
|
|
|
|
|
|
|
private function isHostAlive($domain)
|
|
|
|
{
|
|
|
|
$starttime = microtime(true);
|
|
|
|
$file = fsockopen ($domain, 80, $errno, $errstr, 10);
|
|
|
|
$stoptime = microtime(true);
|
|
|
|
$status = 0;
|
|
|
|
|
|
|
|
if (!$file) $status = -1; // Site is down
|
|
|
|
else
|
|
|
|
{
|
|
|
|
fclose($file);
|
|
|
|
$status = ($stoptime - $starttime) * 1000;
|
|
|
|
$status = floor($status);
|
|
|
|
}
|
|
|
|
return $status;
|
2018-06-07 10:56:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
protected function instDB()
|
2018-06-08 17:58:18 +00:00
|
|
|
{
|
2018-06-08 15:38:27 +00:00
|
|
|
|
2018-06-08 17:58:18 +00:00
|
|
|
$dsn = "mysql:host=" . $this->database['hostname'] . "dbname=" . $this->database['dbname'];
|
|
|
|
$username = $this->database['username'];
|
|
|
|
$password = $this->database['password'];
|
2018-06-07 10:56:13 +00:00
|
|
|
|
2018-06-08 17:58:18 +00:00
|
|
|
echo $this->database['hostname'];
|
|
|
|
|
|
|
|
$Conn = \ParagonIE\EasyDB\Factory::create($dsn, $username, $password);
|
|
|
|
|
|
|
|
$this->db = $Conn;
|
|
|
|
|
2018-06-07 10:56:13 +00:00
|
|
|
}
|
2018-06-08 15:38:27 +00:00
|
|
|
|
2018-06-07 10:56:13 +00:00
|
|
|
public function Exists($Table, $IDRowColumnName, $SearchValue)
|
|
|
|
{
|
|
|
|
$exists = $db->cell(
|
|
|
|
"SELECT count(ID) FROM $Table WHERE $IDRowColumnName = ?",
|
|
|
|
$SearhValue
|
|
|
|
);
|
|
|
|
|
|
|
|
// Query might not return what we're looking for, an integer. Use vardump if otherwise.
|
|
|
|
return ($exists == 1) ? true : false;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function adminExists($AdminID)
|
|
|
|
{
|
|
|
|
$this->Exists("Administrators", "ID", $ID);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public function addAdministrator($Username, $Name, $Email, $Password, $KeyID)
|
|
|
|
{
|
|
|
|
$this->db->insert('Administrators', [
|
|
|
|
'AdministratorName' => $Name,
|
|
|
|
'AdministratorUsername' => $Username,
|
|
|
|
'AdministratorEmail' => $Email,
|
|
|
|
'AdministratorPassword' => $Password
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function listAdminsByName($AdminUsername)
|
|
|
|
{
|
|
|
|
$Admin = $this->db->row(
|
|
|
|
"SELECT * FROM Administrators WHERE Username = ?",
|
|
|
|
$Username
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public function addKey($AdminID, $Keyname)
|
|
|
|
{
|
|
|
|
$key = password_hash(openssl_random_pseudo_bytes(32), PASSWORD_BCYPT);
|
|
|
|
|
|
|
|
$this->db->insert('APIKeys', [
|
|
|
|
'AdminID' => $AdminID,
|
|
|
|
'Keyname' => $Keyname,
|
|
|
|
'Keytext' => $key
|
|
|
|
]);
|
|
|
|
|
|
|
|
return $key;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public function ApiKeyExists($AdminID)
|
|
|
|
{
|
|
|
|
$this->Exists("APIKeys", "AdminID", $AdminID);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public function ApiKeyToAdminId($Key)
|
|
|
|
{
|
|
|
|
$apiKey = $this->db->row(
|
|
|
|
"SELECT * FROM APIKeys WHERE Keytext = ?",
|
|
|
|
$Key
|
|
|
|
);
|
|
|
|
|
|
|
|
// Expecting an array. Var dump if else
|
|
|
|
if ($apiKey == null && !is_array($apiKey))
|
|
|
|
{
|
|
|
|
throw new LogicException("Illegal data from DB: ApiKeyToAdminId");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|